简单分析-web方面
最后更新于
最后更新于
最近对awvs进行一些简单研究,众所周知awvs的非常好用的扫描器。强大的爬扫能力让很多人很喜欢他,不过强大的话也对应有它的缺点,第一,体积庞大,扫描耗时间太久;第二,无法跨平台,只能让windows来用。不过这个几个缺点对这个牛逼的扫描器貌似也没啥影响,还是很多人爱用。
不过对扫描器来说核心还是规则,我们还是可以重点分析一下awvs的扫描规则。
搭建环境,抓流量进行分析
一个web狗,不会分析二进制。所以我只能抓包来分析了。
搭建一个漏洞url地址(这里只要一个url就够了,多了payload就太多不好分析了)用burp来抓,设置好burp的代理地址(proxy-options-proxy listeners-add)。在awvs中在设置一下扫描器的使用的代理地址为burp就可以开心的抓包了。
简单的抓包,可以大体的看成来awvs都做哪些扫描,而且我们可以找到一些马上可以用规则,比如破壳漏洞,文件读取,备份文件扫描,敏感文件扫描,ssrf,头注入等等。
2.script源码分析和调试
但是分析了一波流量,还是感觉很多payload找不到规则(比如sql注入的逻辑,jboss的漏洞匹配规则等等)。于是看了一下awvs的安装目录发现有一个data/scripts目录,里面有很多加密的文件,不用说了一定是扫描规则。
于是开始在网上找有没有人做过这个的相关破解工作,发现还真有: http://blog.oowoodone.com/archives/2016/03/30/wvs_script_decode/ http://gv7.me/articles/2017/Writing-AWVS-scripts-to-detect-Web-Services/
问了一下博主要了一下规则,他就直接把规则同步github https://github.com/c0ny1/awvs_script_decode
这种“前人种树,后人乘凉”的感觉还是很舒服的,所以自己以后也要多种种”树“.
打开规则一开全是类似javascript的脚本,直接看还是有点难懂。如果最好能运行并调试起来就美滋滋了。去搜索了一下官方的关于script的文档发现,awvs提供了编写script脚本的接口。
http://www.acunetix.com/download/tools/WVSSDK.zip
解压以后里面有一个使用文档,根据文档就明白很多了。
根据文档我们可以知道:
下面以/Scripts/PerFile/Bash_RCE.script作为一个调试案例:
使用wvs scripting打开/Scripts/PerFile/Bash_RCE.script文件。
点击小齿轮,设置扫描目标:
这里比较蛋疼就是不能直接输入扫描的目标(反正我没找到),需要去load一下awvs爬虫保存的.cwl文件。我们在awvs上简单爬一下扫描的目标,然后保存成xxx.cwl。再通过wvs scripting去load这个文件。
最后是运行,这里具体根据script来确定set target的什么类型,比如Bash_RCE.script,中用了var file = getCurrentFile(),你就需要set file target,最后run per file。(当然还有其他的就不再举例子了)
到这里我们就可以跑起每个脚本进行运行调试了,能跑起来,我们就可以去logInfo一些东西,这样去看脚本都做哪些操作就简单多了。
tip:那么我们可以一个一个目录的去分析每个脚本,当然也有一个小技巧去提前分析高危的扫描脚本。那就是先用awvs去扫一下他的测试站点:http://testphp.vulnweb.com/ ,awvs会告诉你是哪个脚本发现的漏洞和且匹配到的内容,这样我们就挑选自己最先想研究的漏洞来看。(不过要注意这个testphp测试站点,awvs默认启动了AcuSensor Technology技术
https://www.acunetix.com/vulnerability-scanner/acusensor-technology/
如果你要用它做测试站点的话,代码逻辑会走到acusensor对应的代码)
扫描方式
awvs在扫描前,都会对url进行的详细的分类和参数的解析。常见为:file,folder,scheme等类型。几乎每种类型的url都会有一个目录对他进行专门的漏洞扫描。
在扫描前对url进行比较细致的分类是可以学习一波的,特别是对scheme类型的url进行参数解析。大部分的扫描都会有这部分的参数解析,不过一般都是类似于(a=b&c=1的这种解析),但是如果参数是json格式的(b=1&c={"uname":"wilson","id":"23333"}) ,很多扫描器不支持,不过大家可以参加一下sqlmap的json格式解析(walk方法,https://github.com/sqlmapproject/sqlmap/blob/master/lib/core/common.py)
至于每种类型的url都会有一个目录对它进行专门的漏洞扫描方式的话,你也可能选择用一个脚本去处理一类漏洞类型,然后对这个漏洞类型可能在哪种url类型出现进行测试。
2. 规则,大把大把的规则
看到代码最大的好处就是可以看到他的匹配正则了,比如敏感部署文件备份匹配规则,任意文件读取规则,sql报错注入关键字匹配,命令执行等等。
更多规则见脚本。
3. AcuMonitor 技术
https://www.acunetix.com/vulnerability-scanner/acumonitor-technology/
这东西简单理解就是和你的dnslong一样的,适用于扫描无回显的漏洞,比如:
我们可以在脚本中找到他们的规则:
那么重点是怎么把漏洞和对应url关联??
我的处理是让漏洞服务器发起http请求,将urlid带到uri中,比如
http://blog.wils0n.cn/urlid/param/cveid
根据这uri中的urlid进行定位url参数。但是这样会还是会有一些漏扫,比如ssrf只出现在http的host中,uri并不会带入请求。
所以比较准确一个是使用dns来做。例如:nslookup dns.urlid-param-cveid.wils0n.cn,在服务端上根据urlid-param-cveid来处理漏洞。
关于dnslog service的搭建:
存在的问题:
问题1)没有响应包回复,导致请求会一直发,可以参考https://github.com/BugScanTeam/DNSLog/blob/master/dnslog/zoneresolver.py 进行改进一下。
问题2) url跳转扫描可能会导致误报的情况出现,由于dns请求会绕过很多跳,所以根据扫描ip来判断是无法做到,暂时不知道怎么解决。。。不过误报会比漏报好一些
4.awvs的网站目录和文件扫描思路
很多web扫描器的开始都是对url进行网站目录和文件扫描,然后再结合爬虫一起爬一下。
因为大家的想法都是:“不管有没有漏洞,我先扫一遍目录再说”,所以网上这种爬目录文件的工具极其多。
看了一下网上的工具的逻辑大概是:
这个思路在大部分情况下面用。但是有些站点,你会发现扫到一堆200的误报。分析为什么:
那么我们分析一下awvs的目录和文件扫描姿势:(Backup_File.script,Sensitive_Files.script, Possible_Sensitive_Directories ,Possible_Sensitive_Files )
个人感觉扫目录逻辑走第一和第三就可以了。
5.sql注入检查
可能很多人都会用sqlmap来做注入检查,但是sqlmap还是有点大,扫描payload比较多,扫描时间长。
awvs的sql注入也可以参考一下:
1.基于错误返回信息的关键字直接判断为存在sql注入漏洞。(Sql_Injection.script)
主要匹配的关键字有:
这样匹配的话,还是比较准确的,但是有的时候会有误报。
2.盲注入(Blind_Sql_Injection.script)
2.1 bool型的盲注入
我把这部分的扫描逻辑理了一下,大概是这样的:
判断参数是不是有效的,即:输入和原来的值不一样的参数时候,页面(过滤过的,过滤了html标签,当前输入值,原始输入值)是否一样
如果参数有效,就用 and payload 判断是不是存在漏洞(多个判断)
如果参数无效,就用 or payload 判断是不是存在漏洞(多个判断)
我参考以后,发现它会有一些漏扫描,比如 数字型等带有单引号的注入。
然后我决定优化一下,并去掉第三步的验证。因为一般都无有效参数的,无效的参数一般不做检查了,而且or注入可能会导致一些误报等。
2.2 基于时间盲注入
原理很简单,然后数据库去sleep一段时间。payload对应脚本里面找,或者可以参考一下sqlmap的。
然后就是注意各种闭合,比如: ', ", ), )), '), "), ')), ")), ;, 等等
个人的实践告诉我,基于时间的注入检查是最准确的。如果你是甲方的话,基于时间盲注入应该是最适合你的了。因为你可以去监控mysql的慢日志或者异常日志去查询sleep登关键字来结合着一起发现sql注入漏洞,我在实践中是有用这种方法发现过一些比较隐蔽的sql注入的。
3.结合AcuMonitor盲打
测试oracle的注入:
PostgreSQL:
windows +mssql:
同样,也要注意各种闭合。
6.xxe 优化
xxe漏洞检测,改变Content-type头(text/xml,application/xml),可能会测出漏洞。
更多脚本还在分析 .......