XXE外部实体注入
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md 安装 @user_3c6cb52e/xxe-lr-dhr4。
技能介绍
要解决的问题
XXE(XML External Entity Injection)是一种长期存在却容易被低估的注入漏洞。当应用使用支持外部实体的 XML 解析器处理用户输入时,攻击者可通过特制的 XML 文档触发多种危害:读取服务器本地文件、发起 SSRF 探测内网、甚至造成拒绝服务。
在真实测试中,XXE 的难点在于入口分散、形态多变。它可能藏在 SOAP 请求的 envelope 里,也可能通过 REST 接口的 JSON 转 XML 逻辑触发,甚至藏在用户上传的 SVG、DOCX 文件中,在服务端二次解析时才生效。盲注型 XXE 更是没有直接回显,只能通过带外通道间接确认,对测试者的系统性和耐心要求很高。
核心能力与工作方式
该技能将 XXE 测试拆成一份结构化清单,按照攻击面由直接到间接的顺序推进,并把每一类变体的关键判断点单独列出:
- 经典 XXE:实体定义直接引用外部资源,观察响应中是否回显文件内容或外部 URL 内容
- 盲 XXE(带外):利用 DNS 或 HTTP 外连,配合
<!ENTITY % remote SYSTEM "http://...">等语法做间接确认 - 文件上传型 XXE:针对
SVG、DOCX等会触发 XML 解析的文件类型,检查上传后的服务端处理 - SOAP/REST 中的 XXE:在 API 协议层定位 XML 解析入口
- 报错型 XXE:利用解析错误回显文件内容
- XInclude 攻击:在无法直接注入实体时,通过
xi:include元素触发外部引用 - 过滤器绕过:当
DOCTYPE、ENTITY等关键字被过滤时,尝试编码、参数实体嵌套等替代写法
使用时应先按清单逐项确认适用性,再根据当前目标的上下文(解析器类型、输入格式、输出方式)选择下一步动作,并记录已完成项,避免重复探测。
适用边界与注意点
- 仅用于授权范围内的 Web 应用安全测试、漏洞赏金和教学研究
- 清单不保证覆盖所有私有解析器的边角行为,遇到异常应结合具体环境深入分析
- 盲注测试依赖外部监听通道,需自行准备带外服务器
- 过滤绕过部分给出的是常见思路,实际能否成功取决于目标的过滤规则
使用场景
- 渗透测试中需验证REST接口的XML解析是否支持外部实体引用
- 代码审计时需确认SOAP服务对DOCTYPE和实体的处理方式
- 测试用户上传的SVG在服务端解析时是否可读取本地文件
- 漏洞赏金中需用带外DNS确认盲注XXE是否存在
适合人员
- Web渗透测试工程师,需要在授权范围内系统排查XXE注入点
- 漏洞赏金猎人,希望通过带外与报错手法确认盲注XXE
- 后端开发工程师,需要在上线前验证XML解析器的安全配置
- 安全研究员,需要梳理SOAP与REST接口中的外部实体处理逻辑