如何通过 SQL Query 获取 PHP 变量的值?

Posted

技术标签:

【中文标题】如何通过 SQL Query 获取 PHP 变量的值?【英文标题】:How to obtain the value of a PHP variable through a SQL Query? 【发布时间】: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 注入?

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

【问题讨论】:

【参考方案1】:

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

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

您的代码删除答案表

你需要使用

SQLite3::escapeString($answer)

和建设

$row = $result->fetchArray();

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

【讨论】:

我认为问题在于我无法更改 php,因此我必须立即从初始 SQL 查询中显示 $CANARY。

以上是关于如何通过 SQL Query 获取 PHP 变量的值?的主要内容,如果未能解决你的问题,请参考以下文章

PHP,MY SQL错误查询[重复]

如何将日期和其他变量绑定到 php sql 查询? (MySql)

如何获取特定的 PHP 变量以通过 AJAX 调用发送?

dedecms SESSION变量覆盖导致SQL注入漏洞修补方案

如何在php中将json数组值声明为变量

插入php后获取生成的uuid