PostgreSQL injection
Last updated
Last updated
Si vous êtes intéressé par une carrière en piratage et pirater l'impiratable - nous recrutons ! (maîtrise du polonais écrit et parlé requise).
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
Le module PostgreSQL dblink
offre des capacités pour se connecter à d'autres instances PostgreSQL et exécuter des connexions TCP. Ces fonctionnalités, combinées à la fonctionnalité COPY FROM
, permettent des actions telles que l'élévation de privilèges, le balayage de ports et la capture de la réponse au défi NTLM. Pour des méthodes détaillées sur l'exécution de ces attaques, consultez comment effectuer ces attaques.
Vous pouvez lire cet exemple pour voir un exemple de CTF de comment charger des données à l'intérieur de grands objets et ensuite exfiltrer le contenu des grands objets à l'intérieur du nom d'utilisateur de la fonction dblink_connect
.
Consultez comment compromettre l'hôte et escalader les privilèges à partir de PostgreSQL dans :
La manipulation de chaînes pourrait vous aider à contourner les WAF ou d'autres restrictions. Sur cette page vous pouvez trouver quelques fonctions de chaînes utiles.
N'oubliez pas que PostgreSQL prend en charge les requêtes empilées, mais plusieurs applications renverront 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 une injection de temps :
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éverser beaucoup de données en une seule ligne :
database_to_xml
Cette fonction va exporter l'intégralité de la base de données au format XML en une seule ligne (soyez prudent si la base de données est très volumineuse car vous pourriez la mettre en panne ou même votre propre client):
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 :
Si vous ne pouvez pas utiliser de guillemets pour votre charge utile, vous pouvez contourner cela 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. Cela ne fonctionne pas pour toutes les instructions SQL):
Ou avec $
. Ces requêtes retournent les mêmes résultats :
Si vous êtes intéressé par une carrière en piratage et pirater l'impossible - nous recrutons ! (polonais écrit et parlé couramment requis).