私はnetcatを使ってバックドアを生成し、次のコマンドを使ってPythonスクリプトを実行しました。
netcat -l -p 1234 -e 'python /script.py'
次に、別のシェルを使用してバックドアに接続します。
netcat localhost 1234
script.py は、入力を読み込み、ファイルに保存し、再印刷する単純なループです。これで、2番目のシェルで作成したすべての内容がスクリプトに入り、正常にファイルに保存されます。ただし、2番目のシェルのスクリプトでは出力は表示されません。 Pythonprint
とメソッドを試しましたが、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
ベストアンサー1
stdoutへの書き込みはPythonによってバッファリングされ、バッファがいっぱいになった場合にのみ書き込まれます。 2つの簡単な修正があります。
-u
バッファリングされていない出力を要求するオプションをpythonコマンドに追加します('python -u /script.py'
)。または、各書き込み後に出力をフラッシュします。あなたの例では、その
sys.stdout.write( 'Input: '+kbInput)
行の後に次の行を追加します。sys.stdout.flush()