XSLT注入测试手册
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/xslt-injection-lr-saow。
技能介绍
要解决的具体问题
服务端 XSLT 处理器会把攻击者可影响的样式表编译并在本机执行。一旦样式表不可信,它能触发跨域文件读取、解析外部实体、调用扩展接口,甚至通过 document() 向任意 URL 发起请求。
很多团队只关注 XML 外部实体(XXE),却忽略了 XSLT 场景下的注入路径。本技能把这类风险拆成可操作的测试步骤,并要求在授权范围内使用。
技能如何工作
1. 处理流程
- 处理器族映射:先确定 Java、.NET、PHP 或 libxslt 等处理器类型。
- 能力匹配:不同处理器的安全机制差异很大,例如 Java 可通过安全管理器限制文件访问,libxslt 则依赖编译参数。
- 载荷构造:针对具体处理器拼接文档读取、外部实体、EXSLT 扩展或脚本/扩展函数等载荷。
2. 核心机制
- 文档读取:
document(file:///etc/passwd)可尝试读取服务端文件。 - 外部实体:通过
<!DOCTYPE>声明外部实体,可能触发 SSRF 或本地文件泄露。 - EXSLT 扩展:
exsl:document()等扩展函数在部分实现中可用。 - 脚本与扩展函数:Java 可调用扩展类,.NET 可使用
msxsl:script,libxslt 可通过xsl:function加载 C 扩展。
3. 跨技能路由
- 如果输入只是通用 XML 解析,且不一定进入 XSLT 流程,可参考
xxe-xml-external-entity。 - 如果关注
document(http://...)引发的出站请求,可参考ssrf-server-side-request-forgery。
适用边界与注意点
- 仅限授权测试:部分载荷具有破坏性,请先确认授权范围。
- 非所有环境适用:某些处理器默认禁用脚本或外部访问。
- 输入路径识别:先确认数据是否真的进入 XSLT 编译,避免误报。
使用场景
- 审计Java服务XSLT编译入口时,验证document()能否读取本机文件
- 排查.NET服务中样式表是否触发外部实体或出站document()请求
- 测试libxslt环境是否允许EXSLT扩展函数或脚本执行
- 确认PHP服务XSLT处理流程中攻击者可控样式表的注入路径
适合人员
- 安全审计工程师:需定位XSLT注入点并验证载荷有效性
- 后端开发工程师:需排查XSLT处理流程中的安全风险
- 渗透测试人员:需在授权范围内执行XSLT注入测试