Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.
ndh2k12_public:web:workerz [2012/07/01 22:27] Spl3en |
ndh2k12_public:web:workerz [2017/04/09 15:33] (Version actuelle) |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ==== Description de l'épreuve ==== | + | ======= Description de l'épreuve ======= |
Lors du lancement de l'épreuve, on se confronte à une page nous demandant d'entrer un mot de passe de 16 caractères. | Lors du lancement de l'épreuve, on se confronte à une page nous demandant d'entrer un mot de passe de 16 caractères. | ||
{{http://i.imgur.com/FUPLN.png}} | {{http://i.imgur.com/FUPLN.png}} | ||
+ | |||
+ | ===== Solution 1 ===== | ||
Après étude de la source, l'épreuve se décompose en 3 parties : | Après étude de la source, l'épreuve se décompose en 3 parties : | ||
Ligne 73: | Ligne 76: | ||
</code> | </code> | ||
- | Le script ci dessus inclue le script 'p.js', qui est en réalité un interpréteur Python en Javascript ! | + | Le script ci dessus inclut le script 'p.js', qui est en réalité un interpréteur Python en Javascript ! |
La résolution de cette partie reste similaire à celle précédente, simplement dans un langage différent, qui va ensuite être interprété par Javascript. | La résolution de cette partie reste similaire à celle précédente, simplement dans un langage différent, qui va ensuite être interprété par Javascript. | ||
Ligne 105: | Ligne 108: | ||
</code> | </code> | ||
- | Après l'interpréteur Python en Javascript, voici [[https://github.com/kripken/emscripten/wiki|Emscripten]], qui permet de compiler du code C en Javascript qui sera interprétée par une VM. | + | Après l'interpréteur Python en Javascript, voici [[https://github.com/kripken/emscripten/wiki|Emscripten]], qui permet d'interprêter du bytecode LLVM (généré à partir d'un code C) et le transformer en Javascript. |
Voici la fonction chargée de la vérification de nos derniers caractères : | Voici la fonction chargée de la vérification de nos derniers caractères : | ||
Ligne 397: | Ligne 400: | ||
</code> | </code> | ||
- | On résoud ça en faisant x = (57 << 9 / 666). | + | On résoud ça en faisant <code>x = round(57 << 9 / 666)</code> |
On obtient : x = 44, soit x = ',' | On obtient : x = 44, soit x = ',' | ||
Ligne 407: | Ligne 410: | ||
- | Et un flag de plus, avec un prime un poney-megusta ! | + | Et un flag de plus, avec en prime un joli poney-megusta ! :) |
{{http://i.imgur.com/JNeHj.png}} | {{http://i.imgur.com/JNeHj.png}} | ||
+ | |||
+ | |||
+ | ===== Solution 2 ===== | ||
+ | |||
+ | === Pré requis === | ||
+ | |||
+ | Avoir récupéré en local les js + les images et le html (Avec par exemple un wget -r) | ||
+ | |||
+ | === Investigation === | ||
+ | |||
+ | On grep « D E N I ED » car il s’affiche quand le mot de passe est pas bon. | ||
+ | Le fichier Kode.js sort du grep. | ||
+ | Un petit coup d’œil et on obtient le code suivant: | ||
+ | |||
+ | {{http://i.imgur.com/vkaWt.png}} | ||
+ | |||
+ | Il suffit alors d’ajouter la fonction pwnie(pass) dans le else comment ceci: | ||
+ | |||
+ | {{http://i.imgur.com/ba5V8.png}} | ||
+ | |||
+ | |||
+ | Et c’est gagné ! | ||
+ | |||