Shikata Ga Nai

Private? There is no such things.

OSコマンドインジェクション診断マニュアル(OS Command Injection)

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アドレスやホスト名を入力
📁 ファイル検索 lsfindを使っている機能 パスを指定して検索させる
🖼️ サムネイル生成・PDF変換 convert, imagemagick, pdftotextなどを内部で呼ぶ機能 ファイル名やパスに注目
📦 バックアップやログ出力 OSコマンド経由でファイル操作するケース 出力先のパスなど

🎯 3. 診断すべきパラメータ

パラメータ種別
IPアドレス入力欄 192.168.1.1192.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 & whoami127.0.0.1 && dir


🛠️ 5. 診断手順

  1. 対象ページの入力フォーム・リクエストを調査
  2. 入力欄やパラメータに上記ペイロードを入力
  3. レスポンス本文に コマンド実行結果が出力されるか確認
  4. 結果が表示されない場合は、**遅延系(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, (^^ゞ