内网渗透是每一个安全工程师绕不过去的难题,为什么大家都觉得内网渗透要比其他方面的渗透测试更为头疼,其实主要原因还是在大家对攻入目标网络的环境感到陌生罢了。第一次进入目标内网,独自一人面对庞大的目标系统网络、各种复杂的分区结构,很容易犯迷糊。如果这时能有个team帮助你一起探索内网、一起协作,显然会使得内网渗透的难度大大降低。
本期美创安全实验室将给大家介绍一款能够用于内网渗透时团队协同作战的工具“Cobalt Strike”。
01 CobaltStrike工具简介Cobalt Strike是一款以metasploit为基础的GUI的框架式渗透工具,集成了端口转发、服务扫描,自动化溢出,多模式端口监听,winexe木马生成,win dll木马生成,java木马生成,office宏病毒生成,木马捆绑;钓鱼攻击包括:站点克隆,目标信息获取,java执行,浏览器自动攻击等等。
Cobalt Strike主要用于团队作战,可以说是内网渗透中的团队渗透神器,CobaltStrike能够让多个攻击者同时连接到团队服务器上,共享攻击资源与目标信心和Session。要知道众人拾柴火焰高的道理,当我们发现一个内网控制点后,为了使我们的攻击收益最大化,最好的办法就是跟团队共享资源,给其他成员提供同样的接入点,Cobalt Strike很好的做到了这一点。因此Cobalt Strike作为一款协同APT工具,针对内网的渗透测试和作为APT的终端控制功能,使其变成众多APT组织的首选工具。
02 Cobalt Strike功能使用1. 安装Cobalt Strike
a) 服务端:
在服务端执行teamserver即可,命令格式为./teamserver
一般来说,如果团队成员都处在一个局域网下,那么只需要找一台能够访问到目标内网的机器当作服务端即可,例如本机、跳板机等等,不一定非得使用VPS,还需要考虑目标内网是否能出网。
b) 客户端:
在客户端,只需要运行cobaltstrike.jar文件,默认连接服务端的端口是50050,但要注意的是必须要与服务端所启动的版本相同,例如服务端使用了cobaltstrike3.8版本的teamserver,那么客户端就必须启动cobaltstrike3.8的jar文件,才不会出错。
正确填写服务端IP以及端口和密码即可,成功连接服务端。
2. Cobalt Strike功能介绍
|Cobalt Strike
|
|
|
|
|
|
|
|
|
|View
|
|
|
|
|
|
|
|
|
|
|Attacks
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|Reporting #报告展示模块
3. Cobalt Strike使用方法
在熟悉了Cobalt Strike界面上所提供的功能后,我们接下来着重讲解一下Cobalt Strike的使用方法。使用Cobalt Strike最主要的目的是为了让团队的其他成员也能够对我们控制的内网肉鸡进行操作,所以我们第一步肯定是让我们的内网受控机成功上线。
首先使用Cobalt Strike自带的Attacks模块生成我们所需要的木马文件,所以我们点击Attacks->Packages,根据受控机的具体操作系统及版本选择对应类型的木马文件,假设我们控制了一台WIN2012的内网主机,那么我们选择packages中的Windows Executable功能,想要生成一个EXE类型的木马文件。
这里我们需要配置一下Listener监听器,监听器的概念在很多工具中都出现过,像什么Metasploit、Empire等等,这里就不再赘述。总而言之,在配置监听器时Cobalt Strike只提供了9种payload,如下图:
将以上信息配置好后,点击Generate(生成)我们就得到了一个EXE类型的木马文件。
将木马文件通过上传点传入目标主机并执行,就可以惊喜的发现在Cobalt Strike出现了目标机的信息。而团队的其他成员也都可以对这台机器进行操作了。
成功将所控制的目标机资源上线之后,团队内的其他成员即可对该台机器进行进一步渗透。团队成员通过点击目标机右键,选择Interact功能,就可以开始对目标及进行操作,但是团队成员所能操作的就是beacon所提供的各种命令,接下来我们来看一看Beacon都提供了什么指令给渗透人员。
4. Beacon的指令介绍
browserpivot 注入受害者浏览器进程
bypassuac 绕过UAC提升权限
cancel 取消正在进行的下载
cd 切换目录
checkin 强制让被控端回连一次
clear 清除Beacon内部的任务队列
covertvpn 部署Covert VPN客户端
cp 复制文件
dcsync 从DC中提取密码Hash
desktop 远程桌面服务
dllinject 反射DLL注入进程
download 下载文件
downloads 列出正在进行的文件下载
drives 列出目标盘符
elevate 使用exp
execute 在目标机上执行程序
exit 结束beacon会话
getsystem 尝试获取SYSTEM权限
getuid 获取用户ID
hashdump 转储密码Hash值
inject 在注入进程生成会话
jobkill 结束一个后台任务
jobs 列出后台任务
kerberos_ccache_use 从cache文件中导入票据应用于此会话
kerberos_ticket_purge 清除当前会话的票据
kerberos_ticket_use 从ticket文件中导入的票据应用于此会话
keylogger 键盘记录
kill 结束进程
link 通过命名管道连接到Beacon对等点
logonpasswords 使用Mimikatz转储密码hash和凭证
ls 列出文件
make_token 创建令牌以传递凭据
mimikatz 运行Mimikatz命令
mkdir 创建目录
mode dns 使用DNS A作为通信通道
mode dns-txt 使用DNS TXT作为通信通道
mode dns6 使用DNS AAAA作为通信通道
mode http 使用HTTP作为通信通道
mv 移动文件
net 运行net命令
note 备注
portscan 端口扫描
powerpick 通过unmanaged powershell执行命令
powershell 通过powershell.exe执行命令
powershell-import 导入powershell脚本
ppid 为派生的post-ex进程设置父PID
ps 展示进程列表
psexec 使用服务在主机上生成会话
psexec_psh 使用PowerShell在主机上生成会话
psinject 在特定进程中执行PowerShell命令
pth 使用Mimikatz进行哈希传递
pwd 显示出当前目录
rev2self 恢复原始令牌
rm 删除文件或文件夹
rportfwd 端口转发
runas 以其他用户权限执行程序
runu 以其他进程ID执行程序1
screenshot 屏幕截图
shell 执行cmd命令
shinject 将shellcode注入进程
shspawn 启动一个进程并将shellcode注入
sleep 设置休眠时间
socks 启动SOCKS4代理
socks stop 停止SOCKS4
spawn 生成会话
spawnas 以另一用户身份生成会话
spawnu 以另一进程ID生成会话
ssh 使用ssh连接远程主机
ssh-key 使用密钥连接远程主机
steal_token 从进程中窃取令牌
timestomp 将一个文件的时间戳应用到另一个文件
unlink 断开连接
upload 上传文件
wdigest 使用Mimikatz转储明文凭据
winrm 使用WinRM横向渗透
wmi 使用WMI横向渗透
03 Cobalt Strike内网实战网络环境:
攻击机IP:192.168.20.35
目标内网跳板机:192.168.210.102(WIN10)
目标内网域控机:192.168.210.108(WinServer 2012)
假设成员A已经成功让内网某台机器(192.168.210.102)上线Cobalt Strike,成员B开始尝试进一步内网渗透,首先查看该台机器的信息。可以看到,这台机器处在一个HZMC的域中,所以我们的下一步计划就是想办法拿下域控主机DC。
根据我们上一篇文章,详细介绍了寻找域控主机的几种方法,例如ping 域名或者net view /domain等等,我们成功发现了域控主机的IP,为192.168.210.108
接下来我们尝试看看在102的机器上是否保留有域控密码,所以我们使用Mimikatz读取一下本地的密码转储,果然发现了域账户密码的NTLM,虽然没发现明文有点可惜,毕竟W10以上的系统已经默认不存储明文密码了,但是我们可以利用NTLM实行哈希传递。
跟据我们前几篇文章所分析过的哈希传递攻击一样,我们在102这台机器上,利用域账户的NTLM进行PTH,执行以下命令:
mimikatz sekurlsa::pth /user:administrator
/domain:HZMC /ntlm: /run:"cmd -whidden"
成功传递,并执行了一个CMD程序,通过获取CMD的进程ID可以得知,他的PID是5040.
接下来,我们利用Cobalt Strike提供的窃取令牌功能,获得刚刚创建CMD的进程的令牌,执行以下命令:
Stael_token 5040
这时我们已经获得了与域控CMD交互的权限。
但这还不够,我们需要一个更为稳定的权限,最好能将域控DC上线到Cobalt Strike中,所以我们远程创建一个计划任务,并将一个远程木马文件利用copy命令传入到目标机中,通过计划任务来触发该木马文件的执行,使其成功上线。
最终域控机成功上线,至此我们成功获得了该域内所有机器的访问权限。