===== Nazi War (200) ===== Let the nazi war begin. My fuhrer will launch it: nc 88.190.221.116 1337 ==== 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: > read flag Only my fuhrer can read the top secret flag. 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: >> Hello, comrade. I can't remember you. Define yourself to get a pass. > hitler Sorry you can't be hitler. Shutdown now! 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). crypt('xartrick', 'fb') = 'fbSSJ/i65tQvI' crypt('xartrick-tapz', 'fb') = 'fbSSJ/i65tQvI' crypt('xartric', 'fb') = 'fbRukOw/kgxsw' (incorrect => 'fb2u7t8VibXlI') 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. /** * 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) */ On se retrouve avec un padding de 'h4'. Maintenant, on peut récupérer le mot de passe de hitler(h4) crypt('hitlerh4', 'fb') = 'fboWsVzkSumM.' On se connecte et on admire: >> In order to get access to our system authentication is required! + Username:hitler + Password:fboWsVzkSumM. > read flag 99fa57bd69cdcfdd2e2fb6419e2994ca ==== Flag ==== 99fa57bd69cdcfdd2e2fb6419e2994ca