Big Binary Files Upload (PostgreSQL)

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert)!

HackTricks का समर्थन करने के अन्य तरीके:

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

PostgreSQL एक संरचना प्रदान करता है जिसे **बड़े ऑब्ज

split -b 2048 your_file # Creates 2KB sized files

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

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 डेटा की आवश्यकता होगी, जबकि बेस64 एन्कोडेड फ़ाइलें सूत्र ceil(n / 3) * 4 का पालन करती हैं।

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

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

lo_creat और Base64 का उपयोग

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

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

नियंत्रण की ठीक जरूरत पड़ने पर, जैसे कि ब्लाइंड SQL इन्जेक्शन का उपयोग करते समय, lo_create को एक निर्दिष्ट LOID को निर्दिष्ट करने के लिए पसंद किया जाता है।

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

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'));
विरासत और संभावित रूप से उपयोग के बाद बड़े ऑब्जेक्ट को निर्यात और हटाने के लिए:
SELECT lo_export(173454, '/tmp/your_file');
SELECT lo_unlink(173454);  -- Deletes the specified large object

lo_import और हेक्स का उपयोग

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

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

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

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;

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

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

सीमाएँ

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

Last updated