В настоящее время я работаю над проблемой вызова, которая просит вас отправить SQL-запрос, чтобы получить ответ.Однако это не простая инъекция SQL, так как исходный код PHP имеет небольшую защиту, которая выводит ответ только при наличии определенного ввода.Вот код ниже:
<code><?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 "
";?>
Это просто выводит 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>";
}
?>
Моя теория состоит в том, что можно отобразить значение $ CANARY через SQL-запрос со строкой, которая говорит echo "SQL query: ", htmlspecialchars($query), "\n";
Однако я не согласен с тем, как это сделать.
Я понимаю, что существует аналогичноевопрос об этой задаче, но я думаю, что на самом деле это не вопрос о том, как поместить часть PHP в SQL, а о том, как выполнить SQL-инъекцию. Мои знания PHP ограничены, так как я в основном начал изучать его сегодня, когда началэта проблема, потенциально это инъекция PHP?
Спасибо всем, кто сможет мне помочь с этим!