私はセキュリティツールを監査しています。自分自身の「安全でない領域」(ランダムに生成された偽のデータを使用)を作成するのがよい方法だと判断しました。 SQLインジェクションに敏感です。しかし、私は実際にそれを注入するように見えることはできません。私はそれに悪いクエリを与えると、 "ここにアカウントが見つかりました"が印刷されないが、エラーメッセージも印刷されないことに気付きます。意図的にスクリプトをSQLインジェクション可能にする
私が間違っていることを誰かに教えてもらえますか?
<?php
$resultHTML;
if (isset($_POST['email']) || isset($_GET['email'])) {
$conn = mysqli_connect($servername,$username,$password);
if ($conn) {
//this part is insecure (intentionally for testing)
if (isset($_GET['email'])) {
$query = "SELECT * from badSQL.Two WHERE email = '$_GET[email]'";
} else {
$query = "SELECT * from badSQL.Two WHERE email = '$_POST[email]'";
}
//echo $query;
$result = $conn->query($query);
if ($result) {
$resultHTML = "Here are the accounts found: ";
$hasAccount = false;
while ($row = mysqli_fetch_assoc($result)) {
$hasAccount = true;
$resultHTML .= "<br>".print_r($row);
}
if ($hasAccount === false) {
$resultHTML = "No accounts found.";
}
}
} else {
$resultHTML = "DB Connection could not be established: ".$conn->connect_error;
}
}
?>
<html>
<head>
<title>Two BadSQL Test</title>
</head>
<body>
<h1>Two Website!</h1>
<br>
<h3>Forgot Password</h3>
<p>Enter your email below, and click submit:</p>
<form id="forgotForm" method="get">
<input type="text" name="email" />
<input type="submit" value="submit" />
</form>
<br>
<div id="results"><?php echo $resultHTML; ?></div>
</body>
</html>
使用している注入ベクターとは何ですか?そして、あなたはそのテーブルからどのデータを抽出したいのですか? – h3ct0r
あなたはどんなエラーメッセージを言っていますか? 'ここにアカウントが見つかりました 'が表示されず、接続エラーがない場合は、印刷するエラーメッセージは表示されません。 – Zeke
「1」または「1」=「1」を試してください。上記のスクリプトには有効なSQLiでなければなりません。カプセル化された偽のデータの脆弱性を作成すると、正当な攻撃のベクタとして機能する可能性があるため、自分のサイトを脆弱なものにしたいと思う理由がわかりません。 –