Fiché JS (Web) - 404CTF 2022

Fiché JS (Web) - 404CTF 2022

Fichiers du challenge Principe:
Derouler l'exécution d'un JS pas à pas dans une apge web pour trouver un code PIN menant à une page cachée contenant le flag

Le challenge

Le challenge nous demande de récupérer les fichiers hébergés sur le site (dispos ici)

Explorons

En allant sur le site donné en lien, on nous demande d'entrer un PIN
Dans la console (F12), on retrouve 3 fichiers JS: deux frameworks (jquery et moment) et un autre, contenant sans doute des infos utiles

On cherche la solution dans du code JS car si on entre un PIN, aucune requête Web n'apparait dans le panneau "Network/Réseau", ce qui signifie que la vérification du PIN est faite côté client. Comme elle n'est pas directement faite en HTML (via pattern par exemple), c'est qu'elle l'est en JS (d'autant plus que le nom du challenge nous l'indique aussi)

Alors, dans un CTF, ok, vous pouvez faire un challenge d'intro basé sur des vérifications de sécurité (PIN) côté client. Mais, vraiment, ne faites juste jamais ça en vrai… Non parce que le challenge a beau dire que le site est vieux de 12 ans, ce sont encore des pratiques que je vois aujourd'hui, même sur des projets tout neuf!

Ce JS contient un peu de code…
Et ce qui ressemblerait presque à une citation du Joker!

C'est donc la preuve objective et totalement sérieuse que le JS est maléfique!

Du reverse?

Via un breakpoint dans cette fonction-Joker, on voit que l'exécution passe par là, il faudra dont peut-être dé-obfusquer tout ça
On peut utiliser NodeJS, en altérant un peu la fonction, pour essayer déjà d'avoir un code source plus clair

NodeJS nous renvoie ici à nouveau un autre code source, qui sera sans doute passé dans un eval. Ce code, utilisant uniquement des []!+() est un classique (dont j'ai oublié le nom)

Nan, faisons simple

Une telle obfuscation, pour un challenge d'intro, c'est pas crédible, alors, on change de stratégie On va plutôt mettre un point d'arrêt dans le code lisible

On place un point d'arrêt dans le handler de l'event click du bouton de soumission, et on entre un PIN: l'exécution s'arrête sur ce breakpoint
En allant dans la fonction (step into) et en faisant un peu défiler, on arrive sur ce code

Ce code se trouve dans "SOURCE" (titre de l'onglet): il s'agit donc certainement d'un code exécuté via un eval ou une commande similaire. On ne le retrouvera pas en clair dans le index.js mais on a ici tout ce qu'il nous faut: on a le PIN 240801300505131273100172 (tiens, lui, je ne l'aurai pas trouvé au pif, comme dans Frida-me (Reverse) ) et une URL cachée ./nob03y_w1lL_Ev3r_fiNd_th15_PaGe.html

Flag

On va sur cette URL (ou on entre le PIN trouvé) et on a le flag:
404CTF{Haha_J3_5ui$_f4N_dObfu5c4tIoN_en_JS}

J'ai cherché s'il y avait un flag caché ou une astuce dans la liste des noms, mais je n'ai rien trouvé

Fichiers du challenge

↩ Retour à la liste des challenges

⇇ Retour à l'accueil