参数污染
这个之前bypass写过,我这次测试的目标同样是可以使用参数污染来进行绕过的,会出现这个问题,是因为360主机卫士在处理post请求时,没有处理post请求中的get参数,所以可以使用这种方式来进行全局绕过。
静态资源白名单
之前我自己也经过测试,在php+apache或aspx+iis的站上,加静态后缀是不会影响程序的正常解析。同时,这个也能绕过安全卫士
改变请求为multipart/form-data
这个方法直接使用是绕不过的,不过可以配合数据填充的方法进行绕过
语义上的绕过
1 | 上面的绕过是全局绕过的方法,下面我们回归到正常语句的绕过 |
现在我们要测试多语句,需要使用waitfor delay来进行判断,我们知道,很多waf在遇到%00是会忽略后面的语句的,但是在ASPX+IIS的环境中,并不会影响正常解析,我们尝试使用这个特性绕过。
DNS外带
我们再测试能否绕过WAF发起DNS请求,首先我还是使用%00代替空格,但是这里是绕不过的
这里的拦截一般就是exec和xp_dirtree的拦截,首先我测试在exec和xp_dirtree之间,能否又什么字符可以绕过,这里可以使用换行加注释进行绕过。
exec和xp_dirtree之间的空格也可以使用空白字符,我测了%11绕不过去,也可以fuzz一下,不过这个站速度挺慢的,这里就简单提供一个思路。针对aspx的站,虽然也可以使用unicode编码,不过使用的比较受限,这里测试了字符e的unicode编码%004e,是绕不过去的。
命令执行
也可以使用–xxx%0a这样的语法进行绕过。
其实也有其他的绕过方式,比如通过exec函数来执行命令
1 | Exec('x'+'p_c'+'mds'+'hell ''whoami''') |
或者通过变量定义的方式
1 | declare @test nvarchar(50) set @test='e'+'x'+'e'+'c x'+'p_'+'c'+'mdshell ''whoami''' exec--%0asp_executesql @test-- |
总结
在进行WAF绕过时,其实我认为最好还是先去测那种通用绕过方案,比如参数污染,静态资源白名单,改变请求类型,因为这样可以全局绕过WAF,又能最少的触发拦截规则,如果要手动去根据规则绕的话,难免某些语句会触发拦截规则,如果在某些红蓝对抗的项目中,不就被发现了。