目录
在渗透测试的过程中,信息收集是其中最重要的一部分,你收集到目标的信息越多,你的渗透切入点就越多,你对目标渗透的成功率也就越高。所以,有的大牛说:渗透测试的本质是信息收集。这里信息收集我分为两大类,第一大类是对目标网站的正面信息收集(组成网站的信息),第二大类是从网站的侧面来进行信息收集。
我们在浏览目标网站的网页时,往往可以发现一些比较重要的信息。从网站的URL观察,有些URL会暴露网站使用的脚本语言。再往下观察网站是否有在线客服窗口,网站底部你可能在网站页面观察到的信息有:URL信息(1.例如使用的OA.xxxcom2.使用的脚本语言)、在线客服、技术支持、关于公司的联系方式(邮箱、电话号码、工作地点等)、备案号、营业执照、后台登录接口、友情链接、某些二维码等。
在渗透测试过程中,一般在目标的主站很少有发现漏洞点的存在,这时候我们就要从从主站之外的接口进行渗透测试,这时我们可以从域名出发收集信息。
一个网站可能会开放多个不同的端口,而我们可以通过同一网站的不同端口进行测试,扫描开放端口的方法有很多,这里我分为两种:第一种在线端口扫描,第二种利用工具扫描端口。比较常见的在线端口扫描网站有:在线端口扫描,IP/服务器端口在线扫描 - TooL.cc、在线端口检测,端口扫描,端口开放检查-在线工具-postjson等;端口扫描工具有nmap,goby等。
目标的子域是一个重要的测试点,你收集到的可用的子域名越多,意味着你的机会也就越多,所以说要尽可能的收集目标的子域名。子域名的收集方法有很多,这里我分为两种:第一种在线子域名收集。第二种利用工具进行子域名收集。比较常见的在线子域名搜索(爆破)的网站有:在线子域名爆破-子成君提供、在线子域名查询等;子域名扫描工具有oneforall、layer子域名挖掘机、SubDomainsBrute等。
对目标主机无计可施时,我们可以尝试一下从C段或者旁注入手。C段入侵是拿下同一C段下的服务器,也就是说是D段1-255中的一台服务器,然后直接从被端掉的服务器出发进行其他测试;旁注的意思就是从同台服务器上的其他网站入手,提权,然后把服务器拿下了,就自然把那个网站拿下了。两者的区别:C段:同网段不同服务器,旁注:同服务器不同站点。C段旁注扫描:同IP网站查询,C段查询,IP反查域名,C段旁注,旁注工具
目录扫描也是一个渗透测试的重要点,如果你能从目录中找到一些敏感信息,那么你的渗透过程就会轻松很多。例如扫描出后台,源码,robots.txt的敏感目录或者敏感信息。目录扫描我分为两种:一种时在线目录扫描,一种是利用工具扫描目录。
在线目录扫描可以使用Google语法然后利用我们平时用的搜索引擎(搜狗,百度,bing,Google等)进行搜索,例子:
任意文件下载:site:域名 filetype:zip|rar|zip|xml
敏感信息(目录):site:域名 index of、intitle:"Index of /admin"
未授权访问:inurl:php? intext:CHARACTER_SETS,COLLATIONS, ?intitle:phpmyadmin、
后台:site:xxx.com inurl:login|admin|manage|member|admin_login|login_admin|system|login|user、
敏感信息泄露:
site:xxx.com intext:管理|后台|登录|用户名|密码|系统|账号|admin|login|managetem|password|username
sql注入:site:域名 inurl:?id=
扫描工具有:御剑,dirseach等。
URL请求分为get与post,辨别的办法可以使用抓包(流量监控)软件或者插件。
各种web组件组合构成网站。
网站服务器有不同的操作系统:windows、Linux、mac os,这里需要知道的是windows对大小写不敏感,其他两个对大小写敏感就行了。
目前比较常用的数据库有:MySQL、SQL server、Oracle等。SQL server开放的默认端口:1433,MySQL开放的默认端口:3306、Oracle开放的默认端口:1521。
目前比较常见的web容器有:IIS(iis解析漏洞),apache,tcmact,nginx,jboss等。
cms有很多,这里就列举一部分例子:dedeCMS、 帝国CMS等。
web框架有struts1、Struts2、Spring MVC等(框架漏洞)
web组件识别(web指纹识别)一般可以识别出以上的网站基础信息。web指纹识别我分为在线扫描与工具识别。在线扫描的网站有:潮汐指纹识别TideFinger 潮汐指纹 TideFinger 潮汐指纹、云悉指纹yunsee.cn-2.0、强大的网站信息扫描网网站基础信息获取 - ThreatScan - 免费的网站在线安全检测平台-TScan;
web指纹识别工具:御剑、北极熊扫描器等;指纹识别插件有wappalyzer。
得到目标URL之后,我们可以通过站长之家来进行whios查询这家公司的信息。例如:公司名称,注册人或者机构、联系方式:邮箱,手机号码,备案号,ip,域名,DNS,少量子域名等。
常用的空间搜索引擎一般有:FOFA、shodan、zoomeye。其中FOFA一般搜索到的是一些网站的信息,收集到的偏软件类信息比较多;而shodan和zoomeye则是搜索网络在线设备信息,偏向于收集硬件的信息。具体使用规则需要自己去摸索。
Google语法是最强大的搜索手段之一,你可以收集到一些敏感页面、敏感目录、网站内可下载的文件、可能出现的sql注入点和文件上传点、未授权访问页面等。
通过识别网站是否存在WAF以及网站存在什么样的WAF,根据自己的水平(能否绕过此类WAF)来决定还应不应该花时间耗在绕WAF上(不仅限于参加比赛)。
不常用但是有可能用的的方法。
————————————————
版权声明:本文为CSDN博主「bk天气」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_49577923/article/details/120796950
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。
我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere
Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/
我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test
我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r
我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel