我从一本关于SQL注入的书中得到了以下易受攻击的代码。但是当我尝试利用它并将0 0
添加到输入时,它会给我一个这样的错误:
您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第1行的'''附近使用正确的语法
为什么我会收到此错误?
'
答案 0 :(得分:2)
我不知道您的引用字符是什么,但让我们看看这行代码:
// build dynamic SQL statement
$SQL = “SELECT ∗ FROM table WHERE field = ‘$_GET[“input”]’;”;
// execute sql statement
$result = mysql_query($SQL);
// check to see how many rows were returned from the database
$rowcount = mysql_num_rows($result);
// iterate through the record set returned
$row = 1;
while ($db_field = mysql_fetch_assoc($result))
{
if ($row <= $rowcount)
{
print $db_field[$row]. “<BR>”;
$row++;
}
}
因此,假设您想要利用它并获取所有行。如果设置$SQL = "SELECT ∗ FROM table WHERE field = '$_GET[input]';";
,则会得到以下SQL:
$_GET[input] = "' OR 1=1"
这是无效的SQL。为什么?因为最后你有一个SQL解释器不理解的迷路SELECT ∗ FROM table WHERE field = '' OR 1=1';"
。在一个条件之后,没有假设是报价的开头,所有报价应该被关闭!这就是你得到错误的原因。
因此,要成功注入,您需要确保生成有效的SQL。在这种情况下,您可以尝试使用生成此内容的有效负载'
:
' OR '' = '
或者只需使用SELECT ∗ FROM table WHERE field = '' OR '' = '';"
中的评论来中和查询的其余部分:
' OR 1=1 --