Principe:
Exploiter manuellement des SQL injections, y compris en bypassant le 'WAF', pour récupérer des informations constituant le flag
Le challenge


Comme on nous demande un flag composé de nombreux morceaux, on prendra soin de bien copier/coller chaque morceau que l'on trouvera (ainsi que les payloads SQL)
Le site

Les noms nous disent déjà qu'il s'agira de SQL injection: OR, UNION et WHERE (filtres)
Le challenge ne s'est pas embêté à nous proposer un faux-site dans lequel une aurait dû trouver nous-même quel champ avait une SQLi :D Ca nous fera gagner du temps
Les règles du CTF demandent de ne pas utiliser SQLmap, donc, on va le faire à la mano (bon, en situation réelle, franchement, y'a pas à s'embêter autant utiliser SQLmap direct
OR

Pourquoi # x ? Simplement car certains SGDB m'ont déjà causé des problèmes avec les commentiares:
si on se contente de #, alors la query serveur devient ' OR 1 #' le reste de la query
et comme la # n'est pas suivie d'un espace, le SGDB crache une erreur de syntaxe.
D'où un espace après la dièse, suivi d'un x
Le x derrière la # et l'espace est obligatoire car sans cela, la valeur de l'input sera sans doute trimmed: ' OR 1 #[espace] tout seul sera interprété comme ' OR 1 # par le serveur (qui aura supprimé l'espace, si le navigateur ne l'a pas déjà fait), et le problème précédent se posera

404CTF{0145769456} et 404CTF{21 rue des kiwis}
UNION OR

' UNION SELECT 1,2 # x

cooperatives cooperative
cooperatives pseudo
Users id
Users nom
Users prenom

404CTF{Vereux} et 404CTF{UnGorfou}
Filtres

Vous trouverez des cheat sheets du genre sur internet pour les SQL injections, je vous laisse chercher
et j'ai la flemme de le faire maintenant
. Explorez aussi les "SQL injection WAF bypass"
(Web Application Firewall) car ce genre de filtre est souvent utilisé par ces "protections"
mises devant le serveur web
Le dernier bloc
Je me suis alors gratté la tête un moment: on attend 7 informations, on en obtient 2 à chaque section, et il y a 3 sections. On n'a donc que 6 informations! Où peuvent être les deux dernières? En cherchant, je n'ai trouvé aucun lien caché (CSS/sources HTML) donc, j'en ai déduis qu'une des sections pouvait encore être exploitée. J'ai fini par trouver laquelle: la 3e (ce qui était le plus probable, puisque c'est la plus "protégée" et aboutie)


Requête:
'/**/UNION/**/SE%6CEcT/**/TABLE_NAME,COLUMN_NAME,3/**/FROM/**/information_schema.columns/**/#/**/x
Résultats:
Password id 3
Password mdp 3
Rdv code 3
Rdv dateRdv 3
Rdv heureRdv 3
Je n'ai jamais vu, en pratique, un site web avec plusieurs users SQL et différents droits. En revanche, c'est une bonne pratique si le site est composé de plusieurs choses, comme un jeu avec un forum et un tchat (un user pour chacun de ces trois composants est alors pertinent)
N'oubliez pas, en situation réelle, de restreindre au minimum les droits du user SQL. Et n'utilisez pas le root ou l'admin pour l'opération du site. Réservez-le aux déploiements.

Flag
404CTF{0145769456}
404CTF{21 rue des kiwis}
404CTF{Vereux}
404CTF{UnGorfou}
404CTF{GorfousAuPouvoir}
404CTF{2022-07-14}
404CTF{01hDuMatin}
404CTF{VereuxUnGorfou014576945621ruedeskiwis2022-07-1401hDuMatinGorfousAuPouvoir}
Je me suis relu 3 fois avant de soumettre le flag, n'étant pas sûr d'avoir les bonnes infos au bon endroit, mais il est passé du premier coup!