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码传输数据

<!DOCTYPE note [

]>

&hacker;

具有回显

构造payload

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

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

是系统的默认文件

<?xml version = "1.0"?>

<!DOCTYPE note [

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

]>

<name>&hacker;</name>

敏感文件查看:

相关推荐
变与不变8066 小时前
防抖节流详解
开发语言·前端·javascript
用户72526496629696 小时前
浏览器为什么加载不了超大图片
前端·javascript
酷炫码神6 小时前
Day 2|CSS 盒模型:把昨天的骨架,变成能看的页面
前端·css
Amos_Web7 小时前
我做了一个 Chrome 插件,专治“这篇文章我明明看过,但重点去哪了?”
前端·浏览器
abcyuu7 小时前
用友 U8 Cloud 生产制造模块深度解析:从 BOM 建立到成本核算的技术实现
前端·数据库·制造
零基础1237 小时前
为什么 Agent 用 SQLite 数据库?
前端·人工智能·sqlite·开源
xuyanzhuqing7 小时前
如何在一周内将一个巨石工程实现国际化
前端
数据掘金7 小时前
小程序埋点方案的埋点覆盖率怎么算?
前端
true8037 小时前
跨端开发的相册选择:弃用 uni-app 原生选图 API,直调 Android MediaStore 实现自定义相册架构
前端
数据掘金7 小时前
多AI平台回答快照的差异校验
前端