'netcat -e' não retransmitindo stdout

3

Estou usando o netcat para criar um backdoor executando um script python com o seguinte comando:

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

estou me conectando ao backdoor com outro shell usando:

netcat localhost 1234

script.py é um loop simples que lê a entrada, salva-a em um arquivo e depois a imprime. Agora, o que quer que eu escreva no segundo shell vai para o script e é salvo com sucesso em um arquivo. No entanto, não vejo a saída do script no segundo shell. Eu tentei os métodos print e sys.stdout.write do python e ambos parecem falhar. Eu não sei porque a saída é retransmitida de volta para o segundo shell se eu usar isso:

netcat localhost 1234 /bin/bash

Mas não com o meu script. Eu obviamente estou sentindo falta de algo importante. Aqui está o meu script:

import sys

while 1:
    kbInput = sys.stdin.readline()
    sys.stdout.write( 'Input: '+kbInput)
    f  = open("output.txt", "w")
    f.write(kbInput)
    f.close()
    print
    
por Mazen 17.03.2017 / 00:16

1 resposta

2

Suas gravações no stdout estão sendo armazenadas em buffer pelo python e são gravadas somente quando o buffer está cheio. Existem duas correções simples:

  1. Adicione a opção -u ao seu comando python para solicitar saída sem buffer ( 'python -u /script.py' ).

  2. Como alternativa, lave a saída após cada gravação. No seu exemplo, depois da linha sys.stdout.write( 'Input: '+kbInput) , adicione a linha:

    sys.stdout.flush()
    
por 17.03.2017 / 18:45