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


前言:渗透测试当中遇到一个注入,有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



后续出数据的思路就没有多少坑了,故不再详述。

文章目录
  1. 1. 拦截语句
  2. 2. 放行语句
  3. 3. 测试思路
|