Principe:
Forger un cookie permettant d'usurper le compte de l'administrateur, et bypasser la blacklist avec un padding
Infos (cf menu latéral):
🚩 Flaggué! +993 points gagnés —
💾 Téléchargez les fichiers du challenge
404CTF{m3f13Z_V0Us_D3s_MdP_D4nS_L3s_c00k13s!}
Le challenge
Le site
Reconnaissance
robots.txt, mais rienJ'oublie souvent ce fichier, mais les situations réelles reviennent régulièrement me rappeler qu'il contient plein d'informations utiles (dont, par exemple, des valeurs par défaut trahissant le framework ou le CMS utilisé).
Le "Grand", O'Rilley etc mais rien ne trahis une éventuelle SQLi
Ce n'est pas un JWT, puisqu'il ne démarre pas par eyJ
Cookie
J'essaie souvent d'avoir, dans la moitié droite, la partie "locale" (ou test) et dans la moitié gauche la partie "distante" (ou "prod"). Ca permet de limiter les risques de se mélanger.
Touche "Windows" + une flèche (gauche/droite) permet de mettre la fenêtre sur la moitié correspondante de l'écran
La deuxième commande supprime les retours à la ligne du base64, via tr -d "\n"
Forgot password
Quand un challenge dit qu'un truc est "infaillible", c'est qu'il y a très certainement une faille!
Injection de connexion
; est utilisé comme séparateur dans le cookie, je vide ceux-ci et je tente un login avec un ;
HTTP 500)Casser le hash?
123456), j'essaie de voir ce qu'est le hash du password via John: c'est un SHA512J'avais en tête d'essayer de "casser" le hash du mot de passe admin… et je me suis aperçu que je n'avais pas ce hash! Donc, la piste n'a pas de sens
Tamper cookie
legrand et 123456 puis qu'ensuite, il interprète mon user comme adminIl est courant, dans les systèmes réels, d'avoir ce genre de mauvaise interprétation. Le cas classique concerne les headers HTTP: deux systèmes chaînés peuvent ne pas lire les headers dans le même ordre, et en cas de header présent en double, le premier système ne lira que le premier header, alors que l'autre utilisera le second header. Cela offre des possibilités de bypass
username=dummy;password=dummy;username=admin;password=), j'accès à la page "mot de passe oublié"… et le site me prend pour l'admin!Trouver le hash
Comme on l'a vu pour "Fiché JS", l'absence de traffic lors de la "vérification" du mot de passe implique que celle-ci se fait côté client. On doit donc avoir reçu, dans un fichier quelconque, le mot de passe (hashé ou chiffré éventuellement)
C'est là où je me suis dit "inutile de casser ce hash! le cookie contient le hash! autant l'utiliser directement"
Connexion
Passer la blacklist
=; (clef vide, valeur vide) et poof! Flag!Flag: 404CTF{m3f13Z_V0Us_D3s_MdP_D4nS_L3s_c00k13s!}