pwhtools에서 recvuntil함수 EOFError 문제
>>>p.recvuntil("buf = (")
 
<stdin>:1: BytesWarning: Text is not bytes; assuming ASCII, no guarantees. See https://docs.pwntools.com/#bytes
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.11/dist-packages/pwnlib/tubes/tube.py", line 339, in recvuntil
    res = self.recv(timeout=self.timeout)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/pwnlib/tubes/tube.py", line 104, in recv
    return self._recv(numb, timeout) or b''
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/pwnlib/tubes/tube.py", line 174, in _recv
    if not self.buffer and not self._fillbuffer(timeout):
                               ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/pwnlib/tubes/tube.py", line 153, in _fillbuffer
    data = self.recv_raw(self.buffer.get_fill_size())
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/pwnlib/tubes/sock.py", line 56, in recv_raw
    raise EOFError
EOFError

Q.
basic_exploitation_001문제 풀려고 하는데
pwntools에서 recvuntil함수 관련 오류입니다.
혹시 해결하신 분 있을까요?
OS는 칼리리눅스 입니다.

>>>print(p.recvall())
[x] Receiving all data
[x] Receiving all data: 0B
[+] Receiving all data: Done (0B)
[*] Closed connection to host3.dreamhack.games port xxxxx
b''

recvall()의 결과 입니다. 서버에 문제가 없는 건가요?

#pwntools
작성자 정보
답변 1
avatar
qwerty
CTF First Place

EOFError는 socket연결이 종료된 후 해당 소켓에 p.send혹은 p.recv등의 명령을 전송한 경우 발생합니다. 정확한 원인은 페이로드를 알아야 확인할 수 있기 때문에 해당 내용은 지금 확인하기 힘들 것 같습니다.

또한 p.recvall()은 원래 timeout을 인자로 주지 않는 경우 EOF가 나기 전까지 입력을 받기 때문에, 해당 방법은 정상적으로 서버가 동작하는지 체크하는 올바른 방법이 아닙니다.recvall code

추가적으로, basic_exploitation_001의 source code를 보면 printfputs같은 것이 없이 gets로 입력만 받기 때문에, 서버에서 초기에 아무 내용도 보내지 않는 것은 정상적인 동작입니다.

소스코드를 다시 한 번 분석해보시고 익스플로잇을 진행해 보는 것이 좋을 것 같습니다!

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