だから私は二次SQLインジェクションを複製しようとしてきました。これは、私が用意した 2 つの PHP ベースのサイトのサンプル テンプレートです。それを有権者登録フォームと呼びましょう。ユーザーが登録すると、登録有権者かどうかを確認できます。
insert.php
<?php
$db_selected = mysql_select_db('canada',$conn);
if (!db_selected)
die("can't use mysql: ". mysql_error());
$sql_statement = "INSERT into canada (UserID,FirstName,LastName,Age,State,Town)
values ('".mysql_real_escape_string($_REQUEST["UserID"])."',
'".mysql_real_escape_string($_REQUEST["FirstName"])."',
'".mysql_real_escape_string($_REQUEST["LastName"])."',
".intval($_REQUEST["Age"]).",
'".mysql_real_escape_string($_REQUEST["State"])."',
'".mysql_real_escape_string($_REQUEST["Town"])."')";
echo "You ran the sql query=".$sql_statement."<br/>";
$qry = mysql_query($sql_statement,$conn) || die (mysql_error());
mysql_close($conn);
Echo "Data inserted successfully";
}
?>
select.php
<?php
$db_selected = mysql_select_db('canada', $conn);
if(!db_selected)
die('Can\'t use mysql:' . mysql_error());
$sql = "SELECT * FROM canada WHERE UserID='".addslashes($_POST["UserID"])."'";
echo "You ran the sql query=".$sql."<br/>";
$result = mysql_query($sql,$conn);
$row=mysql_fetch_row($result);
$sql1 = "SELECT * FROM canada WHERE FirstName = '".$row[1]."'";
echo "The web application ran the sql query internally=" .$sql1. "<br/>";
$result1 = mysql_query($sql1, $conn);
$row1 = mysql_fetch_row($result1);
mysql_close($conn);
echo "<br><b><center>Database Output</center></b><br><br>";
echo "<br>$row1[1] $row1[2] , you are a voter! <br>";
echo "<b>VoterID: $row[0]</b><br>First Name: $row[1]<br>Last Name: $row[2]
<br>Age: $row[3]<br>Town: $row[4]<br>State: $row[5]<br><hr><br>";
}
?>
したがって、二次 SQL インジェクションがどのように機能するかを示すために、これを意図的に脆弱にしました。ユーザーは、名前のセクションにコードを入力できます (現在行き詰まっている場所で、さまざまな方法を試しましたが、取得できないようですそれは何でもすることです)。次に、名前のセクションに挿入したコードを有効にしたい場合は、ユーザー ID を入力するだけで、コードが挿入されます。
例: insert.php ページに次のように入力します: userid = 17
firstname = (ここに何かを挿入する必要があります)
姓 = ..
年齢 = ..
町 = ..
状態 = ..
次に、詳細を確認して 17 と入力すると、挿入された SQL スクリプトがアクティブになります。これによってどのような脆弱性を示すことができるかについて、いくつかの例を得ることができますか?