- 0×01 开发原因
话说使用wvs、appscan很多年,但发现wvs等大型扫描器扫描大型网络或伪静态太多的时候发现扫描非常慢,严重的还会卡死。
这2天研究了一下发现可以开发软件进行各种优化。于是我动手写了个软件。
- 0×02 功能包括
冗余链接、冗余参数、多余参数(自己认为无用的参数也不会出现问题的参数)、绕关键字型waf、禁止扫描器发送某些包、扫描web宕机原因溯源等功能都是可以通过二次优化开发进行实现的。
其实原理很简单使用http proxy、socket5等代理进行拦截改包(类似burp或者中间人攻击)
- 0×03 功能简介
冗余链接:防止大量重复url或url重写导致的大量伪静态页面。
冗余参数:例如news.php?id=1 id=2 …id=10000 这样会造成大量浪费无用带宽以及系统资源。
多余参数:无用参数例如form、timestamp、random 等增加扫描器检测时长。
绕关键字型waf:waf检测原理基本都是检测扫描器关键字进行的。
禁止扫描器发送某些包:例如包含一些不想触碰的文件。
扫描web宕机原因溯源:找出宕机原因进行修复。
- 0×04 实现代码片段
绕过检测wvs关键字方法,通过删除wvs等扫描器头中包含关键字可绕过大多数waf(如果开启行为检测这个方法就不可以了,但国内防火墙很少有开启这个功能的)
Request.headers.Remove("Acunetix-Aspect")
Request.headers.Remove("Acunetix-Aspect-Password")
Request.headers.Remove("Acunetix-Aspect-Queries")
冗余链接方法,通过获取wvs request的url在通过一些算法对url中的冗余url进行权值计算。
Public linksfil As New HashSet(Of String)
If linksfil.Contains(returnurl.GetHashCode) = False Then
linksfil.Add(returnurl.GetHashCode)
Return True
Else
Return False
End If
多余参数方法,和上面方法类似也是获取wvs request url后分析url参数是否存在在list中对应项,如果存在则删除。
Public ExPre As New ConcurrentQueue(Of String)("from=,a=,b=,c=".Split(","))
If ExPre.Contains(temp(i).ToLower.Substring(0, temp(i).IndexOf("=") + 1)) = False Then
Select Case z
Case 0
spdomain1 = url.Split("?")(0) & "?" & temp(i)
Case Else
spdomain1 &= "&" & temp(i)
End Select
z += 1
End If
结束、跳过此次发包,通过对httprequest(你自己定义的http proxy|socket6函数)进行判断如果调用Ignore方法则直接结束这个发包Thread就可以了
If Request.Contains("this is test") = true Then
Request.Ignore()
end if
宕机原意溯源这个就很简单了,直接保存每次request的raw http header,宕机的同时扫描也会time out 直接分析保存的raw http header 就可以找到关键部分
SaveRequest(AppDomain.CurrentDomain.BaseDirectory & "\test.txt")
- 0×05 成品展示
测试站点:http://testphp.vulnweb.com/AJAX/index.php
优化前扫描url
优化后扫描url
上面是我想到的一些可以通过二次优化、开发实现的功能也许你有更好的功能或者思路可以在下面发评论。:)
MythHack@Gale Albatross Sec Team
评论区: