获取凭证和哈希
要
dump
哈希,通过
[beacon]
→
Access
→
Dump Hashes
。你也可以使用在
Beacon
控制台中使 用 hashdump
命令。这些方法会派生一个任务注入进
LSASS
进程并
dump
当前系统中本地用户的密码哈希。
logonpasswords
命令会使用
mimikatz
来恢复登录过当前系统的用户的明文密码和哈希。
logonpasswords
命令等同于选项中的
[beacon]
→
Access
→
Run Mimikatz
。
使用
dcsync [DOMAIN.FQDN]
命令从域控中提取所有帐户的密码哈希。此技术使用了用于在域控之间同步信息的 Windows API
。它需要域管理员信任关系。
Beacon
使用
mimikatz
来执行此技术。如果你想要一个特定的密码哈希,使用 dcsync [DOMAIN.FQDN] [DOMAIN\user]
命令。
使用这些命令
dump
下来的凭据会被
Cobalt Strike
收集并存储在凭据数据模型中。通过
View
→
Credentials
来在当前团队服务器拉取查看凭据。
端口扫描
Beacon
有一个内置的端口扫描工具。使用
portscan [targets] [ports] [discovery method]
来
启动端口扫描任务。可以指定以逗号分隔的目标范围列表,端口亦是如此。比如,
portscan
172.16.48.0/24 1
-
1024,8080
会扫描从
172.16.48.0
到
172.16.48.255
主机的
1
到
1024
和
8080
端
口。 有三种目标发现选项。 arp
方法使用
ARP
请求来发现一个主机是否存活。
icmp
方法发送一个
ICMP
echo
请求来检查一个目标是否存活。
none
选项让端口扫描工具假设所有的主机都是存活的。
端口扫描会在
Beacon
和团队服务器通讯的这个过程中不停运行。当它有可以报告的结果,它会把结果发送到 Beacon
控制台。
Cobalt Strike
会处理这个信息并使用发现的主机更新目标模型。
网络和主机枚举
Beacon
的网络模块提供了在
Windows
活动目录网络中查询和发现目标的工具。
使用
net dclist
命令查找目标所在域的域控。使用 net view
命令来查找目标所在域的域内目标。这些命令也填充目标模型。 net computers
命令通过在一个域控上查询电脑账号组来查找目标。
Beacon
的网络模块中的命令是在
Windows
网络枚举
API
的基础上构建的。这些命令中的大多数是直接替换了很多 Windows
中内置的网络命令。也有一些独特的功能,比如,使用
net localgroup \\TARGET 来列举另一个系统上的组。使用
net localgroup \\TARGET group name
来列举另一个系 统上的组内成员。这些命令在横向移动时候很好用,比如当你要去寻找另一个系统上的本地管理员时。 使用 help net 来获取
Beacon
的网络模块中所有命令的列表。使用
help net command
来获取每个单独命令的帮助信息。
信任关系
Windows
单点登录机制的核心是访问令牌。当一个用户登入到一个
Windows
主机时,就会生成一个访问令牌。此令牌包含关于用户及其权限的信息。访问令牌还包含需要对当前用户进行身份验证到网络上的另一个系统的信息。模拟或生成一个令牌,Windows
会使用它的信息来为你身份验证到一个网络资源。
使用
steal_token [pross id]
来模拟一个现存进程的令牌。使用
ps
命令查看哪些进程正在运行。
使用
getuid
命令会打印你的当前令牌。使用
rev2self
来恢复至你的原始令牌。
如果你知道一个用户的凭据,使用
make_token [DOMNAIN\user] [password]
来生成一个传递这些凭据的令牌。这个令牌是你当前令牌的复制,带有修改的单点登录信息。它会展示你当前的用户名,这是预期的行为。
使用
mimikatz
来使用
Beacon
传递哈希。
Beacon
命令
pth [DOMAIN\user] [ntlm hash]
会创建和
模拟一个访问令牌来传递特定的哈希。
Beacon
的制作令牌对话框(
[beacon]
→
Access
→
Make Token
)是这些命令的前端。它将显示凭据模型的内容,并使用正确的命令将选定的凭据项转化为访问令牌。
Kerberos 票据
使用
kerberos_ticket_use [/path/to/ticket]
来将
Kerberos
票据注入当前会话。这将允许
Beacon
与远程系统使用此票据的权限进行交互。可以通过由
mimikatz 2.0
生成的黄金票据来进行此操作。使用 kerberos_ticket_purge
来清除任何与你的会话相关联的
Kerberos
票据。
横向移动
一旦你有了域管理员或者是目标机器上的本地管理员域用户的令牌,你可以通过滥用这种信任关系来控 制目标。Cobalt Strike
的
Beacon
内置有一些横向移动的选项。
输入
jump
来列出
Cobalt Strike
中注册的横向移动的选项。运行
jump [module] [target]
[listener]
来尝试在远程目标上运行一个
payload
。
Jump
模块
|
架构
|
描述
|
psexec
|
x86
|
使用一个服务来运行一个服务可执行文件
|
psexec64
|
x64
|
使用一个服务来运行一个服务可执行文件
|
psexec_psh
|
x86
|
使用一个服务来运行一个
PowerShell
单行程序
|
winrm
|
x86
|
通过
WinRM
来运行一个
PowerShell
脚本
|
winrm64
|
x64
|
通过
WinRM
来运行一个
PowerShell
脚本
|
单独运行
remote
-
exec
命令来列举
Cobalt Strike
中注册的远程执行模块。使用
remote
-
exec
[module] [target] [command+args]
来尝试在远程目标主机上运行特定的命令。
Remote-exec
模块
|
描述
|
psexec
|
通过服务控制管理器远程执行
|
winrm
|
通过
WinRM
(
PowerShell
)远程执行
|
wmi
|
通过
WMI
(
PowerShell
)远程执行
|
横向移动是一个领域,就类似于特权提升,在此领域中一些攻击呈现出自然的在远程目标上派生会话的原语集。一些攻击仅仅给一个可执行原语。 jump
和
remote
-
exec
命令之间的分离给了你自主决定如何去武器化仅执行原语的灵活性。
Cobalt Strike
也提供一个
GUI
来使得横向移动更加简单。
要使用此对话框:
首先,决定你想用哪种信任来进行横向移动。如果你想使用你的某个
Beacon
中的令牌,勾选
Use session's current access token (使用会话的当前访问令牌)框。你也可以使用凭据或哈希来进 行横向移动。从凭据存储中选择凭据或者手动填写 User
、
Password
和
Domain
字段。
Beacon
会使用此信息来为你生成一个访问令牌。记住,你需要在高权限的上下文(管理员权限)中执行这些操作才能生效。
接下来,选择用于横向移动的监听器。在这种场景中,
SMB Beacon
通常是一个很好的选择。
最后,选择你想从哪个会话中执行横向移动攻击。
Cobalt Strike
的异步攻击模型要求每一个攻击都从一个受害系统中执行。如果没有可以展开攻击的 Beacon
会话就没有可以执行此操作的选项。如果你在一 个内部行动中,考虑 hook
一个你控制的
Windows
系统并以其作为你使用凭据或哈希攻击其他系统的起点。