Shikata Ga Nai

Private? There is no such things.

OSコマンドインジェクション:`&` を使ったシンプルかつ強力な注入テクニック

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, (^^ゞ