0x00 什么是 XXE
XXE:XML External Entity,即外部实体攻击,其本质是利用应用过滤不严格进行xml语句的注入攻击,感觉应该属于注入攻击的一种,
0x01 XML 文档的DTD
文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构,包括定义了XML文档的元素(!ELEMENT),属性(!ATTLIST),实体(!ENTITY),其中实体的定义为:实体是用于定义引用普通文本或特殊字符的快捷方式的变量。类似于定义了一个变量
详细的DTD定义可以参考下面的链接:
http://www.runoob.com/dtd/dtd-building.html
x03 内部实体和外部实体
|
|
0x02 XXE 攻击PAYLOAD
|
0x02 XXE攻击原理
在 XML1.0 标准里,XML文档里的实体的标识符可以访问本地远程内容,如果在外部实体引用的过程中,注入恶意代码,即可引发信息泄露等安全问题。
比如上述示例中所演示的 URI,即可读取 passwd 中的敏感信息。
0x03 攻击方式
有回显
无回显
具体就不继续了,网上一大堆文章,反正了解了核心概念就可以了,其他利用姿势自行Google
0x04 如何防御
可以将 libxml 版本升级到 2.9.0 以后,因为 libxml 2.9.0 以后默认是不解析外部实体的,还要做输入过滤,错误处理等,反正应对注入的措施都要有
Bonus
XML Schema 很快会将 DTD 取而代之,但 XML Schema 也会存在注入的问题,这个后面再慢慢看,还有Xpath注入等,关于xml的安全问题还是由很多的