
以下文章来源于Gcow安全团队 ,作者绝影小组
本文由Gcow安全团队绝影小组小离师傅原创,属于教程类文章
全文字数2348字 图片63张 预计10分钟阅读完毕
文中有一个小推荐 请各位看官不要在意我相信大家都被一条信息给炸了锅“cobaltstrike4.0破解版出来了”,这对于我们这些穷逼来说是一件好事,今天我就带大家看看cs4.0更新了啥
在这里先声明,cobaltstrike的本意是用于教育目的,并非提供给非法渗透
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 payload improved
可以看到,更新日志提到Web Delivery攻击方式,在使用64位的payload的时候,使用的是stageless攻击方式,而regsvr32攻击方式同时被去掉了,因为不能注入完整的payload,同时,作者在视频中提到,在cs4.0中将会大大使用stageless,很少会使用stager.

图2 Removed Windows-Dropper attack
其实就是把以前psexec,wmi等的整合到一个模块里,并且,当使用psexec_psh进行横向的时候会使用stager,其他方式均为stageless

图3 Added Jump command

图4 More inject was no powershell
svc-exe其实就是在本地执行psexec(作者吐槽)

图5 Svc-exe added in elevate kit

图6 Runasadmin also is elevate tool

图7:Remove ms14-058

图8:Remove uac-dll
http/https/dns均支持一个payload填写多个ip或者域名,相当于把多个相同payload的listener整合到一起,并且支持填入C2参数以及代理参数

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

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

图12 Create a listener by using Beacon https payload
这里的HTTPS Port (C2)就是上线端口
我这边直接生成了一个stageless的木马(不熟悉的话可以去看啊离上一篇文章)
生成的木马丢上去靶机执行然后等一小会(顺带一提:不知道是不是出于某种原因,cs直接生成的马,免杀并没有效果)
因为我靶机有ipv6,所以beacon的ip也会显示ipv6,同时,因为也有ipv4,所以也会显示ipv4(意思为使用不同的协议的ip进行同时交互)

图13 Beacon in ipv6

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

图15 Cobalt Strike 4.0 table view
正如我上面提到,CS4.0版本已经移除了uac-dll和ms14-058提权方式,同时bypassuac命令被移除

图16 Elevate module
为了做实验,我生成了一个名为Priv Esc的listener(payload:tcp beacon)(建议勾选Bind to localhost only)
为什么要勾选呢?作者的话:(反正就是勾选就对了)

图17 Author's words

图18 Create a listener for privilege escalation
会在主机弹出一个UAC框去欺骗管理员输入密码,可能是因为域的原因,即使输入了也会提权失败,但是没关系,因为已经密码记录在内存中了,我们只需要本地提权并使用mimikatz读取密码
【按照实际情况来说,其实输入本地管理员口令的更多,这里我为了演示,在UAC弹窗中输入了域管理员口令】
UAC框框

图19 UAC
failed,but the password was logged in memory

图20 Failed when users was domain user
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
因为现在是域用户,又又又又只能用exp本地提权了,因为作者已经在cs4.0中删除了exp,但是你可以通过GitHub去clone作者的【Elevate Kit】项目,然后在cs加载模块
cs作者的项目:https://github.com/rsmudge/ElevateKit

图24 Imported elevate kit for privilege escalation

图25 Runasadmin module

图26 net domain command

图27 net domain_controllers command
可以看到,计算机名为DC的就是域控,接下来可以鞭挞它了
exp提权,然后抓密码(此处密码为刚刚UAC钓到的域管理员明文密码)

图28 Logonpassword after privilege escalation
生成一个用于横向移动的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
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.com\Administrator 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
可以选择以下三个套件进行远程命令执行

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

图37 Use remote-exec to disable firewall on DC
补充:在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
oneliner其实就是生成一段在目标beacon本地运行的payload,你可以用它在目标beacon中进行花样玩耍,配合的方式有很多种,如:runas,runu,runasadmin,psinject
在cs中,只有当前用户名为administrator的管理员用户,cs才会自动提权,当用户名为别的管理员,cs并不会自动提权,例如以下情况:

图40 Show current user groups
可以看到,xiaoli这个用户是本地管理员,可是cs没有帮我们提权
抓密码提示权限不足

图41 Privilege less when logonpasswords
so,we can do like this
在这里的话,是看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
在这里的话,也是看beacon的arch生成oneliner,同上
runas DE1AY\Administrator 1qaz@WSX + oneliner 注:runas在system权限的beacon运行会失败

图48 Runas with oneliner
connect 127.0.0.1

图49 Connect to beacon

图50 Connected!
在这里的话,是看目标进程的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
在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!
当然,还有更多的姿势等你来解锁~
link支持指定pipe name,connect支持指定端口,unlink支持指定pid号,其目的是为了可以更好管理多个smb beacon listener与tcp 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

图63 cs二次元版作者大大
问答环节:
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不安全,更脆弱,容易被检测