Cobalt Strike 4.0 Updates You Should Know

2022-01-20 13:53:47 浏览数 (1)

以下文章来源于Gcow安全团队 ,作者绝影小组

你应该知道的Cobalt Strike 4.0的更新!

代码语言:javascript复制
本文由Gcow安全团队绝影小组小离师傅原创,属于教程类文章
全文字数2348字 图片63张 预计10分钟阅读完毕
文中有一个小推荐 请各位看官不要在意

我相信大家都被一条信息给炸了锅“cobaltstrike4.0破解版出来了”,这对于我们这些穷逼来说是一件好事,今天我就带大家看看cs4.0更新了啥

在这里先声明,cobaltstrike的本意是用于教育目的,并非提供给非法渗透

一.准备

试验环境:

代码语言:javascript复制
Kali ipv4:192.168.1.119
     ipv6:出于隐私考虑,没写

靶场win2008 ipv4:192.168.1.162
                 10.10.10.80
           ipv6:处于隐私考虑,没写

靶场DC Win2012 ipv4:10.10.10.10

本文只是演示cs4.0的新特性,并非真正渗透

二.更新的内容

首先,先看看有什么主要更新

1.Stageless:

图1 Stageless payload improved

可以看到,更新日志提到Web Delivery攻击方式,在使用64位的payload的时候,使用的是stageless攻击方式,而regsvr32攻击方式同时被去掉了,因为不能注入完整的payload,同时,作者在视频中提到,在cs4.0中将会大大使用stageless,很少会使用stager.

2.移除媒介自动播放攻击

图2 Removed Windows-Dropper attack

3.新增jump横向移动命令

其实就是把以前psexecwmi等的整合到一个模块里,并且,当使用psexec_psh进行横向的时候会使用stager,其他方式均为stageless

图3 Added Jump command

4.No Powershell 偏好

图4 More inject was no powershell

5.提权新成员:SVC-exe和runasadmin

svc-exe其实就是在本地执行psexec(作者吐槽)

图5 Svc-exe added in elevate kit

图6 Runasadmin also is elevate tool

6.同时移除了ms14-058 exp 和uac-dll提权方式

图7:Remove ms14-058

图8:Remove uac-dll

7.重大更新:Listener

http/https/dns均支持一个payload填写多个ip或者域名,相当于把多个相同payloadlistener整合到一起,并且支持填入C2参数以及代理参数

a.https/http listener:

图9:Https Beacon info

代码语言:javascript复制
细心的同学可能发现,下面新的选项是用来干啥的,因为在cs4.0中,对C2攻击方式进行了优化,你可以在profile选择你在外部导入进去的c2 profile,然后修改HTTPS Port(bind)的端口为你C2 服务器的端口(我也不是很懂,如果有误的话,大佬们请指正,以免误人子弟)
b.Dns listener:

图10 Dns Beacon info

c.External C2 Listener:

图11 External C2 listener

三.看完了cs4.0的新特性,接下来开始实践一下吧

首先,先新建一个listener,在这里,你可以填写你cs服务器的公网IPv4内网IPv4IPv6(IPv6要用中括号,例[240c::6666])以及你CS服务器的域名,我在这里填入了我kaliipv4ipv6

图12 Create a listener by using Beacon https payload

这里的HTTPS Port (C2)就是上线端口

1.生成木马并执行

我这边直接生成了一个stageless的木马(不熟悉的话可以去看啊离上一篇文章)

生成的木马丢上去靶机执行然后等一小会(顺带一提:不知道是不是出于某种原因,cs直接生成的马,免杀并没有效果)

2.上线

因为我靶机有ipv6,所以beaconip也会显示ipv6,同时,因为也有ipv4,所以也会显示ipv4(意思为使用不同的协议的ip进行同时交互)

图13 Beacon in ipv6

图14 Beacon in ipv4

3.界面变化

同时CS4.0改了界面,可以显示当前的beacon进程,PID,系统位数

图15 Cobalt Strike 4.0 table view

4.提权变化

正如我上面提到,CS4.0版本已经移除了uac-dllms14-058提权方式,同时bypassuac命令被移除

图16 Elevate module

为了做实验,我生成了一个名为Priv Esclistenerpayload:tcp beacon)(建议勾选Bind to localhost only

为什么要勾选呢?作者的话:(反正就是勾选就对了)

图17 Author's words

图18 Create a listener for privilege escalation

a.UAC-token-duplication(UAC口令复制提权)

会在主机弹出一个UAC框去欺骗管理员输入密码,可能是因为域的原因,即使输入了也会提权失败,但是没关系,因为已经密码记录在内存中了,我们只需要本地提权并使用mimikatz读取密码

【按照实际情况来说,其实输入本地管理员口令的更多,这里我为了演示,在UAC弹窗中输入了域管理员口令】

UAC框框

图19 UAC

failed,but the password was logged in memory

图20 Failed when users was domain user

b.svc-exe

svc-exe这个参数,并不是和exp提权那样,帮你从普通用户 ”pwn!!“ 一下子拿下系统,而是当管理员权限满足不了你的时候,可以用svc-exe进行提升(类似getsystem命令,但是getsystem不太好使)

使用例如下情况:

图21 A administrator privilege Beacon

svc-exe priv esc:

图22 Use Svc-exe to privilege escalation

图23 Connected to system privilege beacon

c.EXP 本地提权

因为现在是域用户,又又又又只能用exp本地提权了,因为作者已经在cs4.0中删除了exp,但是你可以通过GitHubclone作者的【Elevate Kit】项目,然后在cs加载模块

cs作者的项目:https://github.com/rsmudge/ElevateKit

图24 Imported elevate kit for privilege escalation

d.runasadmin 提权模块(后面会用到)

图25 Runasadmin module

5.Recon 部分更新

a.Net模块新增俩参数
(a).net domain

图26 net domain command

(b).net domain_controllers

图27 net domain_controllers command

可以看到,计算机名为DC的就是域控,接下来可以鞭挞它了

b.横向移动改进

exp提权,然后抓密码(此处密码为刚刚UAC钓到的域管理员明文密码)

图28 Logonpassword after privilege escalation

(a).SMB Beacon改进

生成一个用于横向移动的listener,取名为LM,并使用SMB Beacon payload,可以看到,SMB Beacon支持自定义pipe name了

图29 SMB Beacon now support custom pipename

有点小伙伴要问了,为什么在旧版的cs中没有这个呢?其实,旧版cs中的pipe name是[status_端口号]

图30 Create a listener for Lateral Movement

如图,旧版cs的pipe name则为status_6001

(b).jump命令

jump命令本质上就是把原来零散的psexec,psexec64,psexec_psh,winrm,winrm64整合到一个套件里(wmi已经移除)

How to use

图31 Help of jump command

Lateral Movement kits in jump command

图32 Lateral Movement tookit in jump command

老样子,调用刚刚抓到的域凭据

make_token de1ay.comAdministrator 1qaz@WSX

图33 Use make_token command to impersonal credential

使用jump命令进行横向

jump psexec DC LM

图34 Use jump command lateral movement to DC

DC Beacon Online

图35 Connected to DC through smb beacon

(c).remote-exec 命令

可以选择以下三个套件进行远程命令执行

图36 Remote-exec module

remote-exec wmi DC netsh advfirewall set allprofiles state off (当然,和上面一样,也要先调用凭据)

图37 Use remote-exec to disable firewall on DC

(d).Invoke-Command(个人补充)

补充:在CS中,可以使用powershell-import导入ps1脚本,然后使用powerpick去执行脚本的模块

图38 You can use powershell-import command to import module

其实可以使用系统自带的Invoke-Command模块进行远程命令执行(当然,也需要调用凭据

powerpick Invoke-Command -ComputerName DC -ScriptBlock { netsh advfirewall set allprofiles state off }

图39 Use Invoke-Command module to remote disable firewall on DC

c.One-liner

oneliner其实就是生成一段在目标beacon本地运行的payload,你可以用它在目标beacon中进行花样玩耍,配合的方式有很多种,如:runas,runu,runasadmin,psinject

(a).oneliner配合runasadmin进行提权

cs中,只有当前用户名为administrator的管理员用户,cs才会自动提权,当用户名为别的管理员,cs并不会自动提权,例如以下情况:

图40 Show current user groups

可以看到,xiaoli这个用户是本地管理员,可是cs没有帮我们提权

抓密码提示权限不足

图41 Privilege less when logonpasswords

so,we can do like this

①.生成oneliner,右击beacon-Access-oneliner

在这里的话,是看beacon的arch生成oneliner,我当前的beacon是64位,所以x86和x64的payload都可以,x86 beacon只能执行x86的payload

(我当前的beacon是x86的)

图42 Generate powershell oneliner

图43 Generated Success!

runasadmin uac-wscript oneliner

图44 Use runasadmin to privilege escalation

执行完它并不会自动连接,需要去手动连接

connect 127.0.0.1

图45 Connect to beacon

图46 Connected!

重新logonpassword

图47 Re logonpasswords

(b).One-liner 配合runas生成一个指定用户的权限

在这里的话,也是看beacon的arch生成oneliner,同上

runas DE1AYAdministrator 1qaz@WSX oneliner 注:runas在system权限的beacon运行会失败

图48 Runas with oneliner

connect 127.0.0.1

图49 Connect to beacon

图50 Connected!

(c).One-liner 配合runu在指定进程执行命令

在这里的话,是看目标进程的arch生成oneliner,我的目标进程是64位,所以生成x64和x86的payload都可以,x86进程则只能生成x86 payload

runu 460 oneliner 这边选择了一个pid为460的进程

图51 Runu command with oneliner

connect 127.0.0.1

图52 Connect to beacon

图53 Connected!

同时看到该beacon的父进程就是我们刚刚所指定的

图54 Created a child session base on PPID 460

(d).Psinject使用one-liner payload注入进程

在psinject这里,x64进程可以注入x86/x64的payload,x86进程只能注入x86

图55 Choose a process for target

psinject 2784 x64 oneliner

图56 Inject powershell payload with psinject

connect 127.0.0.1

图57 Connect to beacon

connected

图58 Connected!

当然,还有更多的姿势等你来解锁~

d.Link / Connect and unlink

link支持指定pipe nameconnect支持指定端口unlink支持指定pid号,其目的是为了可以更好管理多个smb beacon listenertcp beacon listener

link ip pipe_name(图中因为没有111这个pipe name,连不上就报错了)

图60 Link to a beacon through assign pipename

connect ip port

图61 Connect to tcp beacon through assign port

unlink ip pid

图62 Unlink beacon through assign process

四.总结

作为一名有职业道德的伸手党,要时刻记得吃水不忘挖井人的道理,所以在这里要非常感谢WBGlIl大大,以及Yansu大大提供的二次元版

图63 cs二次元版作者大大

问答环节:

代码语言:javascript复制
Q&A

问:为什么x64的beacon和session可以同时兼容x86和x64的payload?

答:CS特性,作者超级偏爱x86,link:https://blog.cobaltstrike.com/2016/03/10/cobalt-strike-3-2-the-inevitable-x64-beacon/


问:为什么作者强推Stageless?

答:因为stager不安全,更脆弱,容易被检测

0 人点赞