mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-23 19:43:31 +00:00
89 lines
5.8 KiB
Markdown
89 lines
5.8 KiB
Markdown
<details>
|
|
|
|
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
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-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
|
* **Compartilhe seus truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
|
|
|
</details>
|
|
|
|
### 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 fragmentos de dados, cada um com 2KB de tamanho, neste objeto. É crucial que esses fragmentos tenham exatamente 2KB de tamanho (com a possível exceção do último fragmento) para garantir que a função de exportação seja executada corretamente.
|
|
|
|
Para **dividir seus dados binários** em fragmentos 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 <Chunk_file> # Encodes in Base64 in one line
|
|
xxd -ps -c 99999999999 <Chunk_file> # 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 objetos grandes 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` é preferido 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('<B64 chunk1>', 'base64'));
|
|
INSERT INTO pg_largeobject (loid, pageno, data) VALUES (173454, 1, decode('<B64 chunk2>', '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>', 'hex') where loid=173454 and pageno=0;
|
|
update pg_largeobject set data=decode('<HEX>', 'hex') where loid=173454 and pageno=1;
|
|
```
|
|
Para completar o processo, os dados são exportados e o large object é deletado:
|
|
```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.
|
|
|
|
<details>
|
|
|
|
<summary><strong>Aprenda hacking na AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Outras maneiras de apoiar o HackTricks:
|
|
|
|
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
|
* Adquira o [**swag oficial do 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 do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
|
* **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.
|
|
|
|
</details>
|