SQLI LABS | Less-32 GET-Bypass Custom Filter Adding Slashes To Dangerous Chars
关注这个靶场的其它相关笔记:SQLI LABS —— 靶场笔记合集-CSDN博客
0x01:过关流程
输入下面的链接进入靶场(如果你的地址和我不一样,按照你本地的环境来):
http://localhost/sqli-labs/Less-32/
本关考察的是宽字节注入,可以发现,当我们输入的内容中包含 '
或者 "
时,它实际接收的内容会在 '
与 "
前加一个 \
,表示对其进行转义,让我们无法逃逸出 '、"
的包裹 :
绕过方式很简单,在 '
前传递一个 ASCII 字符大于 128 的值即可,比如 %df
:
依据上面的原理,我们可以使用如下 Payload 进行报错注入:
-- 获取目标后端当前正在使用的数据库的信息1%df' and updatexml(1,concat(0x7e,database(),0x7e),1)--+
可以看到,我们已经成功获取了当前站点使用的后端数据库的信息。至此,SQLI LABS Less-32 GET-Bypass Custom Filter Adding Slashes To Dangerous Chars 成功过关。
0x02:源码分析
下面是 SQLI LABS Less-32 GET-Bypass Custom Filter Adding Slashes To Dangerous Chars 后端的部分源码,以及笔者做的笔记:
<?php//including the Mysql connect parameters.include("../sql-connections/sqli-connect.php");function check_addslashes($string){// 对 $string 中的 ' " 前添加 \,进行转义$string = preg_replace('/' . preg_quote('\\') . '/', "\\\\\\", $string); //escape any backslash$string = preg_replace('/\'/i', '\\\'', $string); //escape single quote with a backslash$string = preg_replace('/\"/', "\\\"", $string); //escape double quote with a backslashreturn $string;}// 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 数据库连接的字符集为 GBK,它人真好,特意写个漏洞mysqli_query($con1, "SET NAMES gbk");$sql = "SELECT * FROM users WHERE id='$id' LIMIT 0,1";$result = mysqli_query($con1, $sql);$row = mysqli_fetch_array($result, MYSQLI_BOTH);if ($row) {echo '<font color= "#00FF00">';echo 'Your Login name:' . $row['username'];echo "<br>";echo 'Your Password:' . $row['password'];echo "</font>";} else {// 当未查询出结果时,显示错误信息echo '<font color= "#FFFF00">';print_r(mysqli_error($con1));echo "</font>";}} else {echo "Please input the ID as parameter with numeric value";}?>