“netcat -e”不中继标准输出

“netcat -e”不中继标准输出

我使用 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

答案1

您对 stdout 的写入由 python 缓冲,并且仅在缓冲区已满时才写入。有 2 个简单的修复方法:

  1. 将选项添加-u到 python 命令以请求无缓冲输出 ( 'python -u /script.py')。

  2. 或者,在每次写入后刷新输出。在您的示例中,在该行之后sys.stdout.write( 'Input: '+kbInput)添加以下行:

    sys.stdout.flush()
    

相关内容