tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks का समर्थन करें

PostgreSQL बड़े ऑब्जेक्ट

PostgreSQL एक संरचना प्रदान करता है जिसे बड़े ऑब्जेक्ट कहा जाता है, जो pg_largeobject तालिका के माध्यम से सुलभ है, जो बड़े डेटा प्रकारों को संग्रहीत करने के लिए डिज़ाइन की गई है, जैसे कि चित्र या PDF दस्तावेज़। यह दृष्टिकोण COPY TO फ़ंक्शन की तुलना में फायदेमंद है क्योंकि यह डेटा को फ़ाइल सिस्टम में वापस निर्यात करने की अनुमति देता है, यह सुनिश्चित करते हुए कि मूल फ़ाइल की एक सटीक प्रति बनाए रखी जाती है।

इस तालिका में एक पूर्ण फ़ाइल संग्रहीत करने के लिए, pg_largeobject तालिका में एक ऑब्जेक्ट बनाया जाना चाहिए (जिसे LOID द्वारा पहचाना जाता है), इसके बाद डेटा के टुकड़ों को इस ऑब्जेक्ट में डाला जाना चाहिए, प्रत्येक 2KB आकार का। यह महत्वपूर्ण है कि ये टुकड़े ठीक 2KB आकार के हों (अंतिम टुकड़े के संभावित अपवाद के साथ) ताकि निर्यात फ़ंक्शन सही ढंग से कार्य करे।

अपने बाइनरी डेटा को 2KB टुकड़ों में विभाजित करने के लिए, निम्नलिखित कमांड निष्पादित किए जा सकते हैं:

bash
split -b 2048 your_file # Creates 2KB sized files

प्रत्येक फ़ाइल को Base64 या Hex में एन्कोड करने के लिए, नीचे दिए गए कमांड का उपयोग किया जा सकता है:

bash
base64 -w 0 <Chunk_file> # Encodes in Base64 in one line
xxd -ps -c 99999999999 <Chunk_file> # Encodes in Hex in one line

महत्वपूर्ण: इस प्रक्रिया को स्वचालित करते समय, सुनिश्चित करें कि 2KB के स्पष्ट-टेक्स्ट बाइट्स के टुकड़े भेजें। हेक्स एन्कोडेड फ़ाइलों को आकार में दोगुना होने के कारण प्रति टुकड़ा 4KB डेटा की आवश्यकता होगी, जबकि Base64 एन्कोडेड फ़ाइलें सूत्र ceil(n / 3) * 4 का पालन करती हैं।

बड़े ऑब्जेक्ट्स की सामग्री को डिबगिंग उद्देश्यों के लिए देखा जा सकता है:

sql
select loid, pageno, encode(data, 'escape') from pg_largeobject;

Using lo_creat & Base64

बाइनरी डेटा को स्टोर करने के लिए, सबसे पहले एक LOID बनाया जाता है:

sql
SELECT lo_creat(-1);       -- Creates a new, empty large object
SELECT lo_create(173454);  -- Attempts to create a large object with a specific OID

सटीक नियंत्रण की आवश्यकता वाले स्थितियों में, जैसे कि Blind SQL Injection का शोषण करते समय, lo_create एक निश्चित LOID निर्दिष्ट करने के लिए पसंद किया जाता है।

डेटा के टुकड़े इस प्रकार डाले जा सकते हैं:

sql
INSERT INTO pg_largeobject (loid, pageno, data) VALUES (173454, 0, decode('<B64 chunk1>', 'base64'));
INSERT INTO pg_largeobject (loid, pageno, data) VALUES (173454, 1, decode('<B64 chunk2>', 'base64'));

बड़े ऑब्जेक्ट को निर्यात करने और उपयोग के बाद संभावित रूप से हटाने के लिए:

sql
SELECT lo_export(173454, '/tmp/your_file');
SELECT lo_unlink(173454);  -- Deletes the specified large object

Using lo_import & Hex

lo_import फ़ंक्शन का उपयोग एक बड़े ऑब्जेक्ट के लिए LOID बनाने और निर्दिष्ट करने के लिए किया जा सकता है:

sql
select lo_import('/path/to/file');
select lo_import('/path/to/file', 173454);

ऑब्जेक्ट निर्माण के बाद, प्रति पृष्ठ डेटा डाला जाता है, यह सुनिश्चित करते हुए कि प्रत्येक भाग 2KB से अधिक न हो:

sql
update pg_largeobject set data=decode('<HEX>', 'hex') where loid=173454 and pageno=0;
update pg_largeobject set data=decode('<HEX>', 'hex') where loid=173454 and pageno=1;

प्रक्रिया को पूरा करने के लिए, डेटा को निर्यात किया जाता है और बड़े ऑब्जेक्ट को हटा दिया जाता है:

sql
select lo_export(173454, '/path/to/your_file');
select lo_unlink(173454);  -- Deletes the specified large object

सीमाएँ

यह नोट किया गया है कि बड़े ऑब्जेक्ट्स में ACLs (एक्सेस कंट्रोल लिस्ट) हो सकते हैं, जो आपके उपयोगकर्ता द्वारा बनाए गए ऑब्जेक्ट्स तक पहुंच को प्रतिबंधित कर सकते हैं। हालाँकि, पुराने ऑब्जेक्ट्स जिनमें उदार ACLs हैं, अभी भी सामग्री निकासी के लिए सुलभ हो सकते हैं।

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks का समर्थन करें