<문제>
nc ctf.j0n9hyun.xyz 3001
<문제 풀이>
ghidra로 까서 본 main 함수
fgets 함수로 0x85(132)만큼 문자를 받아오고, sup이라는 함수를 실행한다.
sup 함수에는 출력함수 puts만 있다.
다른 함수는 쉘 여는 shell 함수가 있다.
kali에서 gdb로 본 main 함수
위와 같이 fgets 함수 전에 <+41>을 보면 ebp-0x8c에 받아온 문자열이 저장되고, 후에 <+59>에서는 eax에 ebp-0xc에 있는 값을 넣어 eax를 호출하는 것을 보니 아마 ebp-0xc에는 sup의 주소가 들어가있을 것이다.
<+59>에 bp를 걸고 임의의 값을 넣어 확인해본 결과,
main 함수에서 확인한 것과 같이 0xffffd24c [ebp-0x8c]에 입력값이 저장되고,
ghidra와 gdb info functions에서도 확인할 수 있듯이, [ebp-0xc]에는 sup함수의 시작주소가 담겨있었다.
결국 0xffffd24c에서부터 거리를 계산해, 공격주소 0xffffd2cc에 아까 봤던 shell 함수 시작주소를 넣어주면 된다. 둘 사이의 거리는 0x80(128)이다.
결과적으로 128만큼의 쓰레기값 + shell 시작주소가 페이로드가 될 것이다.
payload : (python -c 'print "A"*128 + "\x9b\x84\x04\x08"'; cat) | nc ctf.j0n9hyun.xyz 3001
FLAG : HackCTF{h3y_dud3_600d_f0r_y0u}
'CTF > Pwn' 카테고리의 다른 글
[hackCTF] Basic_BOF (0) | 2021.02.07 |
---|---|
[BalsnCTF2020] Diary (0) | 2020.11.29 |