SQLI LABS | Less-26a GET-Blind Based-All Your SPACES And COMMENTS Belong To Us-String Single Quotes
可以看到,我们已经成功获取了当前站点使用的后端数据库的信息。至此,SQLI LABS Less-26a GET-Blind Based-All Your SPACES And COMMENTS Belong To Us-String Single Quotes-Parenthesis 成功过关。下面讲一下测试思路,由于目标过滤了我们的空格,所以我们需要一些特殊的手段来绕过。本关是一个盲注,如果后端
关注这个靶场的其它相关笔记:SQLI LABS —— 靶场笔记合集-CSDN博客
0x01:过关流程
输入下面的链接进入靶场(如果你的地址和我不一样,按照你本地的环境来):
http://localhost/sqli-labs/Less-26a/
本关是一个盲注,如果后端数据库中查询出了结果,就会返回;如果后端数据库出现了错误,或者啥也没有查出来,就会显示为空。下面是一个正常的响应样式:
本关的标题已经很清楚了,它会过滤你输入中的空格与注释(还有 and
与 or
这种逻辑判断符号)。
下面讲一下测试思路,由于目标过滤了我们的空格,所以我们需要一些特殊的手段来绕过。这里笔者选择使用 BurpSuite 来进行爆破,下面是测试的基础语句(不管它咋过滤,我们测试还是得基于基础的 Payload 来进行绕过):
基础 Payload: 1') anandd 1=('1
如下,设置爆破的 Payload 为数值型十六进制。ASCII 码的范围是 0 ~127,我们也只要爆破这么多即可,Payload 设置如下:
爆破完成后,按返回包的长度降序排一下就可以发现可用的值啦:
上面其实不能算是发现了空格的替代值,更像是确定我们的基础 Payload 没错:
1') anandd 1=('1
其更大意义是证明了目标后端的 SQL 查询模板如下:
select * from users where id=('$_GET["id"]');
下面是笔者根据上面的模板,测试出来的一个可用的攻击 Payload(测试方法和上面是一样的,使用 BurpSuite 爆破):
-- 猜测目标后端数据库的第一个字符为 s,若回显了信息,则证明猜测正确
1%27)%20anandd%2bif(mid(database(),1,1)=%27s%27,1,0)=(%271
可以看到,我们已经成功获取了当前站点使用的后端数据库的信息。至此,SQLI LABS Less-26a GET-Blind Based-All Your SPACES And COMMENTS Belong To Us-String Single Quotes-Parenthesis 成功过关。
0x02:源码分析
下面是 SQLI LABS Less-26a GET-Blind Based-All Your SPACES And COMMENTS Belong To Us-String Single Quotes-Parenthesis 后端的部分源码,以及笔者做的笔记:
<?php
//including the Mysql connect parameters.
include("../sql-connections/sqli-connect.php");
// take the variables
if (isset($_GET['id'])) {
// 获取用户输入的内容
$id = $_GET['id'];
//logging the connection parameters to a file for analysis.
$fp = fopen('result.txt', 'a');
fwrite($fp, 'ID:' . $id . "\n");
fclose($fp);
//fiddling with comments
// 这里是做一波过滤
$id = blacklist($id);
//echo "<br>";
//echo $id;
//echo "<br>";
$hint = $id;
// connectivity
// 然后直接拼接到 SQL 查询模板上
$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 size='5' color= '#99FF00'>";
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";
}
// 这个是过滤函数
function blacklist($id)
{
$id = preg_replace('/or/i', "", $id); //strip out OR (non case sensitive)
$id = preg_replace('/and/i', "", $id); //Strip out AND (non case sensitive)
$id = preg_replace('/[\/\*]/', "", $id); //strip out /*
$id = preg_replace('/[--]/', "", $id); //Strip out --
$id = preg_replace('/[#]/', "", $id); //Strip out #
$id = preg_replace('/[\s]/', "", $id); //Strip out spaces
$id = preg_replace('/[\s]/', "", $id); //Strip out spaces
$id = preg_replace('/[\/\\\\]/', "", $id); //Strip out slashes
return $id;
}
?>
更多推荐
所有评论(0)