level7, avant dernier niveau…
Il est moins dur que le précédent, il est même possible de le résoudre de 2 façons différentes, une barbare et une jolie.
Une fois connecté on fonce dans /wargame, là le binaire sphinx est notre cible.
Après exécution de celui-ci, on voit qu’il nous demande un nombre à 4 chiffres.
1 2 | level7@leviathan:/wargame$ ./sphinx usage: ./sphinx [4 digit code] |
Je vais montrer les 2 méthodes mais pas trop m’attarder sur la barbare vu que c’est un bête brute-forcing.
Méthode 1 : bruteforçons
Y a qu’à coder un truc bourrin qui boucle de 1000 à 9999 en testant chaque nombre. Vous pouvez coder en C, perl, script bash.. osef !
Exemple :
1 | level7@leviathan:/wargame$ for x in $(seq 1000 9999); do /wargame/sphinx $x; done; |
Voilà, quand le nombre va être trouvé vous allez avoir un shell SUID level8, y en a pour moins d’une minute.
Méthode 2 : Désassemblons
Bon bha pas de secret, on prend objdump pour désassembler le binaire :
1 2 3 4 5 6 7 | 0x080484b9 <main+85>: call 0x8048394 <atoi@plt> 0x080484be <main+90>: cmp 0xfffffff8(%ebp),%eax 0x080484c1 <main+93>: jne 0x80484dd <main+121> 0x080484c3 <main+95>: movl $0x3ef,(%esp) 0x080484ca <main+102>: call 0x8048334 <seteuid@plt> 0x080484cf <main+107>: movl $0x8048622,(%esp) 0x080484d6 <main+114>: call 0x8048344 <system@plt> |
La comparaison se fait entre eax et 0xfffffff8(%ebp), on prend donc gdb pour mettre un breakpoint sur le cmp (0x080484be) :
1 2 3 4 5 6 7 8 9 10 | (gdb) b * 0x080484be Breakpoint 1 at 0x80484be (gdb) r 9999 Starting program: /wargame/sphinx 9999 Breakpoint 1, 0x080484be in main () (gdb) p $eax $1 = 9999 (gdb) x/d ($ebp - 8) 0xbffffa30: 7123 |
On relance le binaire avec le bon nombre et on a un shell SUID level8, reste plus qu’à aller chercher le password
Bon ceci était en fait le dernier level, vu que le 8 contient juste un mot de félicitations.
Je verrais si je continue sur le challenge 2 nommé narnia, qui est orienté exploitation de base, surtout des stacks overflow, pour le moment j’ai juste fait le level1, donc à suivre..
