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

🍬 博主介绍

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

一、什么是 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注入代码审计案例

  • 61
    点赞
  • 142
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论
Java XXE(XML External Entity)漏洞是一种常见的Web漏洞,攻击者可以利用它来读取本地文件、发起远程请求等。对于Java应用程序,XXE漏洞通常出现在处理XML输入时,因此在对Java代码进行审计时,需要关注与XML相关的代码。 以下是一些可能的Java XXE代码审计方法: 1. 检查XML解析器配置:在Java中,XML解析器可以通过不同的方式进行配置,如使用JAXP(Java API for XML Processing)或SAX(Simple API for XML)。检查解析器的配置是否允许外部实体、是否设置了解析器属性以防止XXE攻击等。 2. 检查XML输入处理:检查代码中是否使用了不安全的XML输入处理方法,如DocumentBuilderFactory、SAXParser等,是否使用了不安全的XML处理API,如Xerces、dom4j等。同时,还要注意代码中是否对输入进行了充分的验证和过滤,以防止攻击者利用XXE漏洞进行注入攻击。 3. 检查文件读取操作:在Java中,攻击者可以通过XXE漏洞读取本地文件,因此需要注意代码中是否存在不安全的文件读取操作,如FileReader、FileInputStream等。同时,还要注意代码中是否对读取文件的路径进行了充分的验证和过滤,以防止攻击者读取敏感文件。 4. 检查网络请求操作:攻击者可以通过XXE漏洞发起网络请求,因此需要注意代码中是否存在不安全的网络请求操作,如URLConnection、HttpClient等。同时,还要注意代码中是否对请求的URL进行了充分的验证和过滤,以防止攻击者发起恶意请求。 总之,在Java代码审计中,需要重点关注与XML相关的代码,并进行充分的验证和过滤,以防止XXE漏洞等Web漏洞的攻击。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_PowerShell

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值