PwnTools recv () на выходе, который ожидает ввода сразу после - PullRequest
0 голосов
/ 12 октября 2019

Привет У меня есть проблема, для которой я не могу найти решение. (Может быть, я просто ужасен в правильной формулировке запросов на английском)

Я пытаюсь выполнить двоичный файл из python, используя pwntools, и полностью прочитать его вывод перед отправкой некоторого ввода самостоятельно.

вывод из моего двоичного файла выглядит следующим образом:

Testmessage1
Testmessage2
Enter input: <binary expects me to input stuff here>

Где я хотел бы прочитать первую строку, вторую строку и часть вывода третьей строки (с последним символом ':').

Третья строка вывода не содержит символа новой строки в конце и ожидает, что пользователь сделает ввод напрямую. Однако я не могу прочитать содержимое вывода, с которого начинается третья строка, независимо от того, что я пытаюсь.

Мой нынешний способ добиться этого:

from pwn import *

io = process("./testbin")
print io.recvline()
print io.recvline()
print io.recvuntil(":", timeout=1) # this get's stuck if I dont use a timeout
...
# maybe sending data here
# io.send(....)
io.close()

ВыполнитьЯ что-то не так понимаю о stdin и stdout? Разве «Enter input:» третьей строки не является частью вывода, который я должен быть в состоянии получить до ввода?

Заранее спасибо

1 Ответ

0 голосов
/ 18 октября 2019

Я наконец понял это. Я получил подсказку, необходимую мне от https://github.com/zachriggle/pwntools-glibc-buffering/blob/master/demo.py

Кажется, что Ubuntu делает много буферизации самостоятельно. Если вручную убедиться, что pwnTools использует псевдотерминал для stdin и stdout, он работает!

import * from pwn

pty = process.PTY
p = process(stdin=pty, stdout=pty)
...