DTD/XXE 攻击笔记分享
本文中我们将提供一个全面的针对 DTD 不同类型的攻击列表。
攻击分类如下:
拒绝服务攻击(DDoS)
基本的 XXE 攻击
高级的 XXE 攻击
服务器端请求伪造攻击(SSRF)
XML 包含机制(XInclude)
扩展样式表转换语言(XSLT)
拒绝服务攻击(DDoS)
支持实体测试:
如果解析过程变的非常缓慢,则表明测试成功,即目标解析器配置不安全可能遭受至少一种 DDoS 攻击。
Billion Laughs 攻击 (Klein, 2002)
译者注:“Billion Laughs” 攻击 —— 通过创建一项递归的 XML 定义,在内存中生成十亿个“Ha!”字符串,从而导致 DDoS 攻击。原理为:构造恶意的XML实体文件耗尽可用内存,因为许多XML解析器在解析XML文档时倾向于将它的整个结构保留在内存中。
这个文件只有 30 Kb大小但却有 11111 个实体引用,超出了合法的实体引用数量上限。
Billion Laughs 攻击 – 参数实体 (Späth, 2015)
文件位于:http://publicServer.com/dos.dtd
XML 二次爆破 DDoS 攻击
一般实体递归
最好不要使用递归 — [WFC: No Recursion]
外部一般实体 (Steuck, 2002)
这种攻击方式是通过申明一个外部一般实体,然后引用位于网上或本地的一个大文件(例如:C:/pagefile.sys 或 /dev/random)。
然而,这种攻击只是让解析器解析一个 巨大的 XML 文件而已。
基本的 XXE 攻击
基本的 XXE 攻击 (Steuck, 2002)
高级的 XXE 攻击 – 直接反馈通道
这类攻击为高级的 XXE 攻击,用于绕过对基本的 XXE 攻击的限制和 OOB(外带数据) 攻击
绕过基本 XXE 攻击的限制 (Morgan, 2014)
文件位于:http://publicServer.com/parameterEntity_core.dtd
<!ENTITY all '%start;%goodies;%end;'> |
滥用属性值的 XXE 攻击
文件位于:http://publicServer.com/external_entity_attribute.dtd
文件位于:http://publicServer.com/url_invocation_parameterEntity.dtd
<!ELEMENT data2 (#ANY)> |
文件位于:http://publicServer.com/file.xml
文件位于:http://publicServer.com/url_invocation_schemaLocation.xsd
文件位于: http://publicServer.com/url_invocation_noNamespaceSchemaLocation.xsd
原文作者
Christopher Späth
Christian Mainka (@CheariX)
Vladislav Mladenov