用途
此技能用于在获得书面授权的渗透测试中,检测并验证 XML 外部实体(XXE)注入漏洞。适用于应用处理 XML 输入的场景,包括 SOAP API、文件上传、RSS 订阅,以及接受 Content-Type: application/xml 或 text/xml 的接口;也用于评估文件上传功能(DOCX、XLSX、SVG、PDF)中的 XML 解析器、SOAP 网络服务中的实体注入,以及使用 XML 配置的企业应用安全评估。
前提条件
需要书面渗透测试授权协议;Burp Suite Professional 用于拦截和修改 XML 请求;XXEinjector 自动化利用工具(git clone https://github.com/enjoiz/XXEinjector.git);Burp Collaborator 或 interactsh 作为带外服务器用于盲注检测;curl 用于手工构造和提交 payload;Python 用于搭建 DTD 托管服务器。
工作流程
步骤 1:识别 XML 处理点。在 Burp 代理历史中筛选 Content-Type: application/xml、text/xml、application/soap+xml;测试 JSON 端点是否也接受 XML(将请求体改为 XML 格式并切换 Content-Type);检查文件上传端点是否支持 DOCX、XLSX、PPTX、SVG、PDF、XML、RSS、ATOM、SOAP 等含 XML 的格式;检查 SOAP 端点。
步骤 2:基础 XXE 文件读取测试。在 XML 中注入 DTD 外部实体,读取服务器本地文件,例如 /etc/passwd、Windows 的 c:/windows/win.ini、应用配置文件;可使用 PHP filter wrapper 进行 base64 编码以避免 XML 解析错误。
步骤 3:带外盲注检测。当实体值未在响应中回显时,使用 Burp Collaborator 或 interactsh 进行带外检测,包括 HTTP 回调、DNS 外泄,以及常规实体被阻止时使用参数实体。
步骤 4:通过带外 XXE 外泄数据。在攻击者服务器托管恶意 DTD 文件,通过外部 DTD 将文件内容经 HTTP 请求外泄;对多行文件外泄可改用 FTP 协议,并使用 xxeserv 等 FTP 监听器捕获输出。
步骤 5:通过文件上传测试 XXE。在 SVG 文件中注入 XXE 并上传;DOCX/XLSX 本质是含 XML 的 ZIP 包,可将 XXE 注入 [Content_Types].xml、document.xml 或 xl/sharedStrings.xml 后重新打包上传。
步骤 6:测试 XXE 导致的 SSRF。利用 XXE 使服务器向内部服务发送请求,例如访问云元数据 169.254.169.254、对内网常见端口进行扫描、访问内部服务。
关键概念
XML 外部实体是在 DTD 中通过 SYSTEM 或 PUBLIC 关键字引用外部资源的实体;DTD 定义 XML 文档结构和合法元素,包括实体声明;内部实体在 DTD 中直接定义值;外部实体从 URI 加载内容;参数实体用于 DTD 内部,以 % 前缀;盲注 XXE 指实体值不在响应中回显、需要带外外泄;Billion Laughs 是递归实体扩展导致指数级内存消耗的 DoS 攻击;XXE to SSRF 是利用 XXE 让服务器向内部或外部服务发送请求。
工具
Burp Suite Professional 用于请求拦截、修改及 Collaborator 带外检测;XXEinjector 用于自动化 XXE 利用,具备文件外泄和 SSRF 能力;interactsh 是带外交互服务器,用于检测盲注 XXE 回调;xxeserv 是专用于 XXE 数据外泄的 FTP/HTTP 服务器;OWASP ZAP 在主动扫描模式下自动扫描 XXE;DTD-Finder 用于发现服务器上的 DTD 文件以进行实体注入。
常见场景
场景一:SOAP API 文件读取。SOAP 服务处理 XML 输入时未禁用外部实体,在 SOAP body 中注入含 SYSTEM 实体的 DTD 即可读取 /etc/passwd 并在响应中返回。
场景二:SVG 上传盲注 XXE。图片上传功能接受 SVG,服务端解析 SVG 生成缩略图,在 SVG 中使用盲注 XXE payload,经带外 HTTP 请求外泄服务器文件。
场景三:JSON 切换为 XML。REST API 主要使用 JSON,但 XML 解析器也启用,将 Content-Type 切换为 application/xml 并发送 XXE payload,可通过 API 响应暴露服务器文件。
场景四:DOCX 处理 XXE。简历上传功能处理 DOCX 文件,将 XXE 注入 DOCX 归档中的 [Content_Types].xml,在服务端解析文档时触发文件读取。
输出格式
发现报告包含:漏洞名称 XML External Entity (XXE) Injection、严重性 Critical (CVSS 9.1)、位置、OWASP 分类 A05:2021 - Security Misconfiguration;复现步骤;已确认影响(本地文件读取、SSRF 访问 AWS 元数据、内网端口扫描);已获取文件表格;修复建议:在 XML 解析器中禁用外部实体处理、如非必需完全禁用 DTD 处理、尽可能用 JSON 替代 XML、实施输入验证拒绝 XML 中的 DTD 声明、为 Web 服务器用户应用最小权限文件系统权限。
限制
本技能仅限授权渗透测试使用,须具备书面授权协议;实际可用性、收费、价格、平台、效果等细节暂未提供。