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

XXE 漏洞简单研究

近期在做个基础的 web 常见漏洞的 ppt,主要参考 OWASP TOP 10 2017RC2,此版本中增加了 XXE 攻击,所以自己简单的研究下 XXE 攻击。XXE(XML External Entity)XML 外部实体,当前端和后端通信数据采用 xml,可传入 xml 外部实体,利用后端 xml 解析器漏洞,使 xml 解析器去访问攻击者指定的资源。首先需要了解一些 xml 的基础知识。

1.xml 基础知识

        XML 用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML 文档结构包括 XML 声明、DTD 文档类型定义(可选)、文档元素。

        XML 具有一些特性:

            (1).XML 是一种标记语言,很类似 HTML

            (2).XML 被设计用来传输和存储数据,而 HTML 被设计用来显示数据

            (3).XML 标签没有被预定义,需要用户自行定义标签

            (4).XML 具有自我描述性

        XML 的语法规则:

            (1).XML 必须有一个根元素

            (2).XML 必须有关闭标签

            (3).XML 标签对大小写敏感

            (4).XML 元素必须正确的嵌套

            (5).XML 属性值必须加引号

        XML DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。它使用一系列的合法元素来定义文档结构。DTD 可以在 XML 文档内声明,也可以外部引用。

        (1)内部声明:<!DOCTYPE 根元素 [元素声明]>,例如 <!DOCTYPE note aaa>

        (2)外部声明:<!DOCTYPE 根元素 SYSTEM "文件名">,例如 <!DOCTYPE root SYSTEM "test.dtd">

    DTD 实体声明:

        (1)内部实体声明

            <!ENTITY 实体名称 “实体的值”>

            示例:

                <!DOCTYPE foo [

                <!ELEMENT foo ANY> <!-- 声明元素 -->

                <!ENTITY test "abcdefg"> <!-- 声明内部实体 -->

                <!ENTITY xxe "Thinking"> <!-- 声明内部实体 -->

                ]>

                <foo>&xxe;&test;</foo>

        (2)外部实体声明

                <!ENTITY 实体名称 SYSTEM “URI/URL”>

                外部实体声明支持的部分协议如下:

<!DOCTYPE foo [

        <!ELEMENT foo ANY >

         <!ENTITY  xxe SYSTEM "file:///c:/windows/win.ini"> <!-- 声明外部实体 -->

]>

<foo>&xxe;</foo>

(3)参数实体声明

            参数实体的引用只能在 DTD 中使用

            <!ENTITY % 实体名 “实体内容”>

            <!ENTITY % 实体名 SYSTEM “URI”>

            详情见:http://www.w3school.com.cn/dtd/index.asp

2.XXE 攻击

        xxe 主要利用 xml 解析器对外部实体的解析去触发攻击,从上面支持的协议列表可以看出,可利用 xxe 去进行命令执行、读取文件、内网探测端口、作为跳板机攻击内网机器等攻击,故危害巨大。

xxe 主要分为两种场景:有回显和无回显。有回显的场景中,可以直接查看到攻击执行的结果。无回显的场景下,只能通过其他手段查看攻击效果。这次主要实验了有回显的情况。

        自己编写个简单的登录场景,登录的参数使用 xml 传输,后端对接收的 xml 参数进行解析,并且返回登录情况。制作个登录,当点击 “登录” 按钮时,使用 ajax 传输 xml 格式的登录信息,

传输的数据格式为:<login><username > 用户名 </username><password > 密码 </password></login>

后端使用 dom4j 去解析传入的 xml 参数,为了实现有回显的效果,我们将传入的 username 回传给前端,并在前端显示出来。

@Controller
@RequestMapping(value="api")
public class XXEController {/*<login><username>aaa</username><password>adfasds</password></login>*/@ResponseBody@RequestMapping(value="loginXml.json"/*,method= RequestMethod.POST*/)public AjaxResponse testXXE(String xml){AjaxResponse ajaxResponse = new AjaxResponse();try {Document document = DocumentHelper.parseText(xml);Element rootEle = document.getRootElement();String username = rootEle.elementTextTrim("username");//String password = rootEle.elementTextTrim("password");ajaxResponse.setCode(210);ajaxResponse.setMsg("登录失败");ajaxResponse.setContent(username);}catch (Exception e){e.printStackTrace();ajaxResponse.setCode(211);ajaxResponse.setMsg("数据处理失败");}return ajaxResponse;}}

正常登陆时,传输的参数和回显效果如下:

xml=%3Clogin%3E%3Cusername%3Eadmin%3C%2Fusername%3E%3Cpassword%3Etest123%3C%2Fpassword%3E%3C%2Flogin%3E

使用 xxe 攻击时,攻击示例代码如下,此代码读取 c:/windows/win.ini 文件

<!DOCTYPE foo 
[<!ELEMENT foo ANY>
<!ENTITY abc SYSTEM "file:///c:/windows/win.ini">]>
<login><username>&abc;</username><password>fdsf</password></login>

修改参数和回显效果如下:

3. 防御措施    

        关于防御措施,第一种可以关闭 xml 解析器外部解析功能,第二种进行过滤,例如过滤掉!、DOCTYPE、SYSTEM、ENTITY 等关键字

        尝试下第二种方案,过滤关键字。后端代码如下,将部分关键字过滤掉。

@Controller
@RequestMapping(value="api")
public class XXEController {/*<login><username>aaa</username><password>adfasds</password></login>*/@ResponseBody@RequestMapping(value="loginXml.json"/*,method= RequestMethod.POST*/)public AjaxResponse testXXE(String xml){AjaxResponse ajaxResponse = new AjaxResponse();try {//过滤部分关键字,防止XXEString newXml = xml.replace("!","").replace("DOCTYPE","").replace("ELEMENT","").replace("ENTITY","");Document document = DocumentHelper.parseText(newXml);Element rootEle = document.getRootElement();String username = rootEle.elementTextTrim("username");//String password = rootEle.elementTextTrim("password");ajaxResponse.setCode(210);ajaxResponse.setMsg("登录失败");ajaxResponse.setContent(username);}catch (Exception e){e.printStackTrace();ajaxResponse.setCode(211);ajaxResponse.setMsg("数据处理失败");}return ajaxResponse;}}

可以看到,将关键字过滤(替换成 “”),会导致传入的数据不符合 xml 的格式,后端在 xml 解析器在解析数据时,直接出错并跳转到异常处理代码段,证明这样过滤是有效的。以上为一次简单的研究 xxe,后续有待深入研究。

相关文章:

XXE 漏洞简单研究

近期在做个基础的 web 常见漏洞的 ppt&#xff0c;主要参考 OWASP TOP 10 2017RC2&#xff0c;此版本中增加了 XXE 攻击&#xff0c;所以自己简单的研究下 XXE 攻击。XXE&#xff08;XML External Entity&#xff09;XML 外部实体&#xff0c;当前端和后端通信数据采用 xml&…...

web漏洞与规避

文章目录 一、XSS 跨站脚本攻击1.1 XSS攻击的主要类型反射型XSS存储型XSSDOM型XSS 1.2 前端开发如何应对XSS 二、CSRF 跨站请求伪造2.1 CSRF例子2.2 前端开发如何应对CSRF 三、SQL 注入3.1 前端如何防御SQL注入 四、前端如何使用CSP 一、XSS 跨站脚本攻击 攻击者通过在受害者的…...

#FPGA(基础知识)

1.IDE:Quartus II 2.设备&#xff1a;Cyclone II EP2C8Q208C8N 3.实验&#xff1a;正点原子-verilog基础知识 4.时序图&#xff1a; 5.步骤 6.代码&#xff1a;...

LockBit病毒入侵揭秘:如何防范与应对

在数字时代&#xff0c;随着科技的飞速发展&#xff0c;网络安全问题愈发凸显。恶意软件和勒索软件等网络威胁正不断演变&#xff0c;其中一款备受关注的勒索软件就是LockBit。本文将深入介绍LockBit的特征、攻击手段、演进历程以及对网络安全的威胁。 01 主要特征 LockBit是…...

vue-router4 (六) 路由嵌套

应用场景&#xff1a; ①比如京东页面的首页、购物车、我的按钮&#xff0c;可以点击切换到对应的页面&#xff1b; ② 比如 Ant Design左侧这些按钮点击就会切到对应的页面&#xff0c;此时可以把左侧按钮放在父路由中&#xff0c;右侧的子路由 1.路由配置&#xff0c;子路由…...

【NR 定位】3GPP NR Positioning 5G定位标准解读(一)

目录 前言 1. 3GPP规划下的5G技术演进 2. 5G NR定位技术的发展 2.1 Rel-16首次对基于5G的定位技术进行标准化 2.2 Rel-17进一步提升5G定位技术的性能 3. Rel-18 关于5G定位技术的新方向、新进展 3.1 Sidelink高精度定位功能 3.2 针对上述不同用例&#xff0c;3GPP考虑按…...

【AI绘画】免费GPU Tesla A100 32G算力部署Stable Diffusion

免责声明 在阅读和实践本文提供的内容之前&#xff0c;请注意以下免责声明&#xff1a; 侵权问题: 本文提供的信息仅供学习参考&#xff0c;不用做任何商业用途&#xff0c;如造成侵权&#xff0c;请私信我&#xff0c;我会立即删除&#xff0c;作者不对读者因使用本文所述方法…...

JVM(2)

JVM类加载 指的是java进程运行时,需要把.class文件从硬盘加载到内存,并进行一系列校验解析的过程. 核心: .class文件>类对象; 硬盘>内存. 类加载过程 在整个JVM的执行流程中,和程序员关系最密切的就是类加载的过程了,所以我们来看一下类加载的执行流程. 对于一个类…...

青少年CTF擂台挑战赛 2024 #Round 1 Web方向题解 WP 全

EasyMD5 题目描述&#xff1a;php没有难题 考点总结&#xff1a;脑洞题目&#xff0c;不如我出&#xff08;狗头 只允许两个都上传pdf文件。 文件还不能太大了。burp多次发包发现要求两个pdf内容不一样 不一样时候&#xff0c;提示我们MD5碰撞。 科学计数法绕过 PHP的后门 …...

一文认识蓝牙(验证基于Aduino IDE的ESP32)

1、简介 蓝牙技术是一种无线通信的方式&#xff0c;利用特定频率的波段&#xff08;2.4GHz-2.485GHz左右&#xff09;&#xff0c;进行电磁波传输&#xff0c;总共有83.5MHz的带宽资源。 1.1、背景 蓝牙&#xff08;Bluetooth&#xff09;一词取自于十世纪丹麦国王哈拉尔Haral…...

2W字-35页PDF谈谈自己对QT某些知识点的理解

2W字-35页PDF谈谈自己对QT某些知识点的理解 前言与总结总体知识点的概况一些笔记的概况笔记阅读清单 前言与总结 最近&#xff0c;也在对自己以前做的项目做一个知识点的梳理&#xff0c;发现可能自己以前更多的是用某个控件&#xff0c;以及看官方手册&#xff0c;但是没有更…...

Docker知识点总结

二、Docker基本命令&#xff1a; Docker支持CentOs 6 及以后的版本; CentOs7系统可以直接通过yum进行安装&#xff0c;安装前可以 1、查看一下系统是否已经安装了Docker: yum list installed | grep docker 2、安装docker&#xff1a; yum install docker -y -y 表示自动确认…...

Redis 消息队列:构建消息代理的 4 个简单步骤

消息代理是一种使系统、应用程序和服务能够通信和交换信息的软件。它在正式消息传递协议之间转换消息,并允许相互依赖的服务直接“对话”,即使是用不同语言编写或在不同平台上实现也是如此。在微服务中使用异步通信时,通常会使用消息代理。 消息代理可确保可靠且稳定的通信,…...

kafka三节点集群平滑升级过程指导

一、前言 Apache Kafka作为常用的开源分布式流媒体平台&#xff0c;可以实时发布、订阅、存储和处理数据流,多用于作为消息队列获取实时数据&#xff0c;构建对数据流的变化进行实时反应的应用程序&#xff0c;已被数千家公司用于高性能数据管道、流分析、数据集成和任务关键型…...

Golang 简介与基本语法学习

Go&#xff0c;也被称为 Golang&#xff0c;是一门由 Google 设计的开源编程语言。它旨在提供高效的开发体验&#xff0c;同时具备并发性、内存安全和简洁性。本篇博客将介绍 Golang 的基本语法和一些示例&#xff0c;帮助读者快速入门这门令人着迷的语言。 简介 Go 语言的设…...

深入理解网络通信基本原理和tcp/ip协议

深入理解网络通信基本原理和tcp/ip协议 一、计算机网络体系1&#xff0c;计算机网络体系结构2&#xff0c;网络中数据传输2.1&#xff0c;浏览器中输入一个url的执行流程2.2&#xff0c;数据在网络中是的传输流程 3&#xff0c;三次握手和四次挥手3.1&#xff0c;三次握手3.1.1…...

Jetson系统烧录环境搭建

一 序言 Jetson 系列产品烧录系统的方法一般有两种&#xff0c;一种为使用 NVIDIA 官方提供 的 SDK manager 软件给 Jetson 设备烧录系统&#xff08;请查看说明文档《Jetson 产品使用 SDKmanager 烧录系统》&#xff09;。另一种即为当前文档所描述的&#xff0c;在安装 Ubun…...

【MySQL】:约束全解析

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; MySQL从入门到进阶 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一. 约束概述二. 约束演示三. 外键约束3.1 介绍3.2 语法3.3 删除/更新行为 &…...

设计一基于Text generation web UI的语言模型部署与远程访问的方案​

前言 Text generation web UI可为类ChatGPT的大型语言模型提供能够快速上手的网页界面&#xff0c;不仅可以提高使用效率&#xff0c;还可满足私有化部署&#xff0c;或对模型进行自定义。目前&#xff0c;该Web UI已经支持了许多流行的语言模型&#xff0c;包括LLaMA、llama.…...

大数据概述

学习大数据有什么用&#xff1f; 2010年&#xff1a;大数据技术体系开始在国内火热 2015年&#xff1a;国务院印发《促进大数据发展行动纲要》 2016年&#xff1a;发改委发布关于组织实施促进大数据发展重大工程的通知 2017年&#xff1a;工信部印发大数据产业规划(2016-20…...

基于机器学习与RIS的毫米波用户角度定位:四波束探测实现低开销波束管理

1. 项目概述&#xff1a;当RIS遇见机器学习&#xff0c;如何用四个波束“锁定”用户&#xff1f; 在毫米波频段玩无线通信&#xff0c;就像在一条狭窄却充满障碍物的高速公路上开跑车。速度是快了&#xff0c;但一个不小心&#xff0c;信号就被墙、人甚至一片树叶给“堵”得严严…...

OllyDbg与CheatEngine动态分析实战:恶意软件行为建模指南

1. 这不是游戏外挂工具&#xff0c;而是逆向工程师的听诊器与显微镜很多人第一次听说OllyDbg和Cheat Engine&#xff0c;是在游戏论坛里看到“修改血量”“无限金币”的教程&#xff1b;也有人在安全群聊中听到老手随口一提&#xff1a;“这壳用OD下断点跑两圈就脱了”。但如果…...

CentOS7 搭建 Kubernetes 集群

CentOS7 搭建 Kubernetes 集群完整指南 基于提供的文档&#xff0c;本文提供kubeadm快速搭建&#xff08;推荐新手&#xff09;和二进制手动搭建&#xff08;生产可控&#xff09;两种方案&#xff0c;所有步骤均适配CentOS7系统。 一、通用前置准备&#xff08;两种方式都需执…...

AI规范编程:从SDD理念到Spec-Kit落地实践

文章目录一、SDD 诞生的背景&#xff1a;AI 时代软件工程的范式变革2.1、传统开发范式的痛点2.2、SDD 的核心定义与价值2.3、SDD 的发展历程二、SDD 工具对比分析&#xff1a;Spec-Kit、OpenSpec 与 Superpowers2.1 核心定位与设计理念对比2.2 技术架构与功能特性对比2.3 选型建…...

ComfyUI-Custom-Scripts自动完成功能完整指南:提升AI绘画效率的终极解决方案

ComfyUI-Custom-Scripts自动完成功能完整指南&#xff1a;提升AI绘画效率的终极解决方案 【免费下载链接】ComfyUI-Custom-Scripts Enhancements & experiments for ComfyUI, mostly focusing on UI features 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-Custo…...

2026脑机接口与大模型融合架构解析

引言当一位渐冻症患者在脑海中浮现 “我想喝床头那杯温水” 的念头&#xff0c;传统脑机接口&#xff08;BCI&#xff09;或许只能识别出 “喝水” 这一模糊的宏观意图&#xff0c;却无法捕捉 “温水”“床头杯” 这些细节&#xff1b;当健康用户试图通过意念控制智能家居&…...

如何从零开始构建AI社会模拟:AgentSociety终极指南

如何从零开始构建AI社会模拟&#xff1a;AgentSociety终极指南 【免费下载链接】agentsociety AgentSociety 2 is a modern, LLM-native agent simulation platform designed for social science research and experimental design. It provides a flexible framework for crea…...

DeepSeek 公式 LaTeX 爆码问题实测与 AI 导出鸭解决方案

写论文或整理技术文档时&#xff0c;最让人头疼的往往不是推导过程本身&#xff0c;而是最后那一步&#xff1a;把辛辛苦苦得到的数学公式完美地呈现出来。很多开发者在尝试使用 DeepSeek 等大模型辅助生成 LaTeX 代码时&#xff0c;都遇到过令人抓狂的情况——模型输出的公式代…...

Unity网络游戏开发避坑指南:手把手教你用C#和MySQL复刻餐厅经营联机对战

Unity网络游戏开发实战&#xff1a;餐厅经营联机对战的技术实现与优化1. 从单机到联机&#xff1a;架构设计的核心转变餐厅经营游戏从单机转向联机对战&#xff0c;首要考虑的是如何重构游戏架构。传统单机游戏的所有逻辑都在本地运行&#xff0c;而联机游戏需要将关键逻辑迁移…...

从临床医疗说起:当一种科学理论走到边界的时候

我有一个同学&#xff0c;是搞肌肉医学的。他在临床中发现了一个现象&#xff1a;某种头昏&#xff0c;在内科的检查检验和治疗框架下&#xff0c;往往找不出头绪&#xff1b;但从肌肉学的角度看&#xff0c;它可能只是枕下肌群的劳损。松解之后&#xff0c;头昏可以得到有效而…...