MSSQL注入绕过360主机卫士

参数污染

这个之前bypass写过,我这次测试的目标同样是可以使用参数污染来进行绕过的,会出现这个问题,是因为360主机卫士在处理post请求时,没有处理post请求中的get参数,所以可以使用这种方式来进行全局绕过。

image-20200726165735149

静态资源白名单

之前我自己也经过测试,在php+apache或aspx+iis的站上,加静态后缀是不会影响程序的正常解析。同时,这个也能绕过安全卫士

image-20200726170717888

改变请求为multipart/form-data

这个方法直接使用是绕不过的,不过可以配合数据填充的方法进行绕过

image-20200726171115095

语义上的绕过

1
上面的绕过是全局绕过的方法,下面我们回归到正常语句的绕过

现在我们要测试多语句,需要使用waitfor delay来进行判断,我们知道,很多waf在遇到%00是会忽略后面的语句的,但是在ASPX+IIS的环境中,并不会影响正常解析,我们尝试使用这个特性绕过。

image-20200726180930445

DNS外带

我们再测试能否绕过WAF发起DNS请求,首先我还是使用%00代替空格,但是这里是绕不过的

image-20200726194613652

这里的拦截一般就是exec和xp_dirtree的拦截,首先我测试在exec和xp_dirtree之间,能否又什么字符可以绕过,这里可以使用换行加注释进行绕过。

image-20200726200253396

exec和xp_dirtree之间的空格也可以使用空白字符,我测了%11绕不过去,也可以fuzz一下,不过这个站速度挺慢的,这里就简单提供一个思路。针对aspx的站,虽然也可以使用unicode编码,不过使用的比较受限,这里测试了字符e的unicode编码%004e,是绕不过去的。

命令执行

也可以使用–xxx%0a这样的语法进行绕过。

image-20200726212927798

其实也有其他的绕过方式,比如通过exec函数来执行命令

1
Exec('x'+'p_c'+'mds'+'hell ''whoami''')

image-20200726213916436

或者通过变量定义的方式

1
declare @test nvarchar(50) set @test='e'+'x'+'e'+'c x'+'p_'+'c'+'mdshell ''whoami''' exec--%0asp_executesql @test--

image-20200726214833741

总结

在进行WAF绕过时,其实我认为最好还是先去测那种通用绕过方案,比如参数污染,静态资源白名单,改变请求类型,因为这样可以全局绕过WAF,又能最少的触发拦截规则,如果要手动去根据规则绕的话,难免某些语句会触发拦截规则,如果在某些红蓝对抗的项目中,不就被发现了。