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...........或者空信息,减小了依据返回信息分析进行注入的风险

 

posted on 2019-05-12 18:49  一盏清茶淡如水  阅读(267)  评论(0)    收藏  举报