tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

PostgreSQL Large Objects

PostgreSQL inatoa muundo unaojulikana kama large objects, inayopatikana kupitia jedwali la pg_largeobject, iliyoundwa kwa ajili ya kuhifadhi aina kubwa za data, kama picha au hati za PDF. Njia hii ina faida zaidi kuliko kazi ya COPY TO kwani inaruhusu kuhamasisha data kurudi kwenye mfumo wa faili, kuhakikisha nakala halisi ya faili asili inahifadhiwa.

Ili kuhifadhi faili kamili ndani ya jedwali hili, kitu kinapaswa kuundwa katika jedwali la pg_largeobject (kinachojulikana kwa LOID), ikifuatiwa na kuingiza vipande vya data, kila kimoja kikiwa na ukubwa wa 2KB, ndani ya kitu hiki. Ni muhimu kwamba vipande hivi viwe na ukubwa wa 2KB (ikiwa na uwezekano wa kutengwa kwa kipande cha mwisho) ili kuhakikisha kazi ya kuhamasisha inafanya kazi ipasavyo.

Ili kugawanya data yako ya binary katika vipande vya 2KB, amri zifuatazo zinaweza kutekelezwa:

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

Ili kuandika kila faili katika Base64 au Hex, amri zilizo hapa chini zinaweza kutumika:

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

Muhimu: Unapofanya mchakato huu kuwa wa kiotomatiki, hakikisha unatumia vipande vya 2KB vya bytes za maandiko safi. Faili zilizohifadhiwa kwa hex zitahitaji 4KB za data kwa kila kipande kutokana na kuongezeka kwa ukubwa, wakati faili zilizohifadhiwa kwa Base64 zinafuata formula ceil(n / 3) * 4.

Maudhui ya vitu vikubwa yanaweza kuangaliwa kwa madhumuni ya urekebishaji kwa kutumia:

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

Kutumia lo_creat & Base64

Ili kuhifadhi data za binary, LOID inaundwa kwanza:

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

Katika hali zinazohitaji udhibiti sahihi, kama vile kutumia Blind SQL Injection, lo_create inapendekezwa kwa ajili ya kubainisha LOID iliyowekwa.

Vipande vya data vinaweza kisha kuingizwa kama ifuatavyo:

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'));

Ili kuhamasisha na huenda kufuta kitu kikubwa baada ya matumizi:

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

Kutumia lo_import & Hex

Kazi ya lo_import inaweza kutumika kuunda na kubainisha LOID kwa kitu kikubwa:

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

Baada ya kuunda kitu, data inaingizwa kwa kila ukurasa, kuhakikisha kila kipande hakipita 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;

Ili kukamilisha mchakato, data inasafirishwa na kitu kikubwa kinafuta:

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

Mipaka

Imepangwa kwamba vitu vikubwa vinaweza kuwa na ACLs (Orodha za Udhibiti wa Ufikiaji), ambayo inaweza kuzuia ufikiaji hata kwa vitu vilivyoundwa na mtumiaji wako. Hata hivyo, vitu vya zamani vyenye ACLs za kuruhusu vinaweza bado kupatikana kwa ajili ya kuhamasisha maudhui.

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks