如何通过 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 sql 查询? (MySql)