Scripting

’netcat -e’ 不中繼標準輸出

  • March 26, 2017

我正在使用 netcat 創建一個後門,使用以下命令執行 python 腳本:

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

然後我使用另一個shell連接到後門:

netcat localhost 1234

script.py 是一個簡單的循環,它讀取輸入,將其保存到文件中,然後將其列印回來。現在,我在第二個 shell 中編寫的任何內容都會進入腳本並成功保存到文件中。但是,我在第二個 shell 上看不到腳本的輸出。我嘗試了 python 的printsys.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個簡單的修復:

  1. -u選項添加到您的 python 命令以請求無緩衝輸出 ( 'python -u /script.py')。
  2. 或者,在每次寫入後刷新輸出。在您的範例中,在該行之後sys.stdout.write( 'Input: '+kbInput)添加該行:
sys.stdout.flush()

引用自:https://unix.stackexchange.com/questions/351998