sqllib 32-37

前言

宽字节注入

Less-32,33,34,35,36,37 六关全部是针对’和\的过滤,所以我们放在一起来进行讨论。

对宽字节注入的同学应该对这几关的 bypass 方式应该比较了解。我们在此介绍一下宽字节

注入的原理和基本用法。

原理:mysql 在使用 GBK 编码的时候,会认为两个字符为一个汉字,例如%aa%5c 就是一个

汉字(前一个 ascii 码大于 128 才能到汉字的范围)。我们在过滤 ’ 的时候,往往利用的思

路是将 ‘ 转换为 \’ (转换的函数或者思路会在每一关遇到的时候介绍)。

因此我们在此想办法将 ‘ 前面添加的 \ 除掉,一般有两种思路:

1、%df 吃掉 \

具体的原因是 urlencode(‘) = %5c%27,我们在%5c%27 前面添加%df,形

成%df%5c%27,而上面提到的 mysql 在 GBK 编码方式的时候会将两个字节当做一个汉字,此

事%df%5c 就是一个汉字,%27 则作为一个单独的符号在外面,同时也就达到了我们的目的。

2、将 \’ 中的 \ 过滤掉,例如可以构造 %**%5c%5c%27 的情况,后面的%5c 会被前面的%5c

给注释掉。这也是 bypass 的一种方法。

——摘自《mysql注入天书》

less32

image-20210127140209158

image-20210127140144979

通过%df把\吃掉,可以来看一下源码

image-20210127140412993

这里对 / ' " 进行了转义,其余同less1,可进行联合注入

image-20210127141119091

less33

image-20210127143022024

我直接换到了less33,发现上一关的payload在这里也能用

难道这两关完全一模一样,看看源代码

image-20210127144718975

这边使用了addslashes()函数

addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。

预定义字符是:

单引号(’)

双引号(”)

反斜杠(\)

提示:该函数可用于为存储在数据库中的字符串以及数据库查询语句准备字符串。

那看来和less32本质上是一样的

那报错试一下好了

image-20210127154417974

less34

image-20210127172057988

登录成功时的界面

image-20210127172127407

果然,被转义了

image-20210127172214883

用用之前的方法是不行的

用utf-16也不行都会被转义掉

image-20210127182529013

抓包可以实现

image-20210127182612522

万能密码也可用了,payload和前面相同

less35

image-20210127183650679

数字型注入,和less33相似

less36

1
2
3
4
5
6
7
8
9
function check_quotes($string)

{

$string= mysql_real_escape_string($string);

return $string;

}

标题也写了

下列字符受影响:

 \x00  \n  \r  \  ‘  “  \x1a

image-20210127195942164

但是同样的方法还是可以用的

less37

和less34的情况下,我这边只有在抓包的情况下才能实现注入,这边的过滤函数同less36

image-20210127210402092