Hello there, ('ω')ノ
1. 入力フォームが狙われやすい理由
| 観点 |
内容 |
| 自由度 |
テキスト・数値・ファイル・URL など多様な入力を受け取る |
| コード密度 |
バリデーション、DB 書き込み、メール送信など処理が複数絡む |
| 「動くからOK」思考 |
ユーザテストは通るがセキュリティテストは後回しになりがち |
“表示は問題なくても裏側は穴だらけ”――フォームでは日常茶飯事です。
2. 代表的なフォーム系脆弱性とテスト例
| 脆弱性 |
簡易 PoC |
影響 |
| XSS(反射型) |
検索欄に <script>alert(1)</script> |
盗用 Cookie → セッション乗っ取り |
| SQLインジェクション |
コメント欄に ' OR 1=1-- |
DB 情報漏えい・改ざん |
| CSRF |
自作 HTML で自動 POST |
ユーザ権限で設定変更 |
| メールヘッダインジェクション |
\r\nBcc: spam@example.com |
スパム送信/情報流出 |
テスト Tips
- Burp Suite Repeater でリクエストを手動送信しながらパラメータ改ざん
- エラーメッセージ観察:SQL エラーや stacktrace はお宝ヒント
- Content-Type 変更:
application/json→text/plainで思わぬ動作を誘発
3. ファイルアップロードで起こる 5 大トラブル
| リスク |
例 |
攻撃シナリオ |
| 拡張子偽装 |
shell.php.jpg |
サーバ上で PHP として実行→RCE |
| MIME タイプバイパス |
Content-Type: image/png だが中身は HTML |
XSS → Cookie 窃取 |
| 画像処理ライブラリ脆弱性 |
ImageMagick “ImageTragick” |
コマンド注入でシステム操作 |
| ストレージ直アクセス |
/uploads/2025/06/confidential.pdf |
認可チェックなし→機密閲覧 |
| Zip Slip(パス トラバーサル) |
../../../../etc/passwd を内包する zip |
解凍でシステムファイル上書き |
速攻チェック 3 ステップ
- 拡張子チェンジ:
.php, .svg, .jsp を順に試す
- polyglot ファイル:画像+スクリプト混在ペイロードで実行可否を見る
- アップロード後の URL 推測:
/uploads/ など規則性を探り直接 GET
4. 実戦ミニシナリオ:画像アップロードで RCE
- テスト環境で
file.php.jpg をアップロード
- アップ後 URL:
https://site.com/uploads/2025/06/file.php.jpg
- 直接アクセス → 404。ただし
file.php へアクセスすると コード実行
<?php system('id'); ?> が走り、uid=33(www-data) 表示 → Critical バグ確定
5. 開発・運用側の防御チェックリスト
| 項目 |
推奨設定 |
| 入力バリデーション |
フロント+バックで必須。サーバ側は Allowlist 方式 |
| エンコーディング |
HTML Entity / SQL プレースホルダ 徹底 |
| ファイルストレージ |
ウェブルート外+ UUID リネーム |
| MIME & マジックナンバー検査 |
file --mime-type で2段階判定 |
| 画像処理 |
外部ツール呼び出しよりライブラリ組込+サンドボックス |
6. バグハンター向け簡易ツールセット
| 目的 |
ツール |
ワンライナー例 |
| XSS ペイロード生成 |
xsser / Dalfox |
dalfox url https://target.com?q= |
| マジックバイト確認 |
xxd / binwalk |
xxd -l 20 file.jpg |
| 画像ポリグロット生成 |
b374k / phpbypass |
cat shell.php >> image.jpg |
| 拡張子辞書テスト |
ffuf |
ffuf -w ext.txt -u https://site.com/fileFUZZ |
7. 報告時のポイント
- 再現手順は 3 行以内 に簡潔化(例:ログイン→アップロード→URL 実行)
- 影響度を具体化:「管理者権限で RCE → 全データ取得可能」
- 修正ガイド:
Content-Disposition による強制ダウンロード、.htaccess で PHP 実行無効化など提案すると評価↑
まとめ:ユーザー入力=“信頼ゼロ”を前提に
- 入力フォームは 「何を・どう処理するか」 を必ずサーバ側で検証
- アップロードは 保存場所・実行権限・表示方法 の 3 点でガード
- バグハンターは 「想定外の値+想定外の拡張子」 を突っ込む癖を!
“外から来るものは全て敵” くらいの気持ちでチェックすると、高確率でバグを仕留められます。
Best regards, (^^ゞ