渗透测试思路整理
1.单目标渗透(web)
1.1.信息收集
渗透的开始都是信息收集,很多时候一次渗透的成功与否决定性因素就是信息收集,也许多了一个信息点就是突破口。
1.1.1.目录爆破
对于目录爆破,目标不多的时候,应尽可能做一下目录爆破,假如有防护可以调低线程数,再不行就做针对性手测。例如这是php的站就不要测jsp, aspx了,因此手动目录爆破前最好先做指纹收集。
工具推荐:dirsearch https://github.com/maurosoria/dirsearch
1.1.2.指纹收集
收集cms信息、中间件信息、系统信息、编程语言等等。
工具推荐:wappalyzer google\firefox插件
1.1.3.前端代码接口收集
特指前端是因为不只包括html源码,也包括js代码中的接口、重要url,往往有些路径爆破不出来,但可以通过前端代码审计获得,从而绕过一些流程得到站点的脆弱点,甚至是未授权访问等。
1.1.4.子域名爆破
例如一个主域名example.com,不一定要这样:oa.example.com, test.example.com,也可以:oatest.example, testoa.example。即不一定爆破点两边都有‘.’,也可以插入在子域名中。
工具推荐:subDomainsBrute https://github.com/lijiejie/subDomainsBrute
1.1.5.fofa.so
合理运用fofa.so,例如可以用来辅助查找真实ip,查找子域名站点,查找该服务器其他的web服务。也可以获得该站点的icon_hash,再反查同样icon_hash的网站,通过其他同icon_hash的站暴露的脆弱点,拿回目标来测试。
1.1.6.真实ip
查真实ip方法:fofa查,海外ping ip,dnslog,dns解析历史,查旁站等。
1.1.7.google hacking
搜索该站点的用户名格式,例如学号、工号,需要什么找什么,运用google高级搜索语法。
1.2.扫描(被动扫描与主动扫描)
被动扫描,手动浏览页面,结合扫描器扫描手动浏览过的页面,或使用工具纯人工测试扫描;主动扫描,使用扫描器创建任务,开启扫描,睡醒收漏洞。
1.2.1.常用工具
首先列举一下我用得比较多的工具:AWVS,Nessus,Xray,goby,sqlmap,vulmap,XSStrike,burp。
AWVS: 主动扫描web服务效果比较好的,覆盖面广,误报率较低,功能也比较全面,可设置api。
Nessus: 一般用来扫描非web服务,个人认为web漏洞扫描效果不好,这里主要先讲web,因此先不提。
Xray: 被动扫描web服务效果比较好的,覆盖面广,误报率低,可设置api。个人使用感觉,sql注入扫描和xss扫描比AWVS突出,但是被动扫描的时候,默认发包量过大。
goby: 一般用于资产扫描,资产扫描比较快速,但也会有漏的,拿来端口扫描是很不错的。另外,goby可以添加很多插件,可以加入goby联动rad,也可以加AWVS的api,但我还没尝试过。
sqlmap: sql注入专用,我一般用于一些直觉像注入点的,我就往sqlmap扔;或者一些手注fuzz找到绕过方法,再用tamper参数做绕过。
vulmap: 用来识别和扫描框架、CMS漏洞,各种CVE。
XSStrike: AWVS或者Xray或者手注发现了一个XSS疑似点,想方设法绕想做弹窗的时候可以直接上这个工具,误报率较低。
burp: 每天用,每时每刻没关过。
1.2.2.扫描思路
首先判断有没有防护:
a) 有防护:
那就先不用主动扫描器,Xray也先不用,首先做不引起防护的信息收集,比如前端代码接口收集、指纹收集、真实ip、子域名爆破、手动的目录爆破。然后接下来的思路是先整体后局部,先从CMS、框架、中间件、插件入手,从CVE漏洞入手,使用搜索引擎找对应的版本的漏洞复现;再从web基本漏洞入手,例如:xss、sql注入、文件上传等。
这些都排查完了以后,再看前端代码接口有什么,遍历一遍,看有没有脆弱点。
完了以后再看手动目录爆破的结果,遍历一遍,找脆弱点。
完了以后再看有没有子域名爆破出来,遍历一遍,找脆弱点。
再完了以后找真实ip,看能不能绕过CDN,可能本站是没有防护的呢。
再完了以后没找到真实ip,那就用burp抓关键页面的包,找交互点和脆弱点,凭经验手注。
完了以后手注也差不多也没什么了能干了的,就当没防护的开干。
b) 无防护:
上扫描器加burp手测,怎么效率高怎么来。
思路还是由整体到局部:先从CVE入手,再测web基本漏洞。
AWVS、Xray扫到的sql注入,根据给出的请求包,去sqlmap构造一个,但是要把payload删掉,换成一个简单的数据,例如:id=1‘ or 1=1-- 换成Id =1就好了,下面详细一点讲。
挖到的XSS先手测,因为打开XSStrike去测可能都已经手测出来了,手测实在不能弹窗的话就用XSStrike。
文件上传点都过一遍,但同类型的点只看一个就好了,就比如同一页面下不同的标签下都有上传点,看一个就好了,要么代码都是一样的,要么用的一个上传接口。
1.3.漏洞挖掘
1.3.1.SQL注入
一个请求中,参数少的话可以直接使用burp重放修改参数插入sql语句测试;参数多的话,可以直接上sqlmap。GET方法请求的话可以直接使用-u参数,POST方法的话我习惯使用-r参数,直接把burp包全选复制,vim 一个新文件,直接粘贴,然后加-r参数。使用sqlmap的时候我习惯加上--random-agent参数,服务器响应慢的话还会加上--time-sec参数。无脑扔sqlmap的请求一般不加--level/--risk,但是高度怀疑的点就会加上--level/--risk。其次使用sqlmap的时候有一些可能需要做简单的绕过的,可以使用--tamper参数,查看有什么tamper的话可以使用--list-tampers参数。
再说回到注入点的payload的问题,举个例子:
POST /Home/Login HTTP/1.1 Host: 1xx.2xx.1xx.xx User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:90.0) Gecko/20100101 Firefox/90.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Content-Type: application/x-www-form-urlencoded Content-Length: 94 Origin: http://1xx.2xx.1xx.xx Connection: close Referer: http://1xx.2xx.1xx.xx/Home/Login Upgrade-Insecure-Requests: 1 USERNAME=1)%20AND%208315%3d8315%20AND%20(3433%3d3433&PASSWORD=21232f297a57a5a743894a0e4a801fc3
像上面这种情况,username直接复制过来使用sql注入的payload在里面的,我们就需要把它清除掉,变成这样:
POST /Home/Login HTTP/1.1 Host: 1xx.2xx.1xx.xx User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:90.0) Gecko/20100101 Firefox/90.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Content-Type: application/x-www-form-urlencoded Content-Length: 94 Origin: http://1xx.2xx.1xx.xx Connection: close Referer: http://1xx.2xx.1xx.xx/Home/Login Upgrade-Insecure-Requests: 1 USERNAME=1&PASSWORD=21232f297a57a5a743894a0e4a801fc3
然后再保存成一个txt文件,再使用sqlmap的-r参数扫描,会比夹杂着payload的请求成功几率高。
遇到mssql注入时,假如时联合注入,大概率可以直接进入os-shell;假如不能os-shell只能sql-shell的情况,一般不能执行系统命令。下周仍需研究一下遇到sql-shell但知道web绝对路径的时候,看有没有办法使用sql-shell写一个webshell。
1.3.2.XSS
挖XSS的第一感觉肯定就是:输入什么回显什么。我的一般思路是在数据中插入<script>,或者<img>,<a>等标签,先不插入其他。然后在页面中按f12看插入点的标签有没有被变色。如果变色了那肯定是执行了插入的代码。
大体思路就是:插入的payload,从短到长。举例一下:
<img> #不执行,绕过 <iMg> #执行,加长 <iMg src> #执行,加长 <iMg src=x onerror> #不执行,绕过 <iMg src=x onERroR> #不执行,绕过 <iMg src=x onStaRT> #执行,加长 <iMg src=x onStaRT=alERt(123)> #执行,成功弹窗
怎么才能知道有没有执行,我的方法一般是f12看颜色就能知道。假如手测比较困难弹窗可以用XSStrike,它会给出很多弹窗的payload。
1.3.3.文件上传
文件上传思路都差不多了,首先判断是什么限制:
前端限制后缀名,后端限制后缀名、content-type、文件头识别、木马查杀等。
然后准备好一个文件夹里面放各种马和变种马。php/jsp/apsx马,再准备好把后缀改成了,jpg/pdf...的马,准备增加了文件头幻数的马。再准备好.htaccess,user.ini这样的文件,方便需要什么传什么。
1.3.4.弱口令
固定用户名爆破密码,固定密码爆破用户名。
1.3.5.未授权访问
附上401越权小技巧:(作者看蓝色框内)

别的漏洞就没什么见解了,欢迎补充和指点。
2.多目标渗透(web)
多目标还是建立在单目标上,接下来这部分简述一些自己的见解。
2.1.信息收集
端口扫描+服务识别+目录爆破
首先发现端口,找到所有http服务,并识别状态码,这个goby可以做到。
目录爆破:
首先打开网页查看,假如是除200、403、404、401外的连接超时、500等稀奇古怪的状态码的可以直接略过。
假如是403、404,可能只是找不到Index,因此可以爆破目录,往往会有惊喜。
假如是401,可以尝试401越权小技巧,当然试几个就算了,提高效率。
假如是200,但现实nginx、apache等初始页面的,说明还没动过,可以直接略过。
假如是200,但页面上写着body标签的字,禁止访问、无法访问等,说明可能动过但废弃掉了,直接爆破目录,会有惊喜。
使用dirsearch扫描后,响应包大小也是很重要的,可能有很多个200,但是返回包都是一样大的,看其中一个就Ok了,这种大概率都是没有营养的。
批量化:把403, 404状态码的url导出来,使用dirsearch批量扫描,这样的状态码一般要么不出东西,要么出有营养的东西,很快能找到脆弱点。但dirsearch批量扫描需要结合脚本。
2.2.扫描
假如是200,页面也有内容,但几乎是纯静态而且是比较老的,就不用再一个个页面搜后端交互点了,有交互点就测,不需要一个个静态页面找,直接目录爆破,说明很久没更新使用,可能有惊喜。
假如是200,页面很丰富,很多功能点和后端交互点,找一个点手测几次,发现没有防护直接上扫描器,xray或者awvs。
有防护的话可能就要花点心思了,先手测,要用扫描器的话先用扫CMS、插件的扫描器,如vulmap,再上AWVS或者xray,或许xray把线程调低,还是可以的。
也可以先手测,没有头绪再上扫描,扫到被ban了也可以换目标。等服务器缓过来再回去看。
简而言之,量大就要提高效率,快速找脆弱点。
2.3.漏洞挖掘
挖漏洞就和单目标雷同了。
3.web外渗透
3.1.信息收集
端口扫描+指纹识别
发现什么端口运行着什么服务,获得该服务的指纹信息。
3.2.扫描
Nessus是一个好帮手。
对照常见漏洞服务和端口把风险项标出。
3.3.漏洞挖掘
能用poc&exp就不手测,重点关注各服务未授权访问和弱口令。
一些CVE或弱口令,不一定要去网上找,很多服务的弱口令爆破工具,msf里面就有。
写得不好,水了,有待补充,欢迎师傅们斧正。

浙公网安备 33010602011771号