我将如何对此进行sql注入?我不是在问如何防止这种情况

时间:2018-10-06 10:04:15

标签: php sqlite sql-injection

这只是一个快速的问题,因为我对此领域完全没有经验。我将如何对此进行sql注入? 我想要sql注入的示例。 请不要发表评论,仅输入'或'1'='1,否则将无法正常工作。它会回答的只是elseif语句中的一句话,即“您是如此亲密”。

<?php
  include "config.php";
  ini_set('error_reporting', E_ALL);
  ini_set('display_errors', 'On');

  $answer = $_POST["answer"];
  $debug = $_POST["debug"];
  $query = "SELECT * FROM answers WHERE answer='$answer'";
  echo "<pre>";
  echo "SQL query: ", htmlspecialchars($query), "\n";
  echo "</pre>";
?>
<?php
  $con = new SQLite3($database_file);
  $result = $con->query($query);

  $row = $result->fetchArray();
  if($answer == $CANARY)  {
    echo "<h1>Perfect!</h1>";
    echo "<p>Your flag is: $FLAG</p>";
  }
  elseif ($row) {
    echo "<h1>You are so close.</h1>";
  } else {
    echo "<h1>Wrong.</h1>";
  }
?>

如何对该查询进行注入? 请不要将此标记为与我已经阅读过的主要文章重复。该帖子与我尝试过的查询不同。

1 个答案:

答案 0 :(得分:1)

只需在$ _POST [“ answer”]中发送以下字符串:

$_POST["answer"] = "' OR '1' = '1";
$answer = $_POST["answer"];
$query = "SELECT * FROM answers WHERE answer='$answer'";

现在,您的查询将如下所示:

SELECT * FROM answers WHERE answer='' OR '1' = '1'

它将为您提供answers表中的所有行。如果使用此SQL查询结果来检查用户给出的答案是否正确;您将总是得到一些行,因此无论如何回答都将始终通过。

类似地,例如,可以获取所有客户的详细信息,他们的电话号码,电子邮件地址等;如果有人通过customer_id = "' OR '1' = '1"

请完整阅读此主题:How does the SQL injection from the "Bobby Tables" XKCD comic work?