[ 代码审计篇 ] 代码审计案例详解(二) XXE代码审计案例

news2024/12/27 0:44:03

🍬 博主介绍

👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~
✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!

文章目录

  • 🍬 博主介绍
  • 一、什么是 XXE 漏洞?
    • 1、XXE 简介
    • 2、XML结构介绍
      • 1.第一部分:声明
      • 2.第二部分:DTD(文档类型定义)
      • 3.第三部分:文档的元素
  • 二、案例讲解
    • 1、环境搭建
      • 1.准备 vulns.war 包
      • 2.启动 tomcat
      • 3.查看环境目录
      • 4.访问环境
    • 2、工具扫描
    • 3、漏洞复现
      • 1.获取文件
      • 2.解释payload
    • 4、漏洞修复
      • 1.XXE怎么防御的?
      • 2.禁用外部实体进行防御
      • 3.修复成功
  • 四、相关资源

一、什么是 XXE 漏洞?

1、XXE 简介

XXE(XML External Entity)是指xml外部实体攻击漏洞。XML外部实体攻击是针对解析XML输入的应用程 序的一种攻击。当包含对外部实体的引用的XML输入被弱配置XML解析器处理时,就会发生这种攻击。 这种攻击通过构造恶意内容,可导致读取任意文件、执行系统命令、探测内网端口、攻击内网网站等危害。

2、XML结构介绍

要了解XXE漏洞,那么一定要先学习一下有关XML的基础知识。
XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。

1.第一部分:声明

主要会定义一些版本,编码之类的东西。

2.第二部分:DTD(文档类型定义)

也就是他的文档类型定义,形成漏洞部分。
可以定义很多的实体内容,实体内容会对后面整个XML的文档去做一个对应的约束。

DTD格式如下:

第一个是内部声明
<!DOCTVYPE 根元素 [元素声明]>
第二个是外部实体(我们这次漏洞用的)
<!DOCTVYPE 根元素名称 SYSTEM "外部DTD的URI"
第三个是public类型的
<!DOCTVYPE 根元素名称 PUBLIC "DTD标识名" "公用DTD的URI">

3.第三部分:文档的元素

也就是他的正文,在这个里面会通过一下标签去定义一些key和value属性跟值,这样的一些东西。

二、案例讲解

1、环境搭建

1.准备 vulns.war 包

下载连接在文末给出
把 vulns.war 包放入tomcat webapps 目录下

在这里插入图片描述

2.启动 tomcat

下载连接在文末给出
进入 tomcat bin 目录,管理员身份运行 startup.bat 文件启动 tomcat 。
Tomcat 启动默认会将 webapps 目录下所有的 war 包解析一遍。

在这里插入图片描述
在这里插入图片描述

3.查看环境目录

回到我们 webapps 目录下,发现多了一个 vulns 目录。这就是 tomcat 解析 war 包生成的。

在这里插入图片描述

4.访问环境

http://localhost:8080/vulns/

在这里插入图片描述
在这里插入图片描述

2、工具扫描

使用 fortify 扫描,发现源代码中存在一个XXE漏洞

在这里插入图片描述

3、漏洞复现

1.获取文件

http://localhost:8080/vulns/007-xxe.jsp?data=%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22ISO-8859-1%22%3F%3E%3C%21DOCTYPE%20foo%20%5B%20%20%20%3C%21ELEMENT%20foo%20ANY%20%3E%20%20%3C%21ENTITY%20xxe%20SYSTEM%20%22file%3A%2F%2F%2Fc%3A%2Fwindows%2Fwin.ini%22%20%3E%5D%3E%3Cfoo%3E%26xxe%3B%3C%2Ffoo%3E

在这里插入图片描述

2.解释payload

我们解码一下payload
在这里插入图片描述

<?xml version="1.0" encoding="ISO-8859-1"?>	

<!DOCTYPE foo [ 
<!ELEMENT foo ANY > 
<!ENTITY xxe SYSTEM "file:///c:/windows/win.ini" >]>

<foo>&xxe;</foo>

此处将本地计算机中 file:///c:/windows/win.ini 文件的内容取出,赋值给了实体 xxe
然后实体 xxe 的值作为元素 foo 中的字符串数据被解析的时候取出,作为对象里的内容然后再输出该对象的时候被打印出来。

4、漏洞修复

1.XXE怎么防御的?

1.禁用外部实体
2.过滤用户提交的XML数据 
过滤关键词:!ENTITY,或者SYSTEM和PUBLI 
3.使用第三方应用代码及时升级

2.禁用外部实体进行防御

我们就直接禁用外部实体来演示一下防御,使用开发语言提供的禁用外部实体的方法

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
dbf.setExpandEntityReferences(false); 

我们打开环境源代码

在这里插入图片描述

在如下位置添加一行

docFactory.setExpandEntityReferences(false); 

保存

在这里插入图片描述

3.修复成功

打开漏洞环境,在验证XXE是不是存在。

http://localhost:8080/vulns/007-xxe.jsp?data=%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22ISO-8859-1%22%3F%3E%3C%21DOCTYPE%20foo%20%5B%20%20%20%3C%21ELEMENT%20foo%20ANY%20%3E%20%20%3C%21ENTITY%20xxe%20SYSTEM%20%22file%3A%2F%2F%2Fc%3A%2Fwindows%2Fwin.ini%22%20%3E%5D%3E%3Cfoo%3E%26xxe%3B%3C%2Ffoo%3E

发现漏洞已经不存在了,我们刚刚的修复是有效的。

在这里插入图片描述

四、相关资源

1、vulns.war包下载链接
2、Tomcat下载链接
3、[ 代码审计篇 ] Fortify 安装及使用详解(一)
4、[ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例

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

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

相关文章

年底了,手机通讯录和相册被恶意APP获取,看我如何破局?

☆ 最近几天突然收到一个朋友的深夜短信&#xff0c;被告知如果有人发送不明信息&#xff0c;或者发送任何不明链接&#xff0c;都不要点开。我经过问朋友&#xff0c;得知下载了一个恶意的APP&#xff0c;把通讯录和手机相册获取了。 ☆ 年底了&#xff0c;很多人发愁过年没有…

ASIO IO_CONTEXT 源码整理

io_context关系图 io_context io_context::io_context(): impl_(add_impl(new impl_type(*this,ASIO_CONCURRENCY_HINT_DEFAULT, false))) { }io_context::io_context(int concurrency_hint): impl_(add_impl(new impl_type(*this, concurrency_hint 1 ? ASIO_CONCURRENCY_HI…

一千元以内的蓝牙耳机推荐,2023年最值得入手的蓝牙耳机分享

对于蓝牙耳机的选购技巧&#xff0c;我还是比较了解的&#xff0c;也知道有哪些蓝牙耳机比较好用&#xff0c;音质也好&#xff0c;但还是有很多人不知道该如何选购耳机&#xff0c;我也总是被问到蓝牙耳机挑选的相关问题&#xff0c;今天就来跟大家一起来了解了解什么蓝牙耳机…

看我这篇没人比你更懂RecyclerView的预加载

实际上&#xff0c;预拉取(prefetch)机制作为RecyclerView的重要特性之一&#xff0c;常常与缓存复用机制一起配合使用、共同协作&#xff0c;极大地提升了RecyclerView整体滑动的流畅度。 并且&#xff0c;这种特性在ViewPager2中同样得以保留&#xff0c;对ViewPager2滑动效…

【面试题】请你谈谈MySQL性能调优的方法

【面试题】请你谈谈MySQL性能调优的方法 这个问题是一个开放性问题&#xff0c;本人这一段时间参加面试&#xff08;2022.12.26&#xff09;经常被问道...... 刚刚开始我回答的很混乱&#xff01;虽然真的知道MySQL性能调优的方法&#xff0c;也做过类似的工作&#xff0c;但…

【BF算法】

BF 算法 BF 算法精讲 在学习到字符串的匹配问题时&#xff0c;了解到了BF算法和KMP算法。 对比这两个算法&#xff0c;先了解BF算法&#xff1b; 字符串匹配问题&#xff0c;比如说&#xff1a;有一个主串 “abbbcdef” &#xff0c; 子串 “bbc”&#xff0c;该问题就是在主…

Linux基础 - DNS服务基础

‍‍&#x1f3e1;博客主页&#xff1a; Passerby_Wang的博客_CSDN博客-系统运维,云计算,Linux基础领域博主 &#x1f310;所属专栏&#xff1a;『Linux基础』 &#x1f30c;上期文章&#xff1a; Linux基础 - Web服务基础 &#x1f4f0;如觉得博主文章写的不错或对你有所帮助…

共享内存和消息队列

共享内存 共享内存指 (shared memory)在多处理器的计算机系统中&#xff0c;可以被不同中央处理器(CPU)访问的大容量内存。由于多个CPU需要快速访问存储器&#xff0c;这样就要对存储器进行缓存(Cache)。任何一个缓存的数据被更新后&#xff0c;由于其他处理器也可能要存取&am…

某程序员哀叹:有比我更惨的吗?工作6年攒了200万,高位接盘买了600万的房子,现在房子跌了100多万,每个月还要还2万房贷!...

最近这几年&#xff0c;“人间惨事”层出不穷&#xff0c;许多网友都在网上比惨&#xff0c;今天的故事主角是一位程序员。这位程序员哀叹&#xff1a;有比我更惨的吗&#xff1f;工作6年攒了200多万&#xff0c;凑了300万首付&#xff0c;在杭州未来科技城高位接盘买了600万的…

JavaScript普通函数与箭头函数有怎样的区别?

比较点 普通函数 箭头函数 具体案例 简写 / 箭头函数如果没有参数&#xff0c;同时函数体的返回值只有一句&#xff0c;则{}和return都可以省略。 1、函数简写 this指向 this总是指向调用它的对象&#xff0c;如果作为构造函数&#xff0c;它指向创建的对象实例 箭头…

【MySQL】深入理解数据库事务

文章目录优秀借鉴1、事务由来2、何为ACID2.1、Atomicity原子性2.2、Consistency一致性2.3、Isolation隔离性2.4、Durability持久性3、聊回事务3.1、概念3.2、语法3.2.1、开启事务3.2.2、提交事务3.2.3、回滚事务4、隔离级别4.1、引入4.2、并发问题4.2.1、脏读4.2.2、不可重复读…

Spring Cloud alibaba 使用Nacos配置中心

依赖管理 Spring Cloud Alibaba BOM 包含了它所使用的所有依赖的版本 请将下面的 BOM 添加到 pom.xml 中的 部分。 这将允许我们省略任何Maven依赖项的版本&#xff0c;而是将版本控制委派给BOM。 <dependencyManagement><dependencies><dependency><gr…

2022年底了,你们公司还好吗?我这里不太好

以下这些也是和几个朋友聊天的时候慢慢聊出来的&#xff0c;不一定真实啊&#xff0c;当做大家开发累了以后的一点调味剂吧 一、宇宙厂 1.宇宙人员成本优化计划&#xff0c;随着各个业务确认了优化目标&#xff0c;将在接下来陆续开展。 某中台确认了指标&#xff0c;将在“在职…

力扣刷题记录——121买卖股票的最佳时机 和125. 验证回文串

本专栏主要记录力扣的刷题记录&#xff0c;备战蓝桥杯&#xff0c;供复盘和优化算法使用&#xff0c;也希望给大家带来帮助&#xff0c;博主是算法小白&#xff0c;希望各位大佬不要见笑&#xff0c;今天要分享的是——《121.买卖股票的最佳时机和125. 验证回文串》。 目录 12…

QT学习 控件(一):按钮类

文章目录Qt控件&#xff1a;按钮QPushButtonQToolButtonQCommandLinkButtonQRadioButtonQCheckBoxQButtonGroupQt控件&#xff1a;按钮 QAbstractButton的信号&#xff1a; void clicked(bool checked false) &#xff1a; 是否选中按钮void pressed()&#xff1a; 点击按钮v…

嵌入式C语言面向对象编程 --- 继承

上一篇文章主要讲述了 C 语言面向对象编程 – 封装的简单概念和实现,本篇文章继续来讨论一下,如何使用 C 语言实现面向对象编程的另一个重要特性:继承。 继承就是基于一个已有的类(一般称作父类或基类),再去重新声明或创建一个新的类,这个类可以称为子类或派生类。子类…

ES文件浏览器 如何提取盒子已安装(内置)软件APK 教程

ES文件浏览器( ES File Explorer)是一款功能强大免费的本地和网络文件管理器。 主要功能&#xff1a;文件管理&#xff1a;多种视图列表和排序方式&#xff0c;查看并打开各类文件&#xff0c;在本地SD卡、局域网、OTG设备之间任意传输文件。多选、复制、粘帖、剪贴板、查看属性…

海豚dolphinscheduler 通过shell 调用.sql文件 传参

1. 准备sql文件 1.1 资源中心--创建文件 1.2 文件格式选择 sql, 文件内容 填要执行的sql内容 1.3 点击创建保存 2.shell调用.sql文件 2.1 拖拽一个shell 节点 2.2 编辑shell节点 hive -e&#xff1a;后面跟hivesql字符串 例如&#xff1a;hive -e "select * from studen…

【十天成为红帽工程师】第七天 Ansible的模块使用

目录 一、ansible的配置文件和清单文件 二、ansible的模块 三、实际操作命令 一、ansible的配置文件和清单文件 &#xff08;一&#xff09;看ansible的配置文件 1、命令&#xff1a;ansible --version 2、一般的配置文件是&#xff1a;/etc/ansible/ansible.cfg PS&am…

查看磁盘分区

在Window上查看磁盘分区&#xff0c;既可以使用diskpart list vol命令&#xff0c;也可以使用diskmgmt.msc命令&#xff0c;下面分别介绍这2种命令查看方式。 1、diskpart方式 按WinR --> 输入: cmd --> diskpart --> list vol&#xff0c;如下图所示: ## 按WinR, …