Hello there, ('ω')ノ
🎯 1. OSコマンドインジェクションとは?
OSコマンドインジェクションは、アプリケーションがユーザからの入力を使ってOSのシェルコマンドを実行する場合に、 その入力値に コマンドを追加挿入(注入)して、意図しない操作を行わせる脆弱性です。
💥 攻撃イメージ(例)
# 悪い実装例 os.system("ping " + user_input)
このとき、ユーザが 8.8.8.8; cat /etc/passwd
を入力すると:
ping 8.8.8.8; cat /etc/passwd
→ pingのあとに /etc/passwd
が読み取られて出力されてしまう!
🧭 2. チェックすべきページ・機能
種別 | ページ・機能例 | 備考 |
---|---|---|
🌐 ping / traceroute | ホストを指定して疎通確認するUI | IPアドレスやホスト名を入力 |
📁 ファイル検索 | ls やfind を使っている機能 |
パスを指定して検索させる |
🖼️ サムネイル生成・PDF変換 | convert , imagemagick , pdftotext などを内部で呼ぶ機能 |
ファイル名やパスに注目 |
📦 バックアップやログ出力 | OSコマンド経由でファイル操作するケース | 出力先のパスなど |
🎯 3. 診断すべきパラメータ
パラメータ種別 | 例 |
---|---|
IPアドレス入力欄 | 192.168.1.1 → 192.168.1.1; whoami |
ファイルパス | /tmp/data.txt → /tmp/data.txt; uname -a |
クエリパラメータ | /ping?target=127.0.0.1 → /ping?target=127.0.0.1;id |
JSONの値 | "target": "127.0.0.1" → "target": "127.0.0.1; id" |
🧪 4. ペイロード例(Linux系)
目的 | ペイロード |
---|---|
コマンド実行確認 | 127.0.0.1; whoami |
複数コマンド実行 | 127.0.0.1 && uname -a |
出力リダイレクト | 127.0.0.1; cat /etc/passwd |
コマンド短縮 | 127.0.0.1&whoami |
Windowsの場合:
127.0.0.1 & whoami
、127.0.0.1 && dir
🛠️ 5. 診断手順
- 対象ページの入力フォーム・リクエストを調査
- 入力欄やパラメータに上記ペイロードを入力
- レスポンス本文に コマンド実行結果が出力されるか確認
- 結果が表示されない場合は、**遅延系(Blind)**で確認
🕰️ 6. Blind コマンドインジェクション(出力がない場合)
テスト方法:
- 入力に遅延コマンドを挿入し、応答が遅れるかを観察
- 例(Linux):
127.0.0.1; sleep 5
127.0.0.1 && ping -c 5 127.0.0.1
→ 通常の応答時間より 5秒以上遅れたら、実行された可能性
⚠️ 7. 注意点・ベストプラクティス
- 誤検出を防ぐため、通常入力との応答差を記録する
- コマンド実行権限が制限されているケースも多い
- 脆弱性があっても出力が見えない(Blind)ケースに注意
- 本番環境での危険なコマンド実行は避けること!(倫理と法に注意)
🧰 8. 補助ツール
- Burp Suite(Repeater):複数のペイロードを試すのに便利
- commix:自動化されたコマンドインジェクション診断ツール(Linux系環境向け)
- curl / Postman:API向けの手動送信に最適
📓 見つけやすいヒント
- 「ping」「lookup」「check host」などのUIラベル
- 「バックアップ保存先」や「変換ファイル名」を入力できる場所
- サーバが
whoami
,uname
,id
,cat
などの出力に反応するかを見る
Best regars, (^^ゞ