SQLI LABS | Less-47 GET-Error Based-String-ORDER BY CLAUSE
关注这个靶场的其它相关笔记:SQLI LABS —— 靶场笔记合集-CSDN博客
0x01:过关流程
输入下面的链接进入靶场(如果你的地址和我不一样,按照你本地的环境来):
http://localhost/sqli-labs/Less-47/
先说好本关考的不是堆叠哈,后端代码不支持一次性执行多条 SQL 语句。
靶场提示,让我们输入数字型的 SORT
:
SORT 即排序,对应的应该是 SQL 语句中的 ORDER BY
。我们的目标很简单,尝试获取后端数据库信息,传入 Payload ?sort=1'
,目标能返回报错信息:
根据错误提示泄露的信息,我们可以推测其后端的模板如下:
select * from users order by '$_GET["sort"]';
所以,攻击 Payload 如下:
-- 尝试获取目标后端数据库信息1' and updatexml(1,concat(0x7e,database(),0x7e),1) and '1
如上,我们已经能够获取目标后端数据库信息了。至此,SQLI LABS Less-47 GET-Error Based-String-ORDER BY CLAUSE 成功过关。
0x02:源码分析
下面是 SQLI LABS SQLI LABS Less-47 GET-Error Based-String-ORDER BY CLAUSE 后端的部分源码,以及笔者做的笔记:
<?phpinclude("../sql-connections/sqli-connect.php");$id = $_GET['sort'];if (isset($id)) {//logging the connection parameters to a file for analysis.$fp = fopen('result.txt', 'a');fwrite($fp, 'SORT:' . $id . "\n");fclose($fp);// 与上一关的差别就在这里,其余的不变$sql = "SELECT * FROM users ORDER BY '$id'";// mysqli_query 不支持一次性执行多条语句$result = mysqli_query($con1, $sql);if ($result) {?><center><font color="#00FF00" size="4"><table border=1'><tr><th> ID </th><th> USERNAME </th><th> PASSWORD </th></tr></font></font><?phpwhile ($row = mysqli_fetch_assoc($result)) {echo '<font color= "#00FF11" size="3">';echo "<tr>";echo "<td>" . $row['id'] . "</td>";echo "<td>" . $row['username'] . "</td>";echo "<td>" . $row['password'] . "</td>";echo "</tr>";echo "</font>";}echo "</table>";} else {echo '<font color= "#FFFF00">';print_r(mysqli_error($con1));echo "</font>";}} else {echo "Please input parameter as SORT with numeric value<br><br><br><br>";echo "<br><br><br>";echo '<img src="../images/Less-47.jpg" /><br>';echo "Lesson Concept and code by <b>D4rk</b>";}?>