20242403 2026-2027-1 《网络与系统攻防技术》实验二实验报告
20242403 2026-2027-1 《网络与系统攻防技术》实验二实验报告
0.实验问题
(1)例举你能想到的一个后门进入到你系统中的可能方式?
下载“破解软件/激活工具”时夹带后门;钓鱼邮件附件诱导运行;利用未打补丁的服务漏洞(如缓冲区溢出);供应链污染(信任的软件更新被篡改);U 盘或共享目录投放。
(2)例举你知道的后门如何启动起来(win及linux)的方式?
- Windows:注册表Run启动项、启动文件夹、任务计划程序、系统服务。
- Linux:cron定时任务(含@reboot)、systemd 服务、/etc/rc.local、/etc/init.d/ 脚本。
本质都是把后门写入系统“本来就会自动执行”的位置。
(3)Meterpreter有哪些给你映像深刻的功能?
一个会话里集成远程命令、文件传输、进程迁移、麦克风录音、摄像头抓帧、键盘记录、提权尝试。印象深刻的是“远程控制被做成了功能齐全的控制台”,一旦落地,目标隐私和权限都受威胁;同时也看到getsystem报告成功但getuid未变,说明必须验证结果。
(4)如何发现自己有系统有没有被安装后门?
- 网络:netstat -ano / ss 看出站连接和陌生监听端口。
- 启动项:Windows 用 Autoruns 查注册表、计划任务、服务;Linux 查 crontab -l、systemctl list-unit-files、rc.local。
- 进程与文件:看陌生进程路径、临时目录可执行文件。日志与杀软扫描交叉验证。
1.基础知识
ncat
ncat是nmap的一部分,用于从TCP/UDP连接中读取或发送网络数据。
参数解释:
-l:监听端口,监听入站信息
-lv:在指定端口监听,且直观显示所有连接相关信息
-p:后跟本地端口号
-v:显示端口的信息
-vv:显示端口更详细的信息
socat
可以在两个数据流之间建立双向通道,且支持众多协议和链接方式。比ncat更强更全面。
Meterpreter
是Metasploit渗透测试框架中的高级攻击载荷,运行在目标系统内存中,提供远程控制和后渗透功能。
2.实验内容
- 使用netcat获取主机操作Shell,cron启动某项任务(任务自定)
- 使用socat获取主机操作Shell, 任务计划启动
- 使用MSF meterpreter生成可执行文件(后门),利用ncat或socat传送到主机并运行获取主机Shell
- 使用MSF meterpreter生成获取目标主机音频、摄像头、击键记录等内容的后门,并尝试提权
- 使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell。
3.实验过程
3.1环境准备
查询攻击机和目标机的IP地址。
本机ip地址为192.168.111.1

kali虚拟机ip地址为192.168.111.128

3.2使用netcat获取主机操作Shell,cron启动某项任务
首先确认安装好Nmap,并确认能够ping通。
然后,在Kali里输入crontab -l,开始操作:

可以看到cron运行正常。现在在Windows一侧输入ncat -lvnp 4444,随后在Kali里输入crontab -e,开始操作:

然后,耐心等待,直到出现这个:

这样就成功了,说明已获取Kali的Shell。
【结论】
cron 可周期性执行指定命令,将反弹 Shell 命令写入 crontab 后,靶机每分钟自动向攻击机发起连接,攻击机通过 ncat 监听即可获取 Shell。验证了 cron 作为 Linux 后门驻留机制的可行性。
3.3使用socat获取主机操作Shell, 任务计划启动
由于无法在Windows中安装socat,因此计划变动。
首先,在Windows上拿到nmap的绝对路径:C:\Program Files (x86)\Nmap\ncat.exe。
随后输入:

此时会弹出窗口:

Kali一侧输入:

Kali的socat连上了Windows,拿到了cmd.exe。whoami返回laptop-i3fimkci\13299,hostname 返回 LAPTOP-I3FIMKCI。
中文乱码只是Windows cmd默认GBK编码、Kali终端UTF-8编码不一致导致的,不影响命令执行。
【结论】
Windows 任务计划程序可作为后门的自启动“插座”:将绑定 cmd.exe 的监听程序写入任务计划,系统触发后攻击机即可连接获取 Shell。靶机端 ncat 与 socat 在“绑定命令解释器到网络连接”上功能等价;攻击机端使用 socat 成功获取主机操作 Shell,达到实验目的。
3.4使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell
首先由Kali生成后门:

再使用另一个kali终端:

然后,使用Windows接收:

回到Kali进行测试:

【结论】
msfvenom 可将反弹 Shell 逻辑打包为普通 exe,ncat 可作为文件传输通道。靶机运行后门后主动连接攻击机,攻击机获得 Meterpreter 会话,验证了“可执行后门 + 文件传送 + 反弹连接”的完整链路。
3.5使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权
输入record_mic:使用record_mic 指令可以截获一段音频,使用 -d 设置录制时间,这里设置时长为5s。
使用摄像头:能got frame,但是被打断。
获取击键记录:可以。
输入getsystem提取权限:不太行(?)。
结果如下图所示:

【结论】
Meterpreter 提供音频、摄像头、键盘记录、提权等模块。本实验中 record_mic 和 keyscan 成功获取目标音频与按键内容;webcam_snap 抓帧成功但停止摄像头时报错 731;getsystem 虽报告使用 EfsPotato 技术获取 SYSTEM 令牌,但 getuid 验证身份未变,疑似提权未真正生效或未持久化。
这印证了“命令发出不等于功能成功”,必须以验证命令的输出为准。后门功能受目标环境、驱动和权限制约。
3.6 使用MSF生成shellcode,注入到实验1中的pwn1中,获取反弹连接Shell
首先确认原来的pwn1文件:

生成匹配架构的 shellcode:

尝试用 -x 注入:

MSF 监听:

检查并运行注入后的文件:

【结论】
msfvenom 的 -x 注入并非“把 shellcode 贴到 ELF 后面”,需要入口地址、可加载段、架构同时匹配。本实验中架构已匹配(i386 + linux/x86),但注入后文件从 7418 字节变为 123 字节,file 识别为 data,模板未被保留,运行失败,未建立反弹会话。根本原因是 msfvenom 对 32 位动态链接 ELF 的模板注入支持有限。正确做法应结合 pwn1 的缓冲区溢出偏移(实验一已知为 32 字节)与返回地址,手工构造 32 字节填充 + 返回地址 + NOP 滑道 + shellcode,通过 gets() 溢出执行;因课堂时间限制未完成手工注入,后续可继续实践。
4.问题与解决
问题1:Windows 已安装 Nmap,但命令行无法调用 ncat。
现象:ncat 提示不是内部或外部命令。
分析:Nmap 安装目录未加入系统 PATH,命令行按 PATH 查找可执行文件,找不到就报错。
解决:将 C:\Program Files (x86)\Nmap 加入系统环境变量 Path,关闭旧 cmd 窗口后重新打开,ncat --version 正常显示版本。
问题2:Windows 靶机没有 socat,且无法下载。
现象:where socat 无结果,GitHub 下载失败。
分析:实验环境未预装 socat,网络受限。
解决:靶机端用功能等价的 ncat 将 cmd.exe 绑定到端口(ncat -lvnp 4445 -e cmd.exe),攻击机端仍用 socat 连接(socat - TCP:WindowsIP:4445),成功获取 Windows Shell。报告如实注明替代关系,并给出 socat 等价命令 socat TCP-LISTEN:4445 EXEC:cmd.exe。
问题3:Kali 连接 Windows cmd 时中文乱码。
现象:Windows 版本信息显示为乱码。
分析:Windows cmd 默认 GBK 编码,Kali 终端为 UTF-8,编码不一致。
解决:乱码不影响命令执行,whoami、hostname 输出正常;报告注明编码差异,未做额外处理。
问题4:任务4 键盘记录首次 dump 为空。
现象:keyscan_start 后立即 keyscan_dump 没有内容。
分析:键盘记录需要先启动嗅探,再在目标机产生按键,最后 dump。
解决:重新 keyscan_start,在 Windows 上输入测试文本,再 keyscan_dump,成功捕获 <Shift>fuckyoudamnshite。
问题5:任务4 webcam_snap 报错 731。
现象:显示 Got frame,随后 stdapi_webcam_stop: Operation failed: 731。
分析:抓帧成功,失败在“停止摄像头”阶段,与摄像头驱动/设备状态有关。
解决:如实记录“抓帧成功、停止异常”,不写成“摄像头功能完全失败”。
问题6:任务4 getsystem 报告成功但 getuid 未变。
现象:getsystem 输出 got system via technique 6 (EfsPotato),但 getuid 仍为 LAPTOP-I3FIMKCI\13299。
分析:getsystem 报告获取了 SYSTEM 令牌,但当前会话身份未真正切换或未持久化。
解决:以 getuid 为准,结论写“提权未真正生效”,体现“命令发出 ≠ 功能成功”。
问题7:任务5 msfvenom -x 注入 pwn1 失败。
现象:Final size of elf file: 123 bytes;pwn1 为 7418 字节,pwn1_backdoor 仅 123 字节;file pwn1_backdoor 显示 data;运行报 j: command not found、unexpected EOF。
分析:msfvenom 对 32 位动态链接 ELF 的模板注入支持有限,-x 未保留 pwn1 的 ELF 结构,输出只是裸 shellcode。
解决:如实记录失败现象,对比参考博客后确认正确路径是手工溢出注入:32 字节填充 + 返回地址 + NOP 滑道 + shellcode,通过 gets() 溢出执行,而不是让 msfvenom 修改 ELF。因课堂时间限制未完成手工注入,在报告中作为后续改进方向。
5.学习感悟与思考
这次实验让我对“后门”的理解从“一个神秘程序”变成了两个具体问题:怎么进来,怎么留下来。
任务1和任务2让我看到,后门最可怕的地方不是某个工具多强,而是它借用了系统本来就信任的机制。cron和Windows任务计划本身是正常的系统功能,但一旦被写入反弹Shell命令,系统就会按自己的节奏“主动”把Shell送出去。这解释了为什么后门难查:它不一定有陌生进程常驻,可能只是一个看起来正常的定时任务。
任务3和任务4让我体会到“落地”和“控制”是两件事。msfvenom生成exe、ncat传文件、运行后拿到Meterpreter,链路本身不复杂;但真正让我印象深的是getsystem报告成功、getuid却没变。以前我会默认“命令有输出就是成功”,这次实验反复提醒我:必须用验证命令确认结果。webcam_snap的Got frame加停止报错、键盘记录第一次dump为空,也都是同一个道理——工具说“开始了”不等于功能真的完成。
任务5的失败反而让我收获最大。一开始我以为msfvenom-x pwn1就是“把shellcode注入pwn1”,看到输出只有123字节,就感觉不太对劲;到file显示data、运行报shell语法错误,就明白它根本没有保留ELF结构。我看了看其他同学的做法,别人成功靠的是手工溢出注入:利用pwn1的gets()溢出,构造“填充+返回地址+NOP滑道+shellcode”,而不是让msfvenom去改ELF,这相当于把实验一又做了一遍(大概?)。
从防御角度看,这次实验也让我知道排查后门不能只看进程。要沿三条线交叉检查:网络看出站连接和陌生监听端口,启动项看cron、任务计划、注册表Run、服务,进程与文件看临时目录和陌生路径的可执行文件。后门必须解决“进来”和“留下”两个问题,排查就是反过来找那个不该存在的“插座”。
最后,实验中的乱码、PATH问题、PowerShell与cmd的差异、socat缺失,这些“杂事”也让我意识到:实验报告的价值不只是最后成功的那一下,而是遇到问题时能不能定位原因、能不能诚实记录失败、能不能说清楚下一步该怎么改。这比单纯复制命令更有意义。
不过最大的遗憾是最后一个实验我没能成功,因此在deadline结束之前,如有可能,我还打算再试一试。

浙公网安备 33010602011771号