Je me suis donc dit que peut être le binaire était suffisamment basique pour pouvoir être résolu juste avec la commande ltrace. La commande ltrace permet de tracer les appels fait par le programme à des fonctions situées dans des librairies partagées. Donc avec un peu de chance, le programme fait juste un strcmp entre la chaîne que l'on a entrée et le mot de passe attendu :)
Bien entendu, je ne vais pas montrer des exemples avec le binaire d'intruded.net car ça gâcherait le plaisir. Je vais donc baser mon exemple sur le programme suivant :
#include <stdio.h> #include <stdlib.h> #include <string.h> #define SIZE 16 void uncrypt(const int *pass, char *res) { int i; for(i=0;i res[i] = '\0'; } int main(int argc, char **argv) { char leurre[] = "ThePass"; int xor_password[] = {216,152,200,254,217,152,207,251,152,216,248,220,155,249,207}; char password[SIZE]; char proposition[SIZE]; uncrypt(xor_password,password); printf("password : "); fgets(proposition,SIZE,stdin); if(!strncmp(proposition,password,SIZE)) printf("ACCESS GRANTED\n"); else printf("ACCESS DENIED\n"); return EXIT_SUCCESS; }Comme on peut le voir avec la commande strings, le mot de passe n'apparaît pas étant donné que celui-ci est xoré.
time0ut# strings blog_pass /lib/ld-linux.so.2 __gmon_start__ libc.so.6 _IO_stdin_used strncmp puts __stack_chk_fail stdin printf fgets __libc_start_main GLIBC_2.4 GLIBC_2.0 PTRhP [^_] password : ACCESS GRANTED ACCESS DENIED ThePassPar contre on voit bien le leurre ;)
La commande ltrace nous permet de venir à bout de ce binaire très simple :
time0ut# ltrace ./blog_pass __libc_start_main(0x80484fe, 1, 0xbfb8a474, 0x8048660, 0x8048650Voilà notre binaire est cassé et le mot de passe trouvé : s3cUr3dP3sSw0Rd.printf("password : ") = 11 fgets(password : test "test\n", 16, 0x97c440) = 0xbfb8a394 strncmp("test\n", "s3cUr3dP3sSw0Rd", 16) = 1 puts("ACCESS DENIED"ACCESS DENIED ) = 14 +++ exited (status 0) +++
time0ut# ./blog_pass password : s3cUr3dP3sSw0Rd ACCESS GRANTEDA noter, il existe aussi la commande strace qui permet de tracer les appels systèmes.