日前,笔者求教服务器流量异常处理,看了日志之后发现一坨扫描器留下的痕迹。发现了WVS的扫描记录,小小的日志文件都被撑成几G大了(服务器框架定义404页面,导致不存在的页面请求特别多)...
WVS确实是好东西,用来爬爬目录啥的最开心了,但是用来扫别人是挺开心的,自己被扫就不一样了...
所以就分析了一下其发包原理,想想怎么让它无法工作...
环境:
网上随便找了一个PHP的cms下载安装,开了WVS的本地代理,burpsutie抓包分析...
分析过程:
通过分析包的格式,前期的探测脚本http头带着的关键参数如下:
GET /acunetix-wvs-test-for-some-inexistent-file HTTP/1.1 Accept: acunetix/wvs Expect: Cookie: acunetixCookie=AAAAAAAA...N个A...AAAAAAAA GET /ClientAccessPolicy.xml HTTP/1.1 类似这样的查找robots.txt 各种 xml常见文件 GET /favicon.ico HTTP/1.1特别有意思的就是这个favicon.ico文件,在日志文件中发现这个文件被访问了N+1多次... POST https://localhost:8443/enterprise/control/agent.php HTTP/1.1 ACUNETIX /9149447 HTTP/1.1 HTTP_AUTH_LOGIN: ' HTTP_AUTH_PASSWD: acunetix Client-IP: SomeCustomInjectedHeader:injected_by_wvs Referer: ';print(md5(acunetix_wvs_security_test));$a=' Accept: acunetix/wvs Acunetix-Aspect: enabled Acunetix-Aspect-Password: 082119f75623eb7abd7bf357698ff66c Acunetix-Aspect-Queries: filelist;aspectalerts
突然看到WVS也会检测FCK,不过就是目录检测不全...
GET /fckeditor HTTP/1.1
前期扫描一些比较奇葩的漏洞都会带以下参数
Accept: acunetix/wvs
后期的XSS和SQL扫描大概看了下特征的字符就是以下字符
Acunetix-Aspect:
Acunetix-Aspect-Password:
Acunetix-Aspect-Queries:
这三个字段
那就把来路带有关键字的都过滤掉...让你扫去!(这时候就是宁可错杀三千,不能放过一个!)
思路:
检测HTTP头中的
参数:值
任意包含acunetix中就禁止访问,顺便再返回一个500服务器错误。
禁止的方法想了好几种,网上有关这个的就看到当初oldjun和heige的两个思路。不过貌似都不太适合,有兴趣的同学可以自己看看。
因为分析发现扫描过程中一些SQL注入脚本或者其他脚本是不包含以上提到的关键字。
因此想到利用session或者cookie来判断是否恶意请求,判断成立就500,是不是简单粗暴!
看看代码(相当简陋)
if(isset($_COOKIE["PHPinfoTest"])) { header('HTTP/1.1 500 Internal Server Error'); exit(); }else{ foreach ($_SERVER as $key => $value) { If(strpos(strtolower($key),"acunetix")!==false||strpos(strtolower($value),"acunetix")!==false){ header('HTTP/1.1 500 Internal Server Error'); setcookie("PHPinfoTest","IZIEMILOULOAIXNAUHIXLOAIX",time()+60); exit(); } } }
放在全局变量的文件里
看看效果:
使用脚本以后:
这里也只是粗浅的提供一种方法,如有说的不对的,请指正。
原文地址:http://zone.wooyun.org/content/7942