本文是本人学习过程中做的笔记,不足之处很多,望各位大牛指导一下~
在SQL盲注中,并不会像之前的SQL注入一样显示数据库内建的报错信息,而是显示通用的错误提示,也就是说SQL注入将不能依靠错误信息来判断注入语句的执行结果。但是,我们可以利用其中基于逻辑真假的不同结果来进行判断从而确定是否存在SQL注入漏洞。
判断盲注的常见用法:
1’ and 1=1 #
1’ and 1=2 #
判断这两种不同的输入是否有不一样的显示,如果一个正常一个通用的错误提示或者啥也不显示,则几乎可以确定是含有SQL注入漏洞的。
Low级:
源代码:
<?php
if (isset($_GET['Submit'])) {
// Retrieve data
$id = $_GET['id'];
$getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'";
$result = mysql_query($getid); // Removed 'or die' to suppres mysql errors
$num = @mysql_numrows($result); // The '@' character suppresses errors making the injection 'blind'
$i = 0;
while ($i < $num) {
$first = mysql_result($result,$i,"first_name");
$last = mysql_result($result,$i,"last_name");
echo '<pre>';
echo 'ID: ' . $id . '<br>First name: ' . $first . '<br>Surname: ' . $last;
echo '</pre>';
$i++;
}
}
?>
先常规地进行判断,输入单引号等不返回任何信息,输入上述说的两个语句只有第一个返回信息,第二个没有返回任何信息:
可以推测存在SQL注入漏洞。
竟然如此,我们就直接输入注入语句就成功利用了该漏洞:
然而,还想进一步挖掘更多的信息,需要进行逐层深入查询的操作。先是输入order by来确定有多少个字段,输入为2时还有返回结果但到3时并没有任何返回,因而可确定含有两个字段: