VulnHub靶机学习——XXE
字数 1451 2025-08-18 11:38:48

XXE漏洞靶机实战教学文档

靶机概述

  • 靶机名称: XXE
  • 难度等级: 中级
  • 目标: 获取flag
  • 下载地址: XXE靶机下载
  • 运行环境:
    • 攻击机: Kali Linux & Windows 7
    • 靶机: XXE
    • 虚拟化平台: VMware
    • 网络设置: NAT模式

初始信息收集

1. 端口扫描

使用nmap进行扫描:

nmap -sV -p- 192.168.50.148

扫描结果:

  • 开放端口:
    • 80/tcp (HTTP服务)
    • 5355/tcp

2. Web目录爆破

使用目录爆破工具发现以下重要路径:

  • /robots.txt
    • 包含目录: /XXE/admin.php

漏洞发现与利用

1. XXE漏洞发现

靶机名称为"XXE"提示可能存在XML外部实体注入漏洞。

测试点: /XXE页面的登录功能

2. XXE漏洞利用步骤

  1. 抓取登录请求:

    • 使用Burp Suite拦截/XXE页面的登录请求
  2. 构造恶意XML:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE r [
<!ELEMENT r ANY >
<!ENTITY admin SYSTEM "file:///etc/passwd">
]>
<root>
<name>&admin;</name>
<password>1</password>
</root>
  1. 文件读取结果:

    • 成功读取/etc/passwd文件内容
  2. 读取admin.php源码:

    • 修改XML中的文件路径为file:///var/www/html/admin.php
    • 获取到Base64编码的PHP文件内容

3. 解密获取凭证

  1. Base64解码:

    • 对获取的admin.php内容进行Base64解码
    • 发现经过MD5加密的密码
  2. MD5解密:

    • 解密得到密码: admin@123

4. 登录admin.php

使用凭证:

  • 用户名: 从上下文推断可能是admin
  • 密码: admin@123

登录后:

  • 页面显示一个红色flag链接
  • 点击后查看页面源代码获取flag提示信息

5. Flag获取过程

  1. 解码flag信息:

    • 先进行Base32解码
    • 再进行Base64解码
  2. 获取最终flag:

    • 通过XXE读取解码后指示的文件
    • 获取到另一段Base64编码内容
    • 解码后发现PHP代码
    • 将代码保存为1.php并在XAMPP环境中运行
    • 最终获取flag

技术要点总结

XXE漏洞利用关键点

  1. 检测方法:

    • 观察应用是否处理XML输入
    • 尝试插入XML特殊字符看是否报错
    • 靶机名称可能提供线索
  2. 利用方式:

    • 文件读取: file:///path/to/file
    • 可能支持的其他协议: http://, ftp://, php://filter等
  3. 绕过技巧:

    • 当直接回显被过滤时,可通过外部DTD引入
    • 使用CDATA包裹敏感内容
    • 利用PHP过滤器获取源码: php://filter/convert.base64-encode/resource=file.php

防御措施

  1. 禁用外部实体:

    libxml_disable_entity_loader(true);
    
  2. 输入过滤:

    • 过滤XML中的<!DOCTYPE><!ENTITY>声明
  3. 使用JSON替代XML:

    • 现代Web应用优先考虑使用JSON
  4. 最小化XML解析器功能:

    • 配置XML解析器禁用外部实体和DTD

扩展学习

  1. XXE漏洞类型:

    • 经典XXE
    • Blind XXE
    • 基于错误的XXE
    • SSRF via XXE
  2. 相关工具:

    • Burp Suite (用于拦截和修改请求)
    • OWASP ZAP
    • XXEinjector (自动化XXE工具)
  3. 实战技巧:

    • 尝试读取/proc/self/environ获取环境变量
    • 读取~/.bash_history查看历史命令
    • 通过expect://执行系统命令(需特定环境支持)

参考资源

  1. OWASP XXE防护指南
  2. XXE漏洞详解
  3. Tide安全团队官网
XXE漏洞靶机实战教学文档 靶机概述 靶机名称 : XXE 难度等级 : 中级 目标 : 获取flag 下载地址 : XXE靶机下载 运行环境 : 攻击机: Kali Linux & Windows 7 靶机: XXE 虚拟化平台: VMware 网络设置: NAT模式 初始信息收集 1. 端口扫描 使用nmap进行扫描: 扫描结果 : 开放端口: 80/tcp (HTTP服务) 5355/tcp 2. Web目录爆破 使用目录爆破工具发现以下重要路径: /robots.txt 包含目录: /XXE 和 /admin.php 漏洞发现与利用 1. XXE漏洞发现 靶机名称为"XXE"提示可能存在XML外部实体注入漏洞。 测试点 : /XXE 页面的登录功能 2. XXE漏洞利用步骤 抓取登录请求 : 使用Burp Suite拦截 /XXE 页面的登录请求 构造恶意XML : 文件读取结果 : 成功读取 /etc/passwd 文件内容 读取admin.php源码 : 修改XML中的文件路径为 file:///var/www/html/admin.php 获取到Base64编码的PHP文件内容 3. 解密获取凭证 Base64解码 : 对获取的admin.php内容进行Base64解码 发现经过MD5加密的密码 MD5解密 : 解密得到密码: admin@123 4. 登录admin.php 使用凭证: 用户名: 从上下文推断可能是 admin 密码: admin@123 登录后 : 页面显示一个红色flag链接 点击后查看页面源代码获取flag提示信息 5. Flag获取过程 解码flag信息 : 先进行Base32解码 再进行Base64解码 获取最终flag : 通过XXE读取解码后指示的文件 获取到另一段Base64编码内容 解码后发现PHP代码 将代码保存为1.php并在XAMPP环境中运行 最终获取flag 技术要点总结 XXE漏洞利用关键点 检测方法 : 观察应用是否处理XML输入 尝试插入XML特殊字符看是否报错 靶机名称可能提供线索 利用方式 : 文件读取: file:///path/to/file 可能支持的其他协议: http://, ftp://, php://filter等 绕过技巧 : 当直接回显被过滤时,可通过外部DTD引入 使用CDATA包裹敏感内容 利用PHP过滤器获取源码: php://filter/convert.base64-encode/resource=file.php 防御措施 禁用外部实体 : 输入过滤 : 过滤XML中的 <!DOCTYPE> 和 <!ENTITY> 声明 使用JSON替代XML : 现代Web应用优先考虑使用JSON 最小化XML解析器功能 : 配置XML解析器禁用外部实体和DTD 扩展学习 XXE漏洞类型 : 经典XXE Blind XXE 基于错误的XXE SSRF via XXE 相关工具 : Burp Suite (用于拦截和修改请求) OWASP ZAP XXEinjector (自动化XXE工具) 实战技巧 : 尝试读取 /proc/self/environ 获取环境变量 读取 ~/.bash_history 查看历史命令 通过 expect:// 执行系统命令(需特定环境支持) 参考资源 OWASP XXE防护指南 XXE漏洞详解 Tide安全团队官网