Encore un petit write-up concernant le challenge exploit200 du CTF Nullcon Hackim 2014.

Vous pouvez trouver le binaire ici : exploit200

Il s'agit d'un programme qui lit une chaine de caractère du type STRING1:STRING2, puis fais un strcpy(buffer, STRING_2), sans vérifier la taille des données.

On a donc un beau débordement sur la stack !

Il y avait très peu de protections sur l'exécutable :

    $ checksec --file exploit200
    RELRO           STACK CANARY      NX            PIE        RPATH      RUNPATH      FILE
    Partial RELRO   No canary found   NX disabled   No PIE     No RPATH   No RUNPATH   exploit200

Comme on peut le voir, NX est désactivé, ce qui veut dire que notre stack est exécutable.

J'ai choisi d'écraser EIP par un gadget du type "add esp, 0x100; ... ; ret", car le buffer que je controle est situé plus bas dans la pile. Je retourne ensuite sur un gadget du type "jmp esp", afin d'exécuter mon shellcode présent dans la stack.

Le shellcode fait un connectback, et exécute un /bin/bash. Apparement, il y avait juste deux binaires disponibles : /bin/bash et /bin/cat. C'est d'ailleurs ce qui m'a compliqué le plus et c'est cette difficulté qui m'a pris le plus de temps à résoudre...

L'exploit complet est sur mon github : exploit200.pl