私はnetcatを使用して、次のコマンドでpythonスクリプトを実行するバックドアを作成しています:
netcat -l -p 1234 -e 'python /script.py'
次に、次を使用して別のシェルでバックドアに接続しています。
netcat localhost 1234
script.pyは、入力を読み取り、ファイルに保存してから出力する単純なループです。これで、2番目のシェルに書き込んだものはすべてスクリプトに送られ、ファイルに正常に保存されます。ただし、2番目のシェルにスクリプトの出力が表示されません。 pythonのprint
メソッドとsys.stdout.write
メソッドの両方を試しましたが、どちらも失敗したようです。出力が2番目のシェルにリレーされる理由がわかりません。私はこれを使用します:
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つの簡単な修正があります:
_-u
_オプションをpythonコマンドに追加して、バッファーなしの出力(_'python -u /script.py'
_)を要求します。
または、各書き込み後に出力をフラッシュします。あなたの例では、行sys.stdout.write( 'Input: '+kbInput)
の後に次の行を追加します。
_sys.stdout.flush()
_