sqli-lab less 第2-5关
第二关
数字型注入:
输入1 and 1=1和1 and 1=2返回结果不同


故存在注入点,使用sqlmap跑,结果为

显示了数据库版本等信息。
从源代码分析
// connectivity
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
从源代码看没有对输入做任何处理,只是在id处未使用''
第三关
输入1' and '1'='1,显示:

输入1' and '1'='2,显示:

说明存在注入点:
用sqlmap跑:

从源代码看:
$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
添加了(),如果进行手工注入时,需要添加)将结构补充完善,其他地方没有太大的区别
第四关
输入1" and "1"="1,显示:

输入1" and "1"="2,显示:

存在注入点,使用sqlmap跑

从源代码看:
$id = '"' . $id . '"';
$sql="SELECT * FROM users WHERE id=($id) LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
与之前差不多,就是添加了"作为“外包结构”,在手工注入时需要补全结构
第五关
输入1' and '1'='1时,显示:

输入1' and '1'='2时,显示:

存在注入点。可以使用sqlmap跑。

从返回信息看属于布尔型盲注,返回信息只有“是”与“否”两种
查看源代码:
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
if($row)
{
echo '<font size="5" color="#FFFF00">';
echo 'You are in...........';
echo "<br>";
echo "</font>";
}
else
{
echo '<font size="3" color="#FFFF00">';
print_r(mysql_error());
echo "</br></font>";
echo '<font color= "#0000ff" font size= 3>';
}
}
else { echo "Please input the ID as parameter with numeric value";}
源代码使用了'作为外包结构,并且对返回信息进行了处理,判断变量$row值,只返回You are in...........或者空信息,减小了依据返回信息分析进行注入的风险
浙公网安备 33010602011771号