Windows XP の仮想サーバー「Wamp」で動作する PHP システムを所有しています。SQL インジェクション手法を使用してシステムの脆弱性を検出しようとしています。
「 ' OR 1=1 」などの基本的な注入方法を試してみたところ、いくつかの問題が見つかりました。ただし、次の問題で立ち往生しています。
システムに次のコード行があります。
$sql2="SELECT * FROM $table1 WHERE question_id='$id'";
このコード行の後、クエリを実行し、結果を次のように表示します。
$result2=mysql_query($sql2);
while($rows=mysql_fetch_array($result2)){
?>
<table width="400" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td><table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
<tr>
<td bgcolor="#F8F7F1"><strong>ID</strong></td>
<td bgcolor="#F8F7F1">:</td>
<td bgcolor="#F8F7F1"><?php echo $rows['a_id']; ?></td>
</tr>
<tr>
.......
.......
変数「$id」の値は、前のページから _GET[] パラメータとして送信されることに注意してください。
私の問題は、パラメーター id=2 を注入しようとしていることです。(2は一例です)前のページから送られてきます。次に例を示します。
http://localhost/PHPforum/view_topic.php?id=2
table1 の代わりに別のテーブル (table2) のデータを表示するために、変数「$id」の値を挿入する方法を探しています。両方のテーブルを表示しても問題ありませんが、その注入によって table2 データを表示する必要があります。
どうすればそれを行うことができますか?
繰り返しますが、私はどのシステムも攻撃しようとはしていません。それは私が所有するシステムであり、その脆弱性を検出しようとしています。