* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você 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)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.
O PostgreSQL foi projetado para ser facilmente extensível. Por esse motivo, as extensões carregadas no banco de dados podem funcionar como recursos integrados.\
As extensões são módulos que fornecem funções, operadores ou tipos extras. São bibliotecas escritas em C.\
A partir do PostgreSQL > 8.1, as bibliotecas de extensão devem ser compiladas com um cabeçalho especial ou o PostgreSQL se recusará a executá-las.
Além disso, tenha em mente que **se você não sabe como** [**fazer upload de arquivos para a vítima abusando do PostgreSQL, você deve ler este post.**](big-binary-files-upload-postgresql.md)
O processo para executar comandos do sistema a partir do PostgreSQL 8.1 e anteriores é direto e bem documentado ([módulo Metasploit](https://www.rapid7.com/db/modules/exploit/linux/postgres/postgres\_payload)):
> Para garantir que um arquivo de objeto carregado dinamicamente não seja carregado em um servidor incompatível, o PostgreSQL verifica se o arquivo contém um "bloco mágico" com o conteúdo apropriado. Isso permite que o servidor detecte incompatibilidades óbvias, como código compilado para uma versão principal diferente do PostgreSQL. Um bloco mágico é necessário a partir do PostgreSQL 8.2. Para incluir um bloco mágico, escreva isso em um (e apenas um) dos arquivos de origem do módulo, depois de ter incluído o cabeçalho fmgr.h:
Portanto, para versões do PostgreSQL desde 8.2, um invasor precisa aproveitar uma biblioteca já presente no sistema ou fazer upload de sua própria biblioteca, que foi compilada contra a versão principal correta do PostgreSQL e inclui esse bloco mágico.
Você pode encontrar essa **biblioteca pré-compilada** para várias versões diferentes do PostgreSQL e até mesmo pode **automatizar esse processo** (se tiver acesso ao PostgreSQL) com:
Para mais informações, leia: [https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/](https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/)
Observe que neste caso o **código malicioso está dentro da função DllMain**. Isso significa que, neste caso, não é necessário executar a função carregada no postgresql, apenas **carregar a DLL** irá **executar** o shell reverso:
Nas **últimas versões** do PostgreSQL, o `superusuário`**não** pode mais **carregar** um arquivo de biblioteca compartilhada de **qualquer lugar** além de `C:\Program Files\PostgreSQL\11\lib` no Windows ou `/var/lib/postgresql/11/lib` no \*nix. Além disso, este caminho **não é gravável** pelas contas NETWORK\_SERVICE ou postgres.
No entanto, um `superusuário` autenticado do banco de dados **pode gravar** arquivos binários no sistema de arquivos usando "objetos grandes" e, é claro, gravar no diretório `C:\Program Files\PostgreSQL\11\data`. A razão para isso deve ser clara, para atualizar/criar tabelas no banco de dados.
O problema subjacente é que o operador `CREATE FUNCTION`**permite uma travessia de diretório** para o diretório de dados! Então, essencialmente, um invasor autenticado pode **escrever um arquivo de biblioteca compartilhada no diretório de dados e usar a travessia para carregar a biblioteca compartilhada**. Isso significa que um invasor pode obter execução de código nativo e, como tal, executar código arbitrário.
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)**.**\
Nessa 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_).\
Na mesma página, foi fornecido **um exploit para automatizar** essa técnica:
* Você trabalha em uma **empresa de cibersegurança**? Você 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)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [repositório hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.