实战注入过某厂商WAF - 第一谈

作者:oysy

原文地址:https://secvul.com/topics/1299.html


前言:渗透测试当中遇到一个注入,有WAF,记录一下思路。
不要嫌麻烦,如果静不下心来思考,那还不如不做技术。按照以前说的注入绕过的思路,首先还是要先看看会拦截什么语句或者关键字,这点对于后续的绕过思路很有帮助,比如substr()函数被限制了,那有没有其他函数可以替代呢?诸如此类的问题多想想,既可以完成工作,又能够学到新的知识点,做好积累。

拦截语句

首先尝试了各种常用的payload,看看WAF拦了哪些操作,发现如下语句会拦截:

and 1=1类型
order by num类型
union select x类型
sleep(5)类型
/*!*/
…

放行语句

在上面尝试中发现如下语句未被拦截:

order by
/**/
/*/**/and if(1,1,0)
%0a、%0b…
…

根据上面的测试结果可以看出,WAF对于order by num和union select x类型限制的比较严格,从联合查询入手去绕不太合适,比较花时间,然而and if(1,1,0)这种形式未做拦截,所以我们可以通过盲注的形式获取数据。

测试思路

第一坑
当payload写到and if(substr(),1,0)时还没有问题,但写到and if(substr(user()),1,0)时被拦截,起初以为是user()是拦截的原因(也确实是一个原因),但后续测试发现只要substr(x)这种形式,都会被拦截。尝试使用注释和编码未果,考虑使用替代函数,这里收集了几个mysql的截取字符串的函数:

substr()
substring()
mid()
left()
right()
substring_index()

后来发现right()未被拦截(这就很有意思了,因为left被拦截了),所以我们找到了替代substr()的函数,第一坑填好了
第二坑
user()等函数被拦截,这没法找替代函数了,怎么办呢?
那就只能在user()上做文章了,各种尝试后发现user%0a/*%0a*/()可以绕过WAF
后续出数据的思路就没有多少坑了,故不再详述。

点赞

发表评论