La boutique officielle
404CTF{Sh0uld_Th1s_B3_a_CVE_?}
Dernière mise à jour
Cet article vous a-t-il Γ©tΓ© utile ?
404CTF{Sh0uld_Th1s_B3_a_CVE_?}
Dernière mise à jour
Cet article vous a-t-il Γ©tΓ© utile ?
CatΓ©gorie: Web DifficultΓ©: difficile Flag: -
Enfin ! Les billets pour la CΓ©rΓ©monie de ClΓ΄ture des 404 Travaux du Hacker sont en vente sur la boutique officielle de l'Γ©vΓ©nement. Le prix est peut-Γͺtre un peu haut, mais tant pis. Vous avez dΓ©jΓ fait l'acquisition de l'une de ces Γ©tranges mascottes en forme de... bref ! Tout Γ§a pour dire que ce n'est pas l'argent qui compte : une occasion comme Γ§a, il ne faut pas la louper ! Allez, dΓ©pΓͺchez-vous, j'ai le sentiment que vous n'Γͺtes pas le seul Γ Γͺtre intΓ©ressΓ©.
Connexion:
Ce challenge tourne sur un docker et n'est pas disponible
La première étape est de visiter un peu tout le site avec un outil comme Burp afin de le cartographier.
On peut se mettre en liste d'attente dans l'onglet Boutique en rentrant simplement un nom
Ce qui va nous crΓ©er un token.
Dans ce token, on y trouve notre nom, notre position dans la file et la date Γ laquelle nous nous sommes enregistrΓ©s.
Avec un peu de recherche ou un outil comme Wappalyzer, on voit qu'il s'agit du framework node Astro.
Dans l'onglet Proxy/HTTP history de Burp, on peut trouver des requΓͺtes assez spΓ©ciales concernant les images du site. Elles sont rΓ©cupΓ©rΓ©es sur le chemin /_image
en donnant au paramΓ¨tre href ce qui semble Γͺtre le chemin vers l'image sur le serveur directement.
Pour faciliter l'Γ©tude des requΓͺtes, la modification et le rejoue, on va utiliser BurpSuite. Γa nous permettra de voir toutes les requΓͺtes passant par le navigateur et les modifier si nΓ©cessaire.
On va tester la LFI en allant chercher /etc/passwd
dans un premier temps. Pour Γ§a on remonte suffisamment dans l'arborescence et on tente
On reΓ§oit Server Error: Error: Input buffer contains unsupported image format
. Il faut ajouter le paramètre f
, qui correspond au format de sortie, comme dans la requΓͺte vue dans l'historique.
Seulement, pour récupérer le fichier sans avoir l'erreur, il faut absolument mettre ce paramètre à svg
On peut trouver cette valeur en cherchant dans le github d'Astro et en testant toutes les valeurs possibles.
De là , on a accès au projet build. Dans le fichier, on trouve différentes choses intéressantes, notamment une map avec tout un tas de chemins qui semblent correspondre aux pages accessibles sur le site.
Γ chaque page, on a une variable associΓ©e nommΓ©e _pageX
qui est en fait un import d'un fichier .mjs
. On en déduit que ces fichiers correspondent à la logique de la page (à son code source grossièrement).
On dΓ©couvre le chemin d'API /api/shop/ticket
. De lΓ , on peut Γ©galement rΓ©cupΓ©rer son code source en utilisant le mΓͺme chemin que sa variable associΓ©e _page6
C'est-Γ -dire /dist/server/chunks/ticket_DhEqCkFa.mjs
On voit un import sur /dist/server/chunks/pages/ticket_B7THZvNZ.mjs
Et voici le code rΓ©cupΓ©rΓ© !
Le flag est dans process.env.FLAG
et pour le rΓ©cupΓ©rer, il faut que locals.customer.position
soit Γ©gal Γ 0 afin de tΓ©lΓ©charger un PDF le contenant.
En continuant les recherches dans les autres fichiers, notamment /dist/server/chunks/enqueue_Cyp9pFhK.mjs
On voit que la crΓ©ation de notre token se passe dans le fichier /dist/server/chunks/pages/enqueue_Csagi6Et.mjs
On vient de rΓ©cupΓ©rer la clΓ© privΓ©e servant Γ crΓ©er les tokens, on peut maintenant en gΓ©nΓ©rer des valides Γ volontΓ©.
CrΓ©ons un projet Node spΓ©cialement pour forger un token avec la position 0
Dans un fichier index.js
on y met la mΓͺme fonction que celle du site, puis on l'appelle et on affiche le rΓ©sultat.
DΓ©sormais, on peut utiliser ce token. Pour une question purement visuelle, j'ai utilisΓ© Postman pour faire la requΓͺte
Sur le site d', on apprend que lorsque l'ont build le projet, le fichier d'entrΓ©e est ./dist/server/entry.mjs
, on peut donc rΓ©cupΓ©rer celui-ci en remontant dans l'arborescence.