我使用 netcat 创建一个后门,使用以下命令运行 python 脚本:
netcat -l -p 1234 -e 'python /script.py'
然后我使用另一个 shell 连接到后门:
netcat localhost 1234
script.py 是一个简单的循环,它读取输入,将其保存到文件中,然后将其打印回来。现在,我在第二个 shell 中编写的任何内容都会进入脚本并成功保存到文件中。但是,我在第二个 shell 上看不到脚本的输出。我尝试了python 的print
和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
答案1
您对 stdout 的写入由 python 缓冲,并且仅在缓冲区已满时才写入。有 2 个简单的修复方法:
将选项添加
-u
到 python 命令以请求无缓冲输出 ('python -u /script.py'
)。或者,在每次写入后刷新输出。在您的示例中,在该行之后
sys.stdout.write( 'Input: '+kbInput)
添加以下行:sys.stdout.flush()