【问题标题】:How to obtain the value of a PHP variable through a SQL Query?如何通过 SQL Query 获取 PHP 变量的值?
【发布时间】:2019-03-13 17:50:33
【问题描述】:

我目前正在处理一个挑战问题,该问题要求您提交 SQL 查询以获得答案。然而,这不是一个简单的 SQL 注入,因为 PHP 源代码有一个小保护措施,只有在给出特定输入时才会输出答案。下面是代码:

<?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>";
 ?>

这只是输出我输入的SQL查询。下面是安全措施:

 <?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>";
    }
  ?>

我的理论是,可以通过 SQL Query 显示 $CANARY 的值,其中一行显示echo "SQL query: ", htmlspecialchars($query), "\n"; 但是,我不知道该怎么做。

我知道关于这个挑战有一个类似的问题,但我认为这并没有真正询问如何将 PHP 部分放入 SQL,而只是询问如何执行 SQL 注入。我对PHP的了解有限,基本上是今天开始学这个问题的;可能这是 PHP 注入?

感谢任何可以帮助我的人!

【问题讨论】:

    标签: php sql sql-server sql-injection


    【解决方案1】:

    是的。 SQL注入即可。 例如,如果设置

    $answer = "'; DELETE FROM answers WHERE ''='"; 
    

    您的代码删除答案表

    你需要使用

    SQLite3::escapeString($answer)
    

    和建设

    $row = $result->fetchArray();
    

    从表格答案中获取值数组,并且您需要比较数组中的值,我认为

    【讨论】:

    • 我认为问题在于我无法更改 php,因此我必须立即从初始 SQL 查询中显示 $CANARY。
    猜你喜欢
    • 2012-02-13
    • 2022-07-16
    • 1970-01-01
    • 2016-09-22
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    相关资源
    最近更新 更多