Shikata Ga Nai

Private? There is no such things.

第33回:コードインジェクションや XSS などの探し方

Hello there, ('ω')ノ

1. まずは“入力点”を洗い出す

入力面 チェック方法
URL パラメータ ?q=検索ワード 末尾に '">< など追加
POST フォーム ログイン/問い合わせ Burp で送信内容を編集
HTTP ヘッダー User-Agent Referer Repeater で任意文字列を注入
JSON / API {"name":"Alice"} Postman でペイロード差し替え
ファイル名/メタデータ 画像アップロード ExifTool でタグ改ざん

“ユーザーが何か送れる所” はすべて候補です。


2. XSS(クロスサイトスクリプティング)の探し方

2.1 反射型(Reflected)

  1. 検索フォームなどに "><svg/onload=alert(1)> を入力
  2. 画面上でアラートが出れば成功
  3. 出なくても URL に値がそのまま表示 → エンコード不足の可能性

2.2 保存型(Stored)

  1. コメント欄にペイロード投稿
  2. 別ユーザーでページを再読み込み
  3. 発火すれば Stored XSS

2.3 DOM-based

  1. JS で location.hash などをそのまま innerHTML へ書くケースを探す
  2. デベロッパーツール → Sources → 検索 innerHTML
  3. ヒット箇所で #<img src=x onerror=alert(1)> を試す

🔧 自動補助ツール

dalfox url "https://target.com/search?q=" -o xss.txt
  • --skip-bav で WAF バイパス辞書を活用
  • 発見率↑ → 手動で検証、PoC 作成

3. コード/コマンドインジェクションの探し方

3.1 コマンドインジェクション(OS)

ペイロード 効果
test;id id コマンド実行
test && cat /etc/passwd パスワードファイル読取り

手順

  1. 疑わしいパラメータ(ping, host, image など)を Burp Repeater で送信
  2. レスポンスに uid= や エラーが返る → サーバ側でコマンド解釈の可能性
  3. フル PoC:sleep 5 で応答時間遅延を確認 = Blind でも検出可

3.2 SQL インジェクション(SQLi)

  • クイックテスト:' or '1'='1--
  • エラー抑制型アプリには time-based ('; WAITFOR DELAY '0:0:5'--) や boolean-based (' AND 1=2 UNION SELECT 'a'--) を利用
  • sqlmap -u "https://target.com/item?id=1" --batch で自動検証

4. バリデーション抜けの“地味穴”も忘れずに

パラメータ型 狙い所
数値 マイナス値や極小数 -1, 0.0001
日付 将来/過去の極端値 1970-01-01, 9999-12-31
列挙型 大文字小文字/NULL NULL, True

→ 想定外のレスポンスや例外表示は 内部スタックトレース の漏えいチャンス!


5. 報告用 PoC の“見せ方”テンプレ

① 手順
  1. https://target.com/search?q=<svg/onload=alert(1)>
  2. Enter → ブラウザでアラート

② 影響
  - 任意 JavaScript 実行 → Cookie, CSRF トークン窃取  
  - アカウント乗っ取り可能

③ 修正案
  - サーバ側で HTML エンコード  
  - CSP: script-src 'self'; object-src 'none';

3 枚スクショ(入力 → アラート → 専門解説)のシンプル構成が読みやすい。


6. 開発側:最小コストで塞ぐ鉄板対策

脆弱性 1st ステップ対策
XSS エンコード+CSP
Command inj exec 系 API 不使用 or 変数を完全エスケープ
SQLi プレースホルダ付き Prepared Statement
例外漏えい エラーハンドラで共通メッセージ (500 Internal Error)

まとめ:派手バグも地味チェックから

  • “フォーム+ペイロード”を手元で回すだけで高 Severity が見つかる
  • 自動ツールは 候補抽出、最後の PoC 作りは 必ず手動確認
  • 修正提案まで添えると “一段上” のレポートに

「入力点を疑う」→「処理を観察」→「PoC を磨く」 この 3 ステップを習慣化すれば、インジェクション系は怖くなくなります!

Best regards, (^^ゞ