Présentation d’un write-up de résolution du challenge « Web – Basique Simple Simple Basique » de la BreizhCTF 2018.
Durant la nuit du 20/04/2018 se déroulait la BreizhCTF 2018 sous forme d’un CTF Jeopardy. Ayant eu l’occasion et le temps d’y participer avec quelques collègues et amis, voici un write-up de résolution d’un des challenges.
- Catégorie : Web
- Nom : Basique Simple Simple Basique
- Description : Vous n’avez pas les bases!
- URL : http://148.60.87.243:49915
- Points : 100
tl;dr; : Simuler une connexion locale via le header HTTP X-Forwarded-For et générer un cookie de validation true:md5(‘true’).
Ce challenge, en référence directe avec la chanson du moment d’Orelsan, proposait un service web avec plusieurs conditions.
Tout d’abord, une connexion simple nous indiquait que nous ne provenions pas de « localhost » :
L’ajout du header HTTP « X-Forwarded-For: 127.0.0.1 » pour simuler une traversée d’un proxy suffisait pour contourner cette première étape :
Un formulaire d’authentification POST à destination de la page elle-même devient visible, nous demandant un « username » et « password ». De plus, quelques extraits de la chanson sus-nommée sont également affichés.
On tente un peu de guessing voire même une attaque par wordlist sur la base des termes relatifs à Orelsan (tous les mots composant les paroles de la chanson). Ces requêtes POST révèlent d’autres paroles, mais aucun résultats probants…
Simple, Basique, serait-ce une authentification « Basic » à réaliser sur la base de cette même wordlist créée pour l’occasion ?
Négatif, pas de résultats valides…
Revenons-en aux « bases », ça doit être « simple » après tout. Y aurait-il une histoire de changement de base ? Base 10, 16, 32, 64 ? Où envoyer une telle valeur et « laquelle » surtout ?
Avant de creuser d’autres pistes, regardons de nouveau la toute première requête avec le « X-Forwarded-For » : elle nous retourne un cookie.
Set-Cookie: login=ZmFsc2U2ODkzNGEzZTk0NTVmYTcyNDIwMjM3ZWIwNTkwMjMyNw%3D%3D
Ce cookie « login » dispose d’une valeur URL-encodée et en base64 correspondant à :
false68934a3e9455fa72420237eb05902327
« false » puis le md5(« false »). Générons donc « true » puis le md5 de « true » :
trueb326b5062b2f0e69046810717534cb09 dHJ1ZWIzMjZiNTA2MmIyZjBlNjkwNDY4MTA3MTc1MzRjYjA5
Renvoyons ce cookie dans la requête (en GET !) :
Oh! Une redirection 302 vers une page cachée :
Flag :
BZHCTF{Ok_You_G0t_m3_It_was_T0o_eASy_4_YoU}
Chapeau à Estelle, Martin, Charles et Timothée pour celui-ci ?
Merci à toute l’équipe de la BreizhCTF pour l’organisation et la qualité des challenges !
Salutations à toute l’équipe, on remet ça quand vous voulez ? // Gr3etZ