Outils pour utilisateurs

Outils du site


writeup:microcorruption:montevideo

Montevideo

Ce niveau est très similaire à Whitehorse. La seule différence est qu'ici la fonction strcpy est utilisée, ce qui interdit l'utilisation de null byte dans l'entrée utilisateur.

Avec shellcode

On reprend le shellcode précédent en le modifiant légèrement :

nop
nop
xor r15, r15
mov.b #0x7F, r15
push r15
call #0x454C

Le XOR, MOV, PUSH permet de ne pas utiliser de null byte. Un problème se pose quand même, toutes les instructions se codent sur 4 octets. Si on regarde de plus prêt comment est codé le mov.b #0x7f, rf15, on se rend compte que celle ci contient un null byte : \x7f\x40\x7f\x00. Comme on a bien spécifié qu'un seule octet doit être transféré, il est possible de tricher en modifiant le null byte par une valeur quelconque qui sera ignorée.

Le code réellement assemblé donne : 034303430fef7f407f000f12b0124c45. Et en trichant : 034303430fef7f407f420f12b0124c45.

On ajoute l'adresse du shellcode dans la stack à la fin, et le tour est joué. 034303430fef7f407f420f12b0124c45f043 permet de valider le niveau.

Sans shellcode

Le principe est exactement le même que sur Whitehorse, la seule différence est l'adresse de la fonction INT.

414141414141414141414141414141414C453C447F permet de valider le niveau.

writeup/microcorruption/montevideo.txt · Dernière modification: 2014/11/05 17:43 par tlk