SQLi-Labs:Less32-Less37
Less 32
这一关代码中添加了php字符转义函数 addslashes(),addslashes()会在单引号前加一个\,如下:
想以此阻止sql注入语句闭合,我们可以利用宽字节绕过引号转义
法一:想办法把\弄没有
前提:MySQL是GBK编码,认为两个字符是一个汉字(前一个的ASCII码值需要大于128,因为最高位为1(一个字符8位),2的八次方是128)
输入%df%27时,%27是',会被转义为\',而\的编码为%5c,最后就变成了%df%5c%27,由于%df(这里16进制)>128(ASCII码值),MySQL会认为前两个编码是一个汉字,即'運',浏览器查看方式改为GBK编码方式,所以注入就变成了運',成功吃掉了\
爆库
?id=-1%df%27 union select 1,2,database()--+
爆表名字段名内容啥的自行替换,不再演示啦,但要注意爆表名可以用where table_schema=database()来避免单引号的使用,但是爆字段名的时候就得用十六进制编码即table_name =0x7573657273来避免单引号啦~~~,接下来我们进入法二
法二:转义反斜杠(即\变成\\,失去反斜杠的意义)
想办法给\前加一个或单数个\,使其变成\\',利用汉字'錦'
錦的UTF-8编码为%E9%8C%A6
錦的GBK编码为%e5%5c
以上两个都可以输入,效果如下图
下图在GBK编码下查看
下图在UTF-8编码下查看
Less 33
同32关payload全部一致~~~
Less 34
这一关是POST方法
依旧构造宽字节注入
演示一下爆表~
uname=adm%df%27 union select 1,(select group_concat(column_name)from information_schema.columns where table_name=0x7573657273)#&passwd=admin&submit=Submit
Less 35
不用闭合,直接联合查询注入就可以了
Less 36
依旧是宽字节注入~
爆库示例
?id=-1%df%27 union select 1,database(),3--+
记得爆列名的时候表名要十六进制表示~~~
Less 37
mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。
依旧和前面post宽字节注入方式一致
爆库示例:
uname=adm%df%27 union select 1,database()#&passwd=admin&submit=Submit
这一篇也到这里啦~~~