1.单⽬标渗透(web)
1.1.信息收集
渗透的开始都是信息收集,很多时候⼀次渗透的成功与否决定性因素就是信息收集,也许多了⼀个信息点就是突破⼝。
1.1.1.⽬录爆破
对于⽬录爆破,⽬标不多的时候,应尽可能做⼀下⽬录爆破,假如有防护可以调低线程数,再不⾏就做针对性⼿测。例如这是php的站就不要测jsp, aspx了,因此⼿动⽬录爆破前最好先做指纹收集。 ⼯具推荐: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
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.1Host: 1xx.2xx.1xx.xx
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:90.0) Gecko/20100101 Firefox/90.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8Accept-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.2Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencodedContent-Length: 94
Origin: http://1xx.2xx.1xx.xxConnection: close
Referer: http://1xx.2xx.1xx.xx/Home/LoginUpgrade-Insecure-Requests: 1
USERNAME=1)%20AND%208315%3d8315%20AND%20(3433%3d3433&PASSWORD=21232f297a57a5a743894a0e4a801fc3像上⾯这种情况,username直接复制过来使⽤sql注⼊的payload在⾥⾯的,我们就需要把它清除掉,变成这样:POST /Home/Login HTTP/1.1Host: 1xx.2xx.1xx.xx
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:90.0) Gecko/20100101 Firefox/90.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8Accept-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.2Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencodedContent-Length: 94
Origin: http://1xx.2xx.1xx.xxConnection: close
Referer: http://1xx.2xx.1xx.xx/Home/LoginUpgrade-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的第⼀感觉肯定就是:输⼊什么回显什么。我的⼀般思路是在数据中插⼊