针对于过滤,我们要善用编码,来绕过关键字过滤。
https://my.oschina.net/moziBlog/blog/3209519
1)掌握绕过UNION&SELECT过滤的技巧。

服务器:windows2003,IP地址:10.1.1.10。
客户端:winXP,IP地址随机分配。
打开桌面上的火狐浏览器,选择『绕过UNION&SELECT过滤』下面的『GET-基于错误-过滤UNION&SELECT-字符型-单引号』。关键代码为:


解析:与上一门课程相比,黑名单是越来越长了。我们随便试一下,提交:
id=12211' union select * from users where id='2'||'
然后看一下过滤后还剩下什么了。


过滤后惨不忍睹啊。我们再看看上面的代码,正则修饰符不是『i』而是『s』,则意味着匹配的对象是大小写敏感的,那么就简单多了呢。
但是空格和星号还是被吃掉了,继续想办法。在MySQL中tab,空格,回车都可以隔断语句,那么我们就可以用使用/**/或()或+代替空格,%0c=换页、%09=水平制表符、%0d=回车、%0a=换行。那我们试试:
id=12211%27+uniOn%09selEct%0d1,2,password%0dfrom%0dusers%0dwhere%0did=%272%27||%27

成功了呢。很多不可见的空白字符都可以用哦,你可以试试。
打开桌面上的火狐浏览器,选择『绕过UNION&SELECT过滤』下面的『GET-基于错误-过滤UNION&SELECT-双引号』。关键代码为:


解析:这里我们发现和上面类似,只不过id变为双引号了而已。思路做法一样,不再赘述。
打开桌面上的火狐浏览器,选择『绕过UNION&SELECT过滤』下面的『GET-基于错误-过滤UNION&SELECT-字符型-单引号和圆括号』。关键代码为:


解析:此处是过滤掉『union任何空白符select』,孰不知还有个东西叫『union all select』,但是后面的『')』比较讨厌。你会怎么做?