代码审计之 XXE漏洞场景,及实战讲解!

admin 2025年6月9日21:48:13评论15 views字数 2547阅读8分29秒阅读模式
代码审计之 XXE漏洞场景,及实战讲解!

声明:文章涉及网络安全技术仅作为学习,从事非法活动与作者无关!

本篇为代码审计系列XXE漏洞理论篇第六篇,看完本篇你将掌握关于XXE漏洞的代码视角原理剖析、基础挖掘漏洞核心能力,看完如有技术错误欢迎评论区指正。

  • 基本概念

    • XML概念

    • DTD概念

    • DOCTYPE概念

  • 业务视角XML代码

  • 漏洞校验XML代码

  • 实战审计案例-JavaMelody组件

XXE漏洞

基本概念

        XML格式使用DTD用来约束其中元素的名称、属性,XML中有DOCTYPE标识。用来标记为外部加载DTD还是内部加载DTD,其中外部加载DTD可能会触发XXE漏洞,使用漏洞进行敏感信息探测。

1.1XML概念

XML (Extensible Markup Language)通俗来讲是一种特殊的数据交互的规范格式,与JSON相似。客户端可以使用使用XML格式数据提交给服务器识别、解析、做进一步业务处理,服务器也可以响应XML格式数据客户端进行响应。以下为XML示例:

代码审计之 XXE漏洞场景,及实战讲解!

1.2DTD概念

DTD(Document Type Definition)是文档类型定义的缩写。它是一种用来定义XML文档结构的文本文件,用于描述XML文档中元素的名称、属性和约束关系。DTD可以帮助浏览器或其他应用程序更好地解析和处理XML文档。以下为DTD文件。

代码审计之 XXE漏洞场景,及实战讲解!

1.3DOCTYPE概念

DOCTYPE是 XML 文件中用于声明 DTD 的语法。它告诉解析器使用哪个 DTD 来验证 XML 文档的合法性。DOCTYPE可以引用内部 DTD 或外部 DTD,其中只有外部DTD才会引发XXE外部实体注入漏洞。

代码审计之 XXE漏洞场景,及实战讲解!
代码审计之 XXE漏洞场景,及实战讲解!

业务视角DEMO代码

DOM和SAX为原生自带的,JDOM、DOM4J和Digester需要引入第三方依赖库,常见的XML解析有以下几种方式

  • DOM解析

  • SAX解析

  • JDOM解析

  • DOM4J解析

  • Digester解析

2.1DOM解析XML流程及Demo代码

  • 创建一个DocumentBuilderFactory对象

  • 创建一个DocumentBuilder对象

  • 通过DocumentBuilder的parse()方法加载XML

  • 遍历name和value节点

代码审计之 XXE漏洞场景,及实战讲解!

2.2SAX解析XML流程及Demo代码

  • 获取SAXParserFactory的实例

  • 获取SAXParser实例

  • 创建一个handler()对象

  • 通过parser的parse()方法来解析XML

代码审计之 XXE漏洞场景,及实战讲解!

 漏洞校验XML代码

Java中的XXE支持sun.net.www.protocol里面的所有协议:http,https,file,ftp,mailto,jar,netdoc。核心使用关键词定位xml解析代码XMLReaderDocumentHelperXMLStreamReaderSAXParserSAXSourceTransformerFactorySAXTransformerFactorySchemaFactoryUnmarshallerXPathExpressionjavax.xml.parsers.DocumentBuilderjavax.xml.parsers.DocumentBuilderFactory    XXE漏洞限制:为了修复XXE漏洞并提高代码的安全性,可以采取以下措施:

  • 代码层面禁用外部实体解析

  • 使用安全的 XML 解析库

  • SpringBoot使用安全配置

  • 使用白名单限制外部实体加载内容

3.1代码层面禁用外部实体解析

代码审计之 XXE漏洞场景,及实战讲解!

3.2使用安全的 XML 解析库

OWASP ESAPI或JAXB。使用这些库可以降低 XXE 风险

代码审计之 XXE漏洞场景,及实战讲解!

JavaMelody实战审计案例

此篇XXE为白盒审计,以JavaMelody1.74.0版本组件部署后从源代码视角到漏洞定位及抓包调试进行讲解。以下XXE审计思路:- 使用XML解析依赖- 未禁用外部实体解析

4.1项目部署

GitHub项目地址:https://github.com/javamelody/javamelody/wiki

代码审计之 XXE漏洞场景,及实战讲解!

查看项目部署说明:POM.xml引入依赖,访问http://localhost:port/monitoring进入监控页面

安装项目

代码审计之 XXE漏洞场景,及实战讲解!

    Idea直接按照步骤操作进行部署即可

代码审计之 XXE漏洞场景,及实战讲解!

    成功启动项目

代码审计之 XXE漏洞场景,及实战讲解!

4.2JavaMelody组件源码分析

组件中涉及两个jar包,其中以Javamelody-spring-boot-starter为配置入口其中Pom.xml引入Javamelody-core作为业务代码,优先分析Javamelody-core。

代码审计之 XXE漏洞场景,及实战讲解!

使用关键字搜索定位Xml使用方法,定位到PayloadNameRequestWrapper.java

代码审计之 XXE漏洞场景,及实战讲解!

234行PayloadNameRequestWrapper类中parseSoapMethodName方法使用XMLInputFactory进行解析Xml文件,直接解析。

代码审计之 XXE漏洞场景,及实战讲解!

需要找到调用接口以及查看是否之前存在XXE防护代码,查看层次结构层层查看

代码审计之 XXE漏洞场景,及实战讲解!

104行PayloadNameRequestWrapper类的initialize方法主要是做了判断,需要HTTP请求头contentType = "application/soap+xml"或者"text/xml"并且"SOAPAction"不为空

代码审计之 XXE漏洞场景,及实战讲解!

跟进getBufferedInputStream()方法,看样子是POST方式请求体Xml的内容

代码审计之 XXE漏洞场景,及实战讲解!

继续查看调用关系MonitoringFilter.java中createRequestWrapper也是在做初始化操作

代码审计之 XXE漏洞场景,及实战讲解!

继续查看调用关系还是在MonitoringFilter.java的doFilter方法,发现重写了doFilter

代码审计之 XXE漏洞场景,及实战讲解!

Javamelody-spring-boot-starter:定义了一个名为monitoringFilter的Spring Bean,用于注册JavaMelody的监控过滤器(MonitoringFilter),看到任意路由都会经过该Filter处理使用1.74.0版本JavaMelody组件的Web应用都可以利用XXE漏洞

代码审计之 XXE漏洞场景,及实战讲解!

4.3漏洞测试

4.3.1开启Web python服务

代码审计之 XXE漏洞场景,及实战讲解!

4.3.2直接构造XXE参数进行成功HTTP加载

代码审计之 XXE漏洞场景,及实战讲解!

4.4漏洞修复

查看javamelody修复记录

代码审计之 XXE漏洞场景,及实战讲解!

END

原文始发于微信公众号(闪石星曜CyberSecurity):代码审计之 XXE漏洞场景,及实战讲解!

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月9日21:48:13
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   代码审计之 XXE漏洞场景,及实战讲解!https://cn-sec.com/archives/4150696.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息