关注这个靶场的其它相关笔记:SQLI LABS —— 靶场笔记合集-CSDN博客
0x01:过关流程
输入下面的链接进入靶场(如果你的地址和我不一样,按照你本地的环境来):
http://localhost/sqli-labs/Less-27/
本关考察的是 SQL 注入的绕过姿势,至于发现注入点,相信强大如你已经很容易测出来了,所以这里笔者就不多废话了。
输入下面的测试 Payload,它会显示报错信息:
?id=1'
根据其泄露的源码信息,我们可以推测目标后端的 SQL 模板如下:
select * from users where id='$_GET["id"]' LIMIT 0,1;
根据上面的模板,我们可以写一个基础的报错注入的 Payload 如下:
1' and updatexml(1,concat(0x7e,database(),0x7e),1) and '1
可以看到,目标主要是过滤了我们的空格,此时我们可以运用 BurpSuite 来尝试爆破出一个可以替代空格的字符:
如下,设置爆破的 Payload 为数值型十六进制。ASCII 码的范围是 0 ~127,我们也只要爆破这么多即可,Payload 设置如下:
爆破完成后,按返回包的长度降序排一下就可以发现可用的值啦:
以下是笔者测试出来的一个可用的 Payload(记替代是不可能记的,记思路即可):
1%27%20and%0cupdatexml(1,concat(0x7e,database(),0x7e),1)%20and%20%271
可以看到,我们已经成功获取了当前站点使用的后端数据库的信息。至此,SQLI LABS Less-27 GET-Error Based-All Your UNION & SELECT Belong To Us-String-Single Quotes 成功过关。
0x02:源码分析
下面是 SQLI LABS Less-27 GET-Error Based-All Your UNION & SELECT Belong To Us-String-Single Quotes 后端的部分源码,以及笔者做的笔记:
<?php
//including the Mysql connect parameters.
include("../sql-connections/sqli-connect.php");
// take the variables
if(isset($_GET['id']))
{
// 获取 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="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('/[\/\*]/',"", $id); //strip out /*
$id= preg_replace('/[--]/',"", $id); //Strip out --.
$id= preg_replace('/[#]/',"", $id); //Strip out #.
$id= preg_replace('/[ +]/',"", $id); //Strip out spaces.
$id= preg_replace('/select/m',"", $id); //Strip out spaces.
$id= preg_replace('/[ +]/',"", $id); //Strip out spaces.
$id= preg_replace('/union/s',"", $id); //Strip out union
$id= preg_replace('/select/s',"", $id); //Strip out select
$id= preg_replace('/UNION/s',"", $id); //Strip out UNION
$id= preg_replace('/SELECT/s',"", $id); //Strip out SELECT
$id= preg_replace('/Union/s',"", $id); //Strip out Union
$id= preg_replace('/Select/s',"", $id); //Strip out select
return $id;
}
?>
标签:27,Based,preg,Belong,replace,Strip,echo,id,out
From: https://blog.csdn.net/m0_73360524/article/details/143464377