less32

这关我们直接查看源码

我们可以看到引入可gbk编码

gbk编码

编码包括了双字节字符集和单字节字符集
单字符编码:如ascii码,单字节字符集表示其内部的所以字符都是由单字节表示的
双字节字符集:也称为宽字符,双字节字符集表示其内部字符是由两个字节来表示的,其导致的漏洞大多是因为服务器错误的将两个单字节错误的编码为宽字符
宽字符:用多个字节来表示的字符集
宽字节::GB2312、GBK、GB18030、BIG5、ShiftJIS都是宽字节,其是由两个单字节来表示。其漏洞基本是由于输入多个单字节导致单字节被当成宽字节导致的,gbk码只有当前一个字节的ascii码值大于128才到汉字的范围

函数preg_replace($str,$str1,$str2)表示交换需要过滤的字符,即判断str2里有没有str由则将str转换成str1
preg_quote($str)会将字符串中的所有特殊字符前添加一个\使其实体化。
这样就导致了我们输入’会被添加上\导致转意。这时候我们就可以利用宽字节绕过
由于\的url编码为%5c,这时候我们可以在%5c前加一个%df这时候就会组成为%df%5c而这两个字节就表示一个汉字,这时候这个汉字就把\给吃了这时候我们的’就不会被转意。就可以成功绕过

1
?id=1%df' union select 1,2,group_concat(column_name) from information_schema.columns where table_name=0x7573657273

注意:因为在后面的查询语句中将\’的\给转换成汉字会导致语句报错所以我们,要将最后where table_name=的表名转换成16进制这样可以不用使用’

less33

这关与上一个几乎相同,只是过滤的函数为addslashes()这一个函数是将字符串中的使用特殊字符转意。其绕过方法与32相同都是利用gbk的宽字节绕过

less34

这关我们直接抓包,因为在使用使用hackbar的时候出现了一个问题如图

我们可以看到显示了URL malformed(url畸形)显示这个的原因是%被urlencode成了%25这也就导致这个报错。
我们直接抓包查看果然我们看到了在%df变成了%25df多了个25这个是%被url编码导致的,把25删了之后就是正常的解题步骤了

less 35

这一关我们在注入?id=%df’的时候发现’被转意没有现象与前几关都不同,我们查看源码发现,他是数字型注入。。。。这告诉我们不要字符型的做傻了吧去考虑数字型注入,既然是数字型那么就不需要闭合了直接union注入

less 36

该题目与32关几乎没有区别只是,其过滤的语句为mysql_real_escape_string()这个函数是sql的语句是将字符串中的特殊字符转义

less 37

和37一模一样只是过滤方法改成了mysql_real_escape_string()