针对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语句中一个分割符和多个分割符的执行效果是一样的)
果然,当%09、%0A、%0C或%0D超过一定长度后,安全狗的防御便失效了!
实际测试,from前字符串长度为49151(3*2^14-1)。而当使用空格时,from前仅仅527个字符,便让防御失效了(171个空格)