20242411 2026-2027-1 《网络与系统攻防技术》实验二实验报告
20242411 2026-2027-1 《网络与系统攻防技术》实验二实验报告
一、基础知识
1.1 后门与反向连接
后门是绕过正常认证或交互流程、为后续访问提供隐蔽通道的程序或机制。后门可能通过恶意软件、钓鱼、被篡改的软件包、弱口令服务或漏洞利用进入系统。反向连接模式由目标主机主动连接控制端,通常可以减少控制端被动暴露监听端口的限制,但也会在网络连接、进程树和日志中留下可检测的痕迹。
1.2 netcat 与 socat
netcat 可以在 TCP 或 UDP 层进行监听、连接、端口测试和简单数据传输;在实验中,它被用于把 TCP 连接与命令解释器连接起来。socat 是更通用的数据流转接工具,支持 TCP、文件描述符、标准输入输出等多种端点,能够通过 fork 为多个连接创建独立处理进程。两者都不负责权限提升,实际会话权限取决于被执行进程的权限。
1.3 计划任务与持久化风险
Linux 中常见的周期性执行机制是 cron,Windows 中常见机制包括 Task Scheduler、服务、启动文件夹和注册表启动项。计划任务本身是正常运维功能,但若任务指向未知程序、使用异常账户或设置了不合理的触发条件,就可能成为后门的持久化入口。本实验只创建了带有明显标记文件的短期测试任务,并在实验结束后删除。
1.4 Meterpreter 与 Payload
Metasploit Framework 将监听器、Payload 和会话管理结合起来。msfvenom 用于生成特定平台的 Payload;handler 负责监听回连;Meterpreter 会话提供 getuid、sysinfo、webcam_list、webcam_snap 和 keyscan 等模块化功能。Payload 的架构、网络地址和端口必须与目标环境匹配,防火墙、杀毒软件、摄像头隐私开关和用户权限都可能影响实验结果。
1.5 缓冲区溢出与 Shellcode
pwn1 的 foo 函数使用 gets 读取输入而没有进行长度检查。输入超过局部缓冲区后,会继续覆盖保存的栈帧和返回地址。通过模式字符串可以定位返回地址覆盖偏移;本实验得到 EIP 偏移为 32 字节。由于程序为 32 位 ELF,返回地址、寄存器和 Shellcode 均按 x86 规则处理。实验使用栈上的可执行区域存放 Shellcode,并借助间接调用跳板把控制流转移到 Shellcode。
1.6 实验边界与防守原则
本实验只针对本人控制的物理机、Kali 虚拟机和本地 pwn1 样本进行验证。摄像头照片、键盘记录和可执行 Payload 均属于敏感实验材料,不建议公开上传。实验结束后必须关闭监听器、结束会话、删除计划任务和临时文件,并恢复安全软件与摄像头隐私开关。
二、实验环境与网络验证
Windows 物理机通过 VMware VMnet8 与 Kali 虚拟机互联。Windows VMnet8 地址为 192.168.182.1,Kali eth0 地址为 192.168.182.132,二者处于同一 192.168.182.0/24 网段。先在 Windows 端查看网卡信息,再在 Kali 端查看地址和路由,最后使用 Test-NetConnection 验证 4444 端口可达。

图 1 Windows 物理机网卡地址配置

图 2 Kali 虚拟机地址与路由配置

图 3 Windows 到 Kali 的 TCP 连通性验证
三、实验内容与过程
3.1 使用 netcat 获取 Shell 并验证计划任务
Kali 端在 5555 端口监听,Windows 端通过 ncat 连接到 Kali 并执行 cmd.exe。会话建立后使用 whoami 和 hostname 验证身份与主机名,结果分别为 czw0319\22601 和 CZW0319,说明连接进入的是本人 Windows 物理机。

图 4 netcat 会话中的身份与主机名验证
随后在 Windows 端创建 Lab2-Marker 计划任务,任务执行简单的标记命令并写入 C:\Users\Public\lab2-task.txt。使用 schtasks /Query 查看任务状态、运行用户、触发方式和最后运行结果,确认任务成功执行。

图 5 netcat 查询结果
3.2 使用 socat 获取 Shell 并验证计划任务
Kali 端使用 socat 创建 TCP-LISTEN 监听,并通过 fork 和 STDIO 转接标准输入输出。Windows 端连接成功后,继续使用 whoami、hostname 和 ver 验证会话,再创建 Lab2-Socat-Marker 任务并读取 C:\Users\Public\lab2-socat.txt。该过程说明 socat 可以完成比简单 netcat 更灵活的数据流转接。

图 6 socat 会话与计划任务验证结果
3.3 Meterpreter Payload 生成、传输与会话建立
先确认 Kali 与 Windows 之间的地址、路由和工具位置,并在 lab2 目录中保存实验文件。随后使用 msfvenom 生成 Windows x64 Meterpreter reverse_tcp Payload,监听地址为 192.168.182.132,端口为 5557。生成文件为 PE32+ 可执行文件,大小为 7680 字节。

图 7 Kali 工具检查

图 8 Windows x64 Meterpreter Payload 生成与文件类型检查
在传输环节,曾遇到安全软件拦截的情况。重新进行实验后,使用 PowerShell TCP 流复制文件,并在 Windows 端使用 Get-FileHash 计算 SHA256,再与 Kali 端结果比较,确认文件内容一致。

图 9 Metasploit handler 配置与监听状态

图 10 Windows 端 Payload 接收与 SHA256 校验
运行 Payload 后,Metasploit 成功建立 Meterpreter session。getuid 显示当前用户为 CZW0319\22601,sysinfo 显示 Windows 11 23H2、x64 架构和 x64/windows Meterpreter,说明 Payload、监听器、地址和目标架构均匹配。

图 11 Meterpreter 会话中的用户和系统信息
3.4 摄像头与键盘记录功能验证
首先使用 webcam_list 枚举设备,结果显示 Integrated Camera 和 OBS Virtual Camera。第一次抓图得到灰色锁形占位画面,原因是笔记本侧面的物理摄像头隐私开关处于关闭状态;打开物理开关后重新抓图,得到正常画面。为降低隐私暴露,后续以手机壁纸作为拍摄主体,同时保留本人和设备的可核验信息。

图 12 Meterpreter 摄像头设备枚举结果

图 13 摄像头抓图与 keyscan 测试过程

图 14 摄像头抓图结果与身份核验材料
键盘记录测试使用了 lab2 test123 等无敏感性的临时字符串。keyscan_dump 能够显示按键内容和回车标记,随后使用 keyscan_stop 停止记录。该结果说明按键记录属于高敏感能力,实际系统中应重点审计异常进程、输入设备访问和安全软件告警。
3.5 pwn1 中的 Shellcode 注入与反弹 Shell
将样本pwn1复制到 lab2/pwn1-work 中进行分析。
首先使用 GDB 输入 200 字节模式字符串。程序收到 SIGSEGV 后,EIP 为 0x31624130;使用 pattern_offset 计算得到精确覆盖偏移为 32。nm 和 objdump 显示 getShell 地址为 0x0804847d,foo 函数通过 gets 读取局部缓冲区,main 调用 foo。由此确定了覆盖返回地址和转移控制流所需的关键数据。

图 15 pwn1 模式字符串触发崩溃及寄存器状态

图 16 pattern_offset 得到返回地址偏移 32

图 17 pwn1 符号表和 main 函数反汇编

图 18 getShell 与 foo 函数反汇编
随后在 Kali 本机 127.0.0.1:4444 启动 linux/x86/shell_reverse_tcp handler。第一次使用带 x86/shikata_ga_nai 编码的 Shellcode,运行时出现栈上地址附近的 SIGSEGV。检查 GNU_STACK 和进程映射后确认栈具有 rwxp 权限,因此问题不在 NX,而在编码 Shellcode 的入口和实际栈地址对齐。

图 19 pwn1 反弹 Shell handler 初始配置

图 20 编码 Shellcode 生成及第一次失败现象

图 21 编码 Shellcode 崩溃位置与栈映射检查
为排除编码器影响,重新生成不使用 x86/shikata_ga_nai 的原始 x86 Shellcode,并对 payload 文件和栈内存逐字节比较。比较发现 payload 中写入的栈地址为 0xffffcf14,而当前运行中 Shellcode 的实际起始地址为 0xffffcef4,二者相差 0x20,导致 EIP 落入 Shellcode 中间的端口数据区域。将返回地址后的目标指针改为实际 Shellcode 起点后,程序成功执行 /usr/bin/dash,并在 handler 中打开 command shell session 1。

图 22 原始 Shellcode 与栈内存内容对照

图 23 修正地址后 handler 成功打开 command shell session

图 24 Shellcode 触发 pwn1 进程成功执行 /usr/bin/dash

图 25 反弹 Shell 中 id 与 uname 验证结果
四、实验中遇到的问题及解决方案
问题一 摄像头抓图开始显示锁形灰色画面。原因是笔记本侧面的物理隐私开关关闭。打开开关后重新 webcam_snap;同时用手机壁纸遮挡部分画面,减少报告中的隐私暴露,并只向任课教师提交。
问题二 pwn1 初次注入失败。调试发现编码 Shellcode 会在栈地址附近崩溃,随后对 payload 文件、栈内存和寄存器逐字节比较,发现指针比当前 Shellcode 起点高 0x20。改用原始 Shellcode 并按本次运行的栈地址修正指针后成功。
问题三 反弹 Shell 没有明显的 $ 提示符。原因是 command shell 没有分配伪终端,并不代表会话没有建立。通过直接输入 id 和 uname -a 得到正常回显,验证后输入 exit 关闭会话。
五、基础问题回答
问题一 例举你能想到的一个后门进入到你系统中的可能方式?
答:我从非官方来源下载破解软件、脚本工具或文档时,攻击者可以将后门捆绑在安装包、宏文档或更新程序中;用户主动运行后,后门便可能以当前用户权限建立回连或写入持久化位置。
问题二 例举你知道的后门如何启动起来(win及linux)的方式?
答:Windows 可以通过注册表 Run 项、启动文件夹、计划任务、等方式启动;本实验验证的是计划任务。Linux 可以通过 cron、用户 shell 初始化文件、SSH authorized_keys等方式启动。
问题三 Meterpreter 中给我印象较深的功能。
答:getuid 和 sysinfo 可以快速确认会话权限、主机名、操作系统和架构;webcam_list 与 webcam_snap 能验证设备枚举和图像采集能力;keyscan_start、keyscan_dump 和 keyscan_stop 则体现了输入记录的高敏感性。file transfer、会话管理和后续扩展模块也说明了统一会话框架的便利性。
问题四 如何发现自己有系统有没有被安装后门?
答:Windows 可检查计划任务、服务、启动项、监听端口、PowerShell 及安全事件日志,并结合火绒告警和文件哈希进行判断;Linux 可检查 cron、systemd、异常进程、监听端口、登录记录和系统日志。
六、实验总结与心得
本实验把网络连接、计划任务、Payload 会话、设备访问和栈溢出利用串联起来,使我更加直观地理解了后门从进入、启动、回连到清理的完整链条。netcat 和 socat 的实验说明,很多后门并不需要复杂界面,只要把输入输出重定向到网络连接,就可能形成可操作的命令通道;Meterpreter 实验则说明,设备访问和键盘记录会造成比普通 Shell 更严重的隐私风险。
目标五的调试过程让我认识到,漏洞利用成功不仅取决于偏移是否正确,还取决于文件架构、栈权限、Shellcode 编码、跳板地址和运行时栈地址是否一致。通过模式字符串得到偏移 32 后,仍然经历了编码 Shellcode 崩溃、内存字节比对和栈地址修正,最终才获得反弹 Shell。这一过程加深了我对 EIP、栈布局、机器指令和 GDB 调试的理解。
本实验也强化了防守意识:安全软件的拦截、摄像头物理快门和计划任务审计都能降低后门风险。
浙公网安备 33010602011771号