Basée sur UNION

Ajouter UNION SELECT dans PostgreSQL pour extraire des données, en gérant sa correspondance stricte des types avec des casts explicites et en lisant les catalogues pg_catalog et information_schema.

1 min de lecturemis à jour le 13 oct. 2026florianamette1 contributeur
Demander à votre assistant (MCP)Modifier sur GitHub

Un UNION SELECT ajoute des lignes choisies par l'attaquant à un résultat renvoyé. PostgreSQL ajoute une subtilité par rapport à MySQL : son système de types est strict, de sorte que chaque colonne du SELECT ajouté doit correspondre au type de la colonne d'origine ou être castée explicitement. Caster tout en text avec ::text (ou sélectionner NULL, qui convient à tout type) contourne les incompatibilités de type.

Le déroulé est le même qu'ailleurs : détecter le nombre de colonnes, trouver une colonne de texte reflétée, puis lire le catalogue et les données à travers elle. PostgreSQL expose l'information de schéma à la fois dans le information_schema SQL-standard et dans le pg_catalog natif, et string_agg() est son équivalent de GROUP_CONCAT pour regrouper de nombreuses lignes dans une seule cellule.

sql
' UNION SELECT NULL,string_agg(table_name,','),NULL FROM information_schema.tables WHERE table_schema='public'-- 

Pages#

Outils#

  • sqlmap : détection et extraction automatisées basées sur UNION.
  • ghauri : alternative rapide avec une forte évasion de WAF.

Références#

  • PostgreSQL Documentation: UNION, type casts, string_agg
  • OWASP Testing Guide: Testing for SQL Injection