'netcat -e' не ретранслирует stdout

Я использую netcat для создания бэкдора, выполняющего скрипт python, с помощью следующей команды:

netcat -l -p 1234 -e 'python /script.py' 

то я подключаюсь к бэкдору с другой оболочкой, используя:

 netcat localhost 1234 

script.py – это простой цикл, который считывает ввод, сохраняет его в файл и затем распечатывает его. Теперь все, что я пишу во второй оболочке, переходит к скрипту и успешно сохраняется в файле. Тем не менее, я не вижу вывод скрипта во второй оболочке. Я пробовал sys.stdout.write методы print и sys.stdout.write для python, и оба они, похоже, терпят неудачу. Я не знаю, почему вывод передается во вторую оболочку, если я использую это:

 netcat localhost 1234 /bin/bash 

Но не с моим сценарием. Я, очевидно, пропустил что-то важное. Вот мой сценарий:

 import sys while 1: kbInput = sys.stdin.readline() sys.stdout.write( 'Input: '+kbInput) f = open("output.txt", "w") f.write(kbInput) f.close() print 

Ваши записи в stdout буферизуются с помощью python и записываются только при заполнении буфера. Есть 2 простых исправления:

  1. Добавьте параметр -u в команду 'python -u /script.py' небуферизованного вывода ( 'python -u /script.py' ).

  2. В качестве альтернативы, запустите вывод после каждой записи. В вашем примере после строки sys.stdout.write( 'Input: '+kbInput) добавьте строку:

     sys.stdout.flush()