网络安全从入门到精通(第九章-4)XXE - 实体注入

本文内容:
		~什么是XXE
		~XML结构
		~XXE原理
		~实战注意
每日一句:
		脚本小子是走不远的,代码能力是成为大佬的必须
		当然不一定要写出完整系统,但是一定要能看懂代码

一、什么是XXE

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

二、XML结构

	1,结构:
			第一部分是声明,主要定义XML使用版本和使用编码
			第二部分是DTD部分,主要是约束作用,简单的说,给内容部分定规矩
					DTD约束的三种形式即:
						  内部DTD:
						  外部DTD:
						  网络DTD:
			第三部分是内容
	
	2,直接上例子:
			//外部DTD:
				
				
				<书架>
						<书>
								<书名>葵花宝典
								<作者>东方不败
								<售价>88.00元
						
				
			
			//内部DTD:
									
				
						
						
						
						
				]>
				<书架>
						<书>
								<书名>葵花宝典
								<作者>东方不败
								<售价>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

你可能感兴趣的:(网安小白的成长路)