Scripting
’netcat -e’ 不中繼標準輸出
我正在使用 netcat 創建一個後門,使用以下命令執行 python 腳本:
netcat -l -p 1234 -e 'python /script.py'
然後我使用另一個shell連接到後門:
netcat localhost 1234
script.py 是一個簡單的循環,它讀取輸入,將其保存到文件中,然後將其列印回來。現在,我在第二個 shell 中編寫的任何內容都會進入腳本並成功保存到文件中。但是,我在第二個 shell 上看不到腳本的輸出。我嘗試了 python 的
sys.stdout.write
方法,似乎都失敗了。如果我使用這個,我不知道為什麼輸出會被轉發回第二個 shell: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()