XXE浅析
XXE
原理
服务端接收和解析了来自用户端的xml数据,而又没有做严格的安全控制,从而导致xml外部实体注入,造成任意文件读取、命令执行、内网端口扫描、攻击内网网站、发起Dos攻击等危害
先来了解一下XML和DTD
DTD的基本概念:document type definition 文档类型定义
XML的基本概率:可扩展标记语言,标准通用标记语言的子集,简称XML。是一种用于标记电子文件使其具有结构性的标记语言
DTD文件一般和XML文件配合使用,主要是为了约束XML文件。
XML文件引入DTD文件,这样XML可以自定义标签,但又受到DTD文件的约束。
危害
1.DOS攻击
2.SSRF攻击
3.使用file协议读取任意文件
4.端口探测
5.执行系统命令
防御
-方案1-禁用外部实体
PHP:
libxml_disable_entity_loader(true);
JAVA:
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();dbf.setExpandEntityReferences(false);
Python:
from lxml import etreexmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))
-方案2-过滤用户提交的XML数据
过滤关键词:<!DOCTYPE和<!ENTITY,或者SYSTEM和PUBLIC
测试点
-XXE黑盒发现:
1、获取得到Content-Type或数据类型为xml时,尝试进行xml语言payload进行测试
2、不管获取的Content-Type类型或数据传输类型,均可尝试修改后提交测试xxe
3、XXE不仅在数据传输上可能存在漏洞,同样在文件上传引用插件解析或预览也会造成文件中的XXE Payload被执行
-XXE白盒发现:
1、可通过应用功能追踪代码定位审计
2、可通过脚本特定函数搜索定位审计
3、可通过伪协议玩法绕过相关修复等
参考
https://www.cnblogs.com/20175211lyz/p/11413335.html
个人建议
先学一下xml,对这个漏洞的理解可能会更深,利用也会更加清楚
网安学的东西很多很杂,加油网安人