我正在使用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
解决方法:
你对stdout的写入是由python缓冲的,只有当缓冲区已满时才会写入.有2个简单的修复:
>在python命令中添加-u选项以询问无缓冲输出(‘python -u /script.py’).
>或者,每次写入后刷新输出.在您的示例中,在行sys.stdout.write(‘Input:’kbInput)之后添加以下行:
sys.stdout.flush()