Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.
— |
forbiddenbits_2013_naziwar [2017/04/09 15:33] (Version actuelle) |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ===== Nazi War (200) ===== | ||
+ | <code>Let the nazi war begin. | ||
+ | My fuhrer will launch it: nc 88.190.221.116 1337</code> | ||
+ | ==== Overview ==== | ||
+ | On se retrouve avec un service qui nous permet de nous connecter à une interface pour lire des fichiers. | ||
+ | |||
+ | Pour se connecter, on nous demande d'entrer un nom d'utilisateur pour générer un mot de passe associé. | ||
+ | |||
+ | Une fois ce mot de passe récupéré, on doit se connecter. | ||
+ | Une fois connecté, on à le droit de lister les fichiers et ainsi, de les lire. | ||
+ | Il existe un fichier flag, on essaye donc de le lire et on se retrouve avec un message: | ||
+ | |||
+ | <code>> read flag | ||
+ | Only my fuhrer can read the top secret flag.</code> | ||
+ | |||
+ | On essaye donc de générer le mot de passe du Fuhrer (qui n'est rien d'autre que Hitler), mais un message d'erreur s'affiche: | ||
+ | |||
+ | <code>>> Hello, comrade. I can't remember you. Define yourself to get a pass. | ||
+ | > hitler | ||
+ | Sorry you can't be hitler. Shutdown now!</code> | ||
+ | |||
+ | Alors, nous devons nous pencher vers "comment est généré ce mot de passe". | ||
+ | |||
+ | ==== Solution ==== | ||
+ | Nous nous sommes tout de suite tourné vers la fonction de chiffrement DES. Le salt est donné (fb). | ||
+ | |||
+ | <code>crypt('xartrick', 'fb') = 'fbSSJ/i65tQvI' | ||
+ | crypt('xartrick-tapz', 'fb') = 'fbSSJ/i65tQvI' | ||
+ | crypt('xartric', 'fb') = 'fbRukOw/kgxsw' (incorrect => 'fb2u7t8VibXlI')</code> | ||
+ | |||
+ | Les deux premiers fonctionnent, mais pas le dernier. | ||
+ | On peut donc légitimement pensé qu'un padding est effectué, pour cela, on va bruteforce tout ça. | ||
+ | |||
+ | Le nom hitler ne fait que 6 caractères, pas besoin d'aller plus loins. | ||
+ | |||
+ | <code php>/** | ||
+ | * fb2u7t8VibXlI => xartric? (7 chars) | ||
+ | * fbP8tYJcLAClg => xartrih? (6 chars with previous padding) | ||
+ | */ | ||
+ | |||
+ | $need = 'fb2u7t8VibXlI'; | ||
+ | $name = 'xartric'; | ||
+ | |||
+ | for ($i = 0; $i < 128; $i++) { | ||
+ | $_name = $name . chr($i); | ||
+ | $crypt = crypt($_name, 'fb'); | ||
+ | |||
+ | if ($crypt == $need) { | ||
+ | echo($_name); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /** | ||
+ | * fb2u7t8VibXlI => xartrich (padding 'h') (7 chars) | ||
+ | * fbP8tYJcLAClg => xartrih4 (padding 'h4') (6 chars) | ||
+ | */</code> | ||
+ | |||
+ | On se retrouve avec un padding de 'h4'. | ||
+ | Maintenant, on peut récupérer le mot de passe de hitler(h4) | ||
+ | |||
+ | <code>crypt('hitlerh4', 'fb') = 'fboWsVzkSumM.'</code> | ||
+ | |||
+ | On se connecte et on admire: | ||
+ | |||
+ | <code>>> In order to get access to our system authentication is required! | ||
+ | + Username:hitler | ||
+ | + Password:fboWsVzkSumM. | ||
+ | > read flag | ||
+ | 99fa57bd69cdcfdd2e2fb6419e2994ca</code> | ||
+ | |||
+ | ==== Flag ==== | ||
+ | <code>99fa57bd69cdcfdd2e2fb6419e2994ca</code> |