君衍.
SQL-Labs靶场通关教程:
SQL注入第一课
SQL无列名注入
SQL报错注入原理
简单的SQL练习,联合注入、报错注入
POST提交方式注入
HTTP头部注入
二次注入
一些绕过案例
HTTP参数污染攻击
一、四十六关 ORDER BY数字型注入
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 报错、布尔盲注、延时盲注 | ORDER BY $id |
我们直接可以从界面中得知传参的参数为SORT,下面我们令参数即sort为1继续尝试输入:
?sort=1
我们可以看到是一个排序表格,同时我们继续尝试将sort参数变为2继续尝试:
可以看到按照字母顺序进行了排序,所以它便是一个使用了order by语句进行排序的查询的一种查询输出方式。
我们这里继续尝试,将参数变为1'
,我们可以看到它进行了报错:
可以看到它直接将报错信息输出了出来,所以我们之后可以进行尝试报错注入。
同时我们之前说了使用了order by,所以这里使用union注入当然是不行的,我们不必进行考虑。我们之后可以跟经常使用order by的正反排序,即为desc以及asc,当然,不加这个默认为从小到大,即为asc。
所以如果这里进行注入点判断时,我们使用order by为一个数值是没有意义的,这里我们需要使用rand函数,下面我们会谈到。
1、源码分析
<?php
include("../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";
$result = mysqli_query($con1, $sql);
if ($result)
{
?>
···
<?php
while ($row = mysqli_fetch_assoc($result))
{
echo "<td>".$row['id']."</td>";
echo "<td>".$row['username']."</td>";
echo "<td>".$row['password']."</td>";
}
echo "</table>";
}
else
{
print_r(mysqli_error($con1));
}
}
else
{
echo "Please input parameter as SORT with numeric value<br><br><br>