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

 

 

 这一篇也到这里啦~~~

posted @ 2020-03-02 15:16  ApricityJ  阅读(112)  评论(0)    收藏  举报