Java代码审计——H2 Rce CVE-2021-42392

0x00 前言

H2数据库是一个开源的关系型数据库。
H2是一个采用java语言编写的嵌入式数据库引擎,只是一个类库(即只有一个 jar 文件),可以直接嵌入到应用项目中,不受平台的限制。

下面这个是CVE信息
在这里插入图片描述

0x01 漏洞复现

首先需要下载一个H2,然后直接启动,启动页面如下
在这里插入图片描述

这里我们使用典型的javax.naming.InitialContext JNDI进行测试:具体的JNDI可参考Java代码审计——Fastjson < 24 反序列

在这里插入图片描述
点击连接或者测试连接之后即可触发。
在这里插入图片描述

0x02 调用链

  • doGet
    • processReques
      • process
        • login
          • getConnection

首先来看数据包:
在这里插入图片描述
根据数据包可以从拦截器开始分析:

在这里插入图片描述
这里跟进到processReques
在这里插入图片描述

可以看到后缀.do的会先走到这里
在这里插入图片描述
接着根据login.do走到login方法
在这里插入图片描述
在login 方法中会调用getConnection
在这里插入图片描述
接着会调用getConnection
在这里插入图片描述
接着这里可以看到首先会拿到参数1的类,然后调用lookup方法从而触发JNDI。
在这里插入图片描述

以上

知识补充

H2

H2数据库是一个纯Java开发的关系型数据库管理系统(RDBMS),它支持SQL和JDBC标准,具有高性能、小巧、易于使用和部署等特点。同时,它还支持嵌入式、内存和分布式模式,可以满足不同场景的需求。

H2数据库的特点:

1.高性能:H2使用纯Java开发,在性能上比其他Java数据库更有优势,同时支持多种存储引擎,如内存、磁盘等。

2.小巧:H2的安装包非常小,可以轻松部署,也不需要安装复杂的数据库服务,只要安装JRE即可。

3.易于使用:H2具有简单易用的图形界面,支持丰富的标准SQL和JDBC接口,并提供详细的文档和示例,可以快速上手。

4.部署灵活:H2支持嵌入式、内存和分布式模式,可满足不同应用场景的需求,例如Web应用、桌面应用等。

H2数据库是一款小巧、高性能、易于使用和部署的Java数据库,非常适合中小型应用的开发和部署。

InitialContext JNDI

InitialContext是Java中的一个类,它允许应用程序通过Java命名和目录接口(JNDI)来访问命名和目录服务。JNDI是Java的一个标准,为应用程序提供了一个统一的接口来访问命名和目录服务,例如LDAP(轻型目录访问协议)和DNS(域名系统)。

InitialContext类是JNDI API的入门点,它提供了一个初始上下文来访问命名和目录服务。当应用程序需要访问命名和目录服务时,它调用InitialContext类来获得一个上下文对象。这个上下文对象可以用来查找和绑定对象,以及执行其他JNDI操作。

使用InitialContext和JNDI,开发人员可以很容易地将应用程序连接到现有的命名和目录服务,从而简化了应用程序的开发和维护工作。

processRequest

processRequest 通常是指一个函数或方法,它接受来自客户端的请求并对其进行处理。这个函数通常会检查请求的有效性,解析请求中的参数,调用适当的处理程序或逻辑来生成响应,然后返回响应给客户端。在 Web 开发中,processRequest 函数通常是在服务器端的代码中实现的,例如在 ASP.Net 中的 Page 类中的 ProcessRequest 方法中。

H2的数据库优点

H2数据库的优点如下:

  1. 轻量级:H2数据库仅有一个jar文件,非常小巧,适合嵌入式开发。

  2. 高性能:H2数据库支持并发,具有优异的性能表现,响应速度很快。

  3. 可移植性:H2数据库不仅可以在Java平台上使用,还可以在Windows、Linux等操作系统上使用。

  4. 开源:H2数据库是免费的开源软件,对于一些小型项目或者个人开发者来说,减小了成本开支。

  5. 支持多种数据库操作:H2数据库可以支持多种数据库操作方式,如SQL、JDBC、ODBC、Hibernate等,且支持多种数据存储格式,如CSV、Excel等。

  6. 支持多种模式:H2数据库支持多种模式,可以根据不同的业务需求进行配置。例如:In-Memory模式、Embedded模式等。

  7. 可扩展性:H2数据库具有良好的可扩展性,可以根据具体业务需求进行自定义开发。

总的来说,H2数据库具有小巧、高性能、可移植性、多数据操作方式、多种模式、可扩展性等优点,适合于小型项目或个人开发者使用。

Java代码审计学习方法

以下是Java代码审计学习方法的一些建议:

  1. 了解Java编程基础:在开始进行Java代码审计之前,需要掌握Java编程的基础知识,了解Java的语法,数据类型,控制流程等基本概念。

  2. 学习安全知识:了解常见的Web攻击类型,例如SQL注入、跨站脚本攻击(XSS)和跨站请求伪造(CSRF)等。

  3. 学习常见漏洞:学习已知的安全漏洞,理解攻击者利用这些漏洞的方法,例如未经验证的输入、代码注入和文件包含漏洞等。

  4. 寻找样例代码:一些开源的应用程序或框架可以用来学习Java代码审计,例如WordPress、Joomla和Struts等。通过分析这些代码,可以了解常见的安全问题和漏洞。

  5. 学习使用辅助工具:使用一些代码审计工具,例如FindBugs、SonarQube和Parasoft等,可以帮助发现代码中的错误和漏洞。

  6. 实践漏洞挖掘:通过实践,寻找一些样例代码中的漏洞,例如通过手动构造攻击向量,测试应用程序的安全性。

  7. 学习修复漏洞:理解漏洞修复的方法,例如安装补丁、更新库或修复代码中的错误。学习如何编写安全的代码,通过遵循安全编码实践来避免漏洞的产生。

Java代码审计需要对Java编程基础、Web安全、常见漏洞和修复方法等知识有充分的了解。通过实践和使用工具,可以提高对代码中漏洞的发现和修复能力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

王嘟嘟_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值