网站安全狗SQL注入拦截bypass--利用N个截断字符

针对asp+access,首先来挖掘一下数据库的特性。

1、可以代替空格的字符有:%09、%0A、%0C、%0D,如图:


2、可以截断后面语句的注释符有:%00、%16、%22、%27


%22(")、%27(')这两个字符是在特殊条件下才能起到注释的效果。



但实测%00和%16不受条件限制。


开启安全狗的防护功能再测试执行SQL语句:

可以看到执行的语句被拦截。

实际测试得知安全狗拦截select + from,但不会拦截select + xfrom或select + fromx(当然x为一些特殊字符的时候依然会被拦截)。


安全狗匹配的是正常的sql语句,错误的语句并不会触发规则。但是语句是错误的,如何去得到理想的结果呢?

即然安全狗拦截的是select + from,那么正则匹配的长度是不是无限大呢?有没有可能构造出一段非常长的语句刚好达到匹配的极限,使from和后面的语句不能被匹配呢?带着这个疑问 做如下测试:(已知道sql语句中一个分割符和多个分割符的执行效果是一样的)

code 区域
        sql=select(一次次递增的%09、%0A、%0C或%0D)* from manager
      

果然,当%09、%0A、%0C或%0D超过一定长度后,安全狗的防御便失效了!


实际测试,from前字符串长度为49151(3*2^14-1)。而当使用空格时,from前仅仅527个字符,便让防御失效了(171个空格)


测试语句:

code 区域
        sql=select%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2a%20from%20manager
      

170个空格:


171个空格:


突破拦截后,后面再跟上一些带有关键字的语句: