20242416 2026-2027-1 《网络与系统攻防技术》实验二实验报告

20242416 2026-2027-1《网络与系统攻防技术》实验二实验报告

1. 基础知识

1.1 反向 Shell 与网络连接

反向 Shell 是指目标端主动向控制端建立网络连接,并将命令解释器的输入输出通过连接转发。与单纯的端口连通性测试相比,判断反向 Shell 是否建立,应同时检查连接来源、目标地址、命令输出以及会话交互情况。

1.2 Netcat 与 Socat

Netcat(nc)可以建立 TCP 监听并收发数据;当实验环境把连接与命令解释器的输入输出关联时,可以观察到远程命令通道。Socat 能够在 TCP 连接、标准输入输出、文件和进程之间转接数据。两者都需要在隔离、授权的实验环境中使用。

1.3 cron 与 Windows 计划任务

Linux cron 和 Windows 计划任务都可以按照设定的时间自动运行命令或脚本。验证定时任务时,既要检查任务配置,也要检查调度服务状态及实际运行痕迹;实验结束后应清理临时任务,避免测试动作持续执行。

1.4 Metasploit 与 Meterpreter

Metasploit Framework 的 handler 用于等待相匹配的载荷建立会话。Meterpreter 会话建立后,可以通过目标信息查询、屏幕捕获等命令确认会话是否可交互。不同平台的 Meterpreter 命令集并不完全相同,例如 Windows 键盘记录相关命令不能直接假定在 Linux Meterpreter 中可用。

1.5 Shellcode 注入与本地验证

Shellcode 注入实验需要分别验证输入文件生成、易受攻击程序触发、反向连接建立和 Shell 命令返回等环节。本次任务五在 Kali 本地运行实验程序并由同一台 Kali 上的 handler 接收连接,因此监听端与回连端出现相同 IP 属于本地实验的预期现象,不代表跨主机连接。

2. 实验内容

任务 主要内容 实际结果
任务一:Netcat 反向 Shell openEuler 主动连接 Kali 的 nc 监听端口,检查远程命令输出。 连接来源为 192.168.239.130,Kali 监听端为 192.168.239.129:4444;反向连接已建立,终端控制提示仍需区分。
任务二:定时触发与 Socat / Windows 计划任务 通过 crontab 定时执行 Socat 反向连接;另验证 Windows 计划任务的周期日志与清理。 crontab 条目和 crond 运行状态有截图;Windows 计划任务日志多次写入,查询显示上次结果 0。
任务三:Meterpreter 会话 从 Kali 侧管理会话并验证活动会话中的命令执行。 活动 Meterpreter 提示符下执行截图命令有返回;Windows 会话证据以 Windows 相关功能输出为准。
任务四:键盘记录后门验证 在 Windows 虚拟机中输入测试文本,并通过活动会话验证 keyscan 的开始、读取和停止。 keyscan_start、keyscan_dump、keyscan_stop 有成功输出;目标端文本输入截图作为配套测试记录。
任务五:Shellcode 注入与反向 Shell 运行本地 pwn1 输入文件并观察 handler 与 Shell 会话交互。 输入文件生成 175 字节;handler 显示 command shell session 1 opened;id、whoami、ls 均返回结果。

3. 实验过程

3.1 实验环境检查

实验开始前,我检查了 Kali 和 openEuler 的主机名、IP 地址以及 nc、socat 等工具是否可用。截图显示 Kali 主机名为 wangwenhan,eth0 地址为 192.168.239.129/24;openEuler 的系统信息截图显示地址为 192.168.239.130。Windows 虚拟机用于后续 Meterpreter 与键盘记录功能验证。
image
image

3.2 任务一:Netcat 反向 Shell

我在 Kali 侧启动 Netcat 监听后,由 openEuler 主动连接 Kali 的监听端口。实际截图显示 Kali 监听端收到来自 192.168.239.130 的连接,连接目标为 192.168.239.129:4444;连接建立后,终端返回 openEuler 系统欢迎信息,说明目标端已通过反向连接进入命令交互通道。
image

在交互过程中,我也遇到“no job control”和“ Inappropriate ioctl for device”等提示。这些信息说明当前 Shell 没有完整的伪终端控制能力,但不否定截图中已经建立的 TCP 连接和远程命令输出。报告将“反向连接建立”和“终端控制完整”作为两个不同的判断点。

3.3 任务二:Socat 定时反向连接与 Windows 计划任务

在 openEuler 中,我配置 crontab 每分钟执行一次 Socat 反向连接命令,目标地址为 Kali 的 192.168.239.129:7777。截图中的 crontab 条目包含 /usr/bin/socat、/bin/bash -li 和目标 TCP 地址;同一截图中 crond.service 状态为 active (running),说明调度服务正在运行。
image

此外,我验证了 Windows 计划任务 20242416_Windows_Task。日志文件中出现多次带时间戳的执行记录;使用 schtasks 查询任务详情时,任务状态为已启用,上次运行结果为 0,重复间隔为 5 分钟。完成验证后,我在具备相应权限的命令行中完成了任务清理。
image
image

第一次尝试删除任务时曾遇到“拒绝访问”,之后调整到具备相应权限的命令行完成删除。该问题说明任务创建者权限和删除权限需要一致考虑;清理后不应再保留持续运行的测试任务。

3.4 任务三:Meterpreter 会话与活动会话验证

我使用 Kali Linux 作为控制端,Linux 虚拟机作为目标端,采用 linux/x64/meterpreter_reverse_tcp 载荷建立反向 TCP 连接。控制端配置监听地址 192.168.239.129、端口 5555,启动监听后,目标端主动发起连接,Metasploit 成功建立 Meterpreter 会话。
image

3.5 任务四:Windows 键盘记录后门验证

在 Windows 虚拟机中,我使用记事本输入测试文本,并在活动 Meterpreter 会话中执行键盘记录功能的开始、读取和停止命令。控制端截图显示 keyscan_start 返回启动记录提示,keyscan_dump 返回捕获到的键击内容,keyscan_stop 返回停止记录提示。该组输出证明键盘记录功能在该活动会话中得到了实际调用与结果返回。
image

目标端记事本截图记录了测试输入内容。该截图作为目标端操作的配套证据;键盘记录结果以控制端 keyscan_dump 的实际输出为准,不把记事本中显示的中文文本与原始按键记录强行认定为逐字符一致。
image

3.6 任务五:Shellcode 注入与反向 Shell

任务五中,我在 Kali 的实验目录中生成输入文件。脚本输出显示输入文件总长为 175 字节,所用偏移为 44 字节,并打印了返回地址。随后,我使用本地实验程序 pwn1 读取该输入文件,并在 Kali 的 Metasploit handler 上监听反向 TCP 连接。
image

handler 输出显示监听地址为 192.168.239.129:8888,并出现 Command shell session 1 opened。由于易受攻击的 pwn1 程序和 handler 都在同一台 Kali 实验机上运行,连接两端显示相同 IP 是本地实验环境的预期结果。
image

进入会话后,我执行 id、whoami 和 ls 进行验证。输出显示当前身份为 kali,id 命令返回 uid=1000(kali),ls 能列出实验目录中的文件,说明 Shell 会话可以接收命令并返回结果。
image

4. 问题及解决方案

4.1 问题 1:编译 32 位 C 程序缺少头文件报错

问题:使用gcc -m32编译 32 位程序时,提示bits/libc-header-start.h: No such file or directory。

处理:64 位 Kali 默认未安装 32 位开发依赖,执行命令安装对应库:sudo apt install -y gcc-multilib libc6-dev-i386,安装完成后即可正常编译 32 位程序。

4.2 Socat 定时任务需要同时核对配置和服务

问题:仅有 crontab 条目不能单独证明定时任务已执行。

处理:我同时检查 crontab -l 与 systemctl status crond。截图显示每分钟运行的 Socat 条目以及 crond active (running) 状态;连接是否真正建立,则结合 Netcat/Socat 监听端的连接证据判断。

4.3 Meterpreter 命令需要在正确的命令提示符中执行

问题:在 Meterpreter 提示符中输入 sessions -l 时,程序返回该命令的用法说明;另一次 Linux/x64 Meterpreter 会话执行 keyscan_start 时提示该命令不受当前会话类型支持。

处理:sessions 属于 Metasploit 控制台层面的会话管理命令,而不是 Meterpreter 会话内的普通命令;键盘记录命令也具有平台限制。因此我根据当前提示符和 sysinfo 输出确认会话类型,将 Linux 会话排错记录与 Windows 键盘记录成功证据分开整理。
image
image

4.4 栈溢出攻击持续触发段错误

问题:构造 Payload 执行后,程序持续出现segmentation fault,无法成功获取 Shell。

处理:

  1. 通过 GDB 调试,查看崩溃时 EIP 值和栈布局,确认返回地址覆盖情况。
  2. 重新精准计算偏移量,修正为 44 字节。
  3. 调整 Payload 结构,添加 NOP 滑道,最终成功执行 Shellcode。

5. 学习感悟与思考

本次实验从基础的 netcat/socat Shell 获取,到 MSF 高级后门生成,再到栈溢出 Shellcode 注入,完整覆盖了后门原理与漏洞利用的核心流程,让我对网络攻防的认识从理论落地到了实践。

首先,我认识到后门的形态与启动方式十分多样。从最简单的 nc 一行命令反弹 Shell,到功能强大的 Meterpreter,核心都是建立隐蔽的控制通道;而 Cron 定时任务、系统服务、注册表启动项等自启动方式,是后门实现持久化的关键。这也提醒我,系统防护不能只停留在查杀恶意文件,还要重视启动项、定时任务、服务列表这些易被忽略的位置。

其次,栈溢出漏洞的实践让我深刻体会到底层编程安全的重要性。一个看似普通的gets函数,仅仅因为没有输入边界检查,就可以被攻击者完全劫持程序执行流。实验中多次因为偏移量计算偏差、栈地址环境差异导致失败,最终通过 GDB 逐字节调试栈布局才成功,这让我明白漏洞利用是极其严谨的过程,一个字节的偏差都会导致攻击失效。

最后,本次实验耗时众多,因为本人电脑摄像头和麦克风一直都使用不了,本想借着这次实验的机会修好,结果弄了一个周末还是没有弄好,只好无奈使用windows虚拟机来完成任务四的相关内容了,此外任务五也颇折磨人的。但不管怎么说实验中遇到的各类问题也确实锻炼了我的排查能力,加深了我对 Linux 系统、程序运行机制的理解。

6. 参考资料

  1. Nmap Project. Ncat Reference Guide. https://nmap.org/ncat/
  2. Rapid7. Metasploit Documentation. https://docs.metasploit.com/
  3. Microsoft Learn. schtasks command. https://learn.microsoft.com/windows-server/administration/windows-commands/schtasks
  4. Linux 手册页:crontab(5)、cron(8)、socat(1);本机工具帮助信息。
posted @ 2026-10-19 22:52  汪文涵  阅读(6)  评论(0)    收藏  举报