Cobaltstrike内网渗透神器
时间:2022-05-23
前言
内网渗透是每一个安全工程师绕不过去的难题,往往内网渗透要比其他方面的渗透测试更为头疼,其实主要原因还是在大家对攻入目标网络的环境感到陌生罢了。第一次进入目标内网,独自一人面对庞大的目标系统网络、各种复杂的分区结构,很容易犯迷糊。如果这时能有个 Team 帮助你一起探索内网、一起协作,显然会使得内网渗透的难度大大降低。本文要介绍的就是业内知名的一款能够用于内网渗透时团队协同作战的工具“Cobalt Strike”。
Cobalt Strike 是一款美国 Red Team 开发的渗透测试神器,常被业界人称为 CS。它是一款以 Metasploit 为基础的 GUI 的框架式渗透工具,集成了端口转发、服务扫描、自动化溢出、多模式端口监听、Winexe 木马生成、Win dll 木马生成、Java 木马生成、office宏病毒生成、木马捆绑等;钓鱼攻击包括:站点克隆、目标信息获取、Java执行、浏览器自动攻击等。Cobalt Strike 项目的官网地址:https://www.cobaltstrike.com。
Cobalt Strike 主要用于团队作战,可以说是内网渗透中的团队渗透神器, CobaltStrike 能够让多个攻击者同时连接到团队服务器上,共享攻击资源与目标信心和 Session。要知道众人拾柴火焰高的道理,当我们发现一个内网控制点后,为了使我们的攻击收益最大化,最好的办法就是跟团队共享资源,给其他成员提供同样的接入点,Cobalt Strike 很好的做到了这一点。因此 Cobalt Strike 作为一款协同 APT 工具,针对内网的渗透测试和作为 APT 的终端控制功能,使其变成众多 APT 组织的首选工具。
实际上 Cobaltstrike 的社区版是大家熟知的 Armitage (一个 MSF 的图形化界面工具),而 Cobaltstrike 大家可以理解其为 Armitage 的商业版。关于 MSF 框架和 Armitage 图形工具的简介,可参加我的另一篇博文:渗透测试-Metasploit实战:https://blog.csdn.net/weixin_39190897/article/details/104285302。
基本使用
Cobalt Strike 4.0的下载和中文使用手册地址:渗透利器Cobalt Strike4.0下载(附汉化版、视频教程、中文使用手册、插件):https://my.oschina.net/u/4587410/blog/4551030。
CS服务搭建
Cobalt Strike 分为客户端和服务端,可分布式操作、协同作战。服务器端只能运行在 Linux 系统中,可搭建在 VPS 上,团队成员使用的图形化客户都安界面(Client GUI) 连接服务端。
服务端搭建
将下载后的 Cobaltstrike 4.1 安装包上传到 VPS 服务器上并解压缩,服务端关键的文件是 teamserver,先将其修改位可执行文件,再执行./teamserver可以看到如下说明:
解释下启动参数含义:
./teamserver [/path/to/c2.profile] [YYYY-MM-DD] 必需参数 团队服务器IP 必需参数 连接服务器的密码[/path/to/c2.profile] 可选参数 指定C2通信配置文件,体现其强大的扩展性[YYYY-MM-DD] 可选参数 所有payload的终止时间
那么执行以下命令启动 CS 服务:
以上就成功搭建好 Cobaltstrike 服务端了,请注意两点:
1. Team server 必须以 root 权限运行,以便于监听端口号为 0–1023 的 Listener;
2. 同时服务端默认使用 50050 端口监听来自团队成员 CS Client 的连接请求。
客户端连接
Cobaltstrike 客户端在 Windows、Linux、Mac下都可以运行 (需要配置好 Java 环境)。启动 Cobalt Strike 客户端,输入服务端的IP以及端口、连接密码,用户名可以任意设置:
如图已成功连接到 CS 服务端:
CS功能概览
|Cobalt Strike|<-------New Connection #建立新的连接,允许连接多个服务器端|<-------Preferences #偏好设置(界面、控制台样式设置等)|<-------Visualization #窗口视图模式(结果输出模式) |<-------Pivot Graph #透视图模式 |<-------Session Table #Session表模式 |<-------Target Table #目标表模式|<-------VPN Interfaces #VPN接入|<-------Listeners #监听器(创建Listener)|<-------Script Manager #脚本管理功能 |View|<-------Applications #显示目标机的应用信息|<-------Credentials #凭证(所有通过Mimikatz抓取的密码都存储在这里)|<-------Downloads #下载文件|<-------Event Log #事件日志,主机上线记录及团队交流记录|<-------Keystrokes #键盘记录|<-------Proxy Pivots #代理模块|<-------Screenshots #查看目标机截图|<-------Script Console #脚本控制台|<-------Targets #显示目标主机|<-------Web Log #Web日志 |Attacks|<-------Packages |<-------HTML Application #生成恶意的HTA木马 |<-------MS Office Macro #生成Office宏病毒文件 |<-------Payload Generator #生成各种语言版本的payload |<-------USB/CD AutoPlay #生成自动播放执行的木马文件 |<-------Windows Dropper #捆绑器、实现对文档类进行捆绑 |<-------Windows Executable #生成EXE的payload |<-------Windows Executable(S) #把包含payload,Stageless生成EXE|<-------Web Drive-by #钓鱼攻击 |<-------Manage #对开启的Web服务进行管理 |<-------Clone Site #克隆网站 |<-------Host File #提供Web以供下载某文件 |<-------Scripted Web Delivery #提供Web以供下载powershell |<-------Signed Applet Attack #使用java自签名的程序进行钓鱼 |<-------Smart Applet Attack #自动检测java版本进行攻击 |<-------System Profiler #用来获取系统信息|<-------Spear Phish #邮件钓鱼 |Reporting #报告展示模块
权限获取
了解了 Cobalt Strike 界面上所提供的功能后,接下来演示下 Cobalt Strike 的使用方法。使用 Cobalt Strike 最主要的目的是为了让团队的其他成员也能够对我们控制的内网肉鸡进行操作,所以我们第一步肯定是让我们的内网受控机成功上线。
配监听器&生成Payload
1、访问监听器功能:
2、创建新的监听器:
监听器的各类参数如下:
Cobaltstrike 4.1 版本提供了 8 种监听器,
1. beacon_xx 系列为 Cobalt Strike 自身内置的监听器,即在目标主机执行相应的payload,获取 shell 到 CS 上,包括 dns、http、https、smb 四种方式的监听器;
2. foreign 系列为外部监听器,通常与 MSF 或者 Armitage 联动,例如获取 meterpreter 到 MSF上。
生成 Payload
假设我们控制了一台 WIN7 的内网主机,想要生成一个 EXE 类型的 Payload 文件,可使用 Cobalt Strike 自带的 Attacks 模块生成我们所需要的Payload 文件:
选择监听器为上面新增配置的监听器 Test:
运行Payload & Beacon
将生成的 Payload 文件 artifact.exe 传 输到 Win7 虚拟机(受害主机)并双击运行 Payload:
接着即可看到 Cobalt Strike 客户端出现了目标主机的信息,同时团队的其他成员也都可以对这台机器进行操作了:
Beacon
成功将所控制的目标机资源上线之后,团队内的其他成员即可对该台机器进行进一步渗透。团队成员通过点击目标机右键,选择 Interact 功能(进入 beacon),就可以用它来执行各种命令,开始对目标及进行操作:
【注意】
在 Cobalt Strike 中,默认心跳为 60s(即 CS 与受害机默认 60s 才进行一次交互),故执行命令的响应速度很慢,在下载文件时更加明显,所以根据实战环境把时间降低,建议不要太快,否则流量会相对明显。在这里执行命令 sleep 5 可以把交互时间设置为 5 秒。
同时在 beacon 中,如果想对目标进行命令管理,需要在前面加上shell关键词,如shell whoami、shell ipconfig等。
但是团队成员所能操作的就是 Beacon 所提供的各种命令,接下来我们来看一看 Beacon 都提供了什么指令给渗透人员,执行 help 命令即可参看各项命令说明:
进一步可用help+命令的方式查看具体命令参数说明:
简单介绍下各项命令
Beacon Commands=============== Command Description ------- ----------- argue 进程参数欺骗 blockdlls 在子进程中阻止非Microsoft的DLLs文件 browserpivot 注入受害者浏览器进程 bypassuac 绕过UAC cancel 取消正在进行的下载 cd 切换目录 checkin 强制让被控端回连一次 clear 清除beacon内部的任务队列 connect 通过TCP连接到Beacon covertvpn 部署Covert VPN客户端 cp 复制文件 dcsync 从DC中提取密码哈希 desktop 远程VNC dllinject 反射DLL注入进程 dllload 使用LoadLibrary将DLL加载到进程中 download 下载文件 downloads 列出正在进行的文件下载 drives 列出目标盘符 elevate 尝试提权 execute 在目标上执行程序(无输出) execute-assembly 在目标上内存中执行本地.NET程序 exit 退出beacon getprivs 对当前令牌启用系统权限 getsystem 尝试获取SYSTEM权限 getuid 获取用户ID hashdump 转储密码哈希值 help 帮助 inject 在特定进程中生成会话 jobkill 杀死一个后台任务 jobs 列出后台任务 kerberos_ccache_use 从ccache文件中导入票据应用于此会话 kerberos_ticket_purge 清除当前会话的票据 kerberos_ticket_use 从ticket文件中导入票据应用于此会话 keylogger 键盘记录 kill 结束进程 link 通过命名管道连接到Beacon 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 为生成的post-ex任务设置父PID ps 显示进程列表 psexec 使用服务在主机上生成会话 psexec_psh 使用PowerShell在主机上生成会话 psinject 在特定进程中执行PowerShell命令 pth 使用Mimikatz进行传递哈希 pwd 当前目录位置 reg 查询注册表 rev2self 恢复原始令牌 rm 删除文件或文件夹 rportfwd 端口转发 run 在目标上执行程序(返回输出) runas 以另一个用户权限执行程序 runasadmin 在高权限下执行程序 runu 在另一个PID下执行程序 screenshot 屏幕截图 setenv 设置环境变量 shell cmd执行命令 shinject 将shellcode注入进程 shspawn 生成进程并将shellcode注入其中 sleep 设置睡眠延迟时间 socks 启动SOCKS4代理 socks stop 停止SOCKS4 spawn 生成一个会话 spawnas 以其他用户身份生成会话 spawnto 将可执行程序注入进程 spawnu 在另一个PID下生成会话 ssh 使用ssh连接远程主机 ssh-key 使用密钥连接远程主机 steal_token 从进程中窃取令牌 timestomp 将一个文件时间戳应用到另一个文件 unlink 断开与Beacon的连接 upload 上传文件 wdigest 使用mimikatz转储明文凭据 winrm 使用WinRM在主机上生成会话 wmi 使用WMI在主机上生成会话
下面看一下一些实际的命令执行效果:
1、keylogger 键盘记录
在靶机浏览器输入访问百度的请求:
查看键盘记录:
2、screenshot 屏幕截图
查看截图结果:
3、net view 查看局域网主机
4、portscan 执行端口扫描
如图可以选择目标靶机右键勾选执行操作:
此时 Beacon 中会自动执行对应命令并输出:
社会工程
接下来简单看下 CS 里面的社会工程学功能:
克隆网站&键盘记录
该模块用来克隆一个网站,来获取用户的键盘记录:
被克隆的站点为:
此时靶机(物理机或者随便一个主机都行)访问目标链接:
此时访问 Web 日志功能可以查看用户输入的密码信息:
同时记录往用户的输入,站点会自动跳转到真实的站点链接上:
社工邮件&链接传送
接下来继续看下 CS 的一个社工功能——社工邮件:
配置社工邮件:
配置描述:
targets 发送的目标信息,可导入本地的txt 格式:xxxx@xxx.comtmplate 邮件模板,一般在邮件的更多选项中 ,选择导出,或者显示原文attachment 附件Embed URL 要嵌入的网址(可以是社工链接)Mail server SMTPBounce to 模仿发件人preview 预览我们的模板文件
其中邮件模板的获取如:
此处 MailServer 配置一直失败,原因不详,请知情大佬赐教……
主机进阶
为了方便接下来的演示,将 Win7 靶机切换到管理员账户后重新上线:
【Win7 切换到管理员账户的方法】以管理员身份运行 CMD,执行命令:net user administrator /active:yes,重启 Windows 系统,然后切换 Administrator 账户登录即可,或者进入桌面后注销,切换到其他账户登录。
抓取Hash和dump明文密码
这两项功能都需要管理员权限,如果权限不足,需要先提权。
1、抓取主机用户密码 Hash 值(也可以直接输入命令:hashdump)
2、使用 mimikatz 抓取明文密码(也可以直接输入命令:logonpasswords):
3、抓取完之后,点击 “凭证信息”,就会显示我们抓取过的哈希或者明文。这里我们也可以手动添加或修改凭证信息:
使用在线 Hash 计算对比下已知的密码:
同时发现管理员账户是空密码:
【注意】内网渗透有一个技术很实用的技术就是,密码喷洒攻击。说白就是拿收集到的靶机密码去碰撞内网其他主机的密码,往往会发现很多主机密码是相同的!详情可参见:域内用户枚举和密码喷射浅析:https://mp.weixin.qq.com/s/ub0whpXQ2Epk3DOsJxjpJw 。
普通权限用户提权到管理员
实际上内网渗透经常碰见的情况就是拿到 shell 后发现是普通管理员,这个时候为了获得更高权限、读取密码 hash 等就需要尝试进行提权了。为了进行演示实验,我们将 Win7 靶机继续切换回普通用户登录并上线到 CS 中:
1、尝试进行主机提权:
选择监听器和 EXP(此版本的 CS 只有两类提权的 EXP):
2、提权失败:
3、该默认 EXP 无法提权没关系,我们还可以自己加入一些提权脚本进去。在 Github 上有一个提权工具包,使用这个提权工具包可以增加几种提权方法:https://github.com/rsmudge/ElevateKit 。下载好该提权工具包后,导入:
此时再选择提权则有多种 EXP 可以选择了:
4、发现使用 ms14-058 可成功提权,CS 弹回来一个 system 权限的 beacon :
5、提权后可以抓取主机用户密码 Hash 值了:
Socks4 代理实现内网穿透
当我们控制的主机是一台位于公网和内网边界的服务器 ,我们想利用该主机继续对内网进行渗透,于是,我们可以利用 CS 来建立 Socks4 代理。
1、首先我们先在 Win7 靶机搭建 DVWA 服务:
2、接着设置 Socks4 代理:
需要输入一个未占用的端口即可,CS 会给出一个默认端口,我们直接点击开始即可。
3、至此便完成在自己的主机上设置 Socks4 代理(代理 IP 是我们 CS 服务端的 IP,端口即是 1485),如果我们想查看整个 CS 代理的设置,可以点击 View 查看:
4、接下来,我在一台连接着我手机热点(1号WIFI)的电脑的谷歌浏览器设置代理,如下图所示:
5、然后访问 http://192.168.0.106/DVWA/login.php 即可成功访问到家用网络 WIFI 环境(2号WIFI)下的 Win7 靶机的内网服务(DVWA靶场),实现内网穿透:
【注意】实战经验总结:
在实际的渗透测试过程中,我们可以借助已经拿到 Shell 的外网靶机(此处的 Win7) 当跳板机,访问靶机所在的内网的主机和 Web 服务,使用 Socks4 代理即可在自己的物理机中访问到目标内网的服务;
虽然上述直接在物理机的浏览器设置 CS 服务器 IP 的代理可以达到访问目标内网的目的,但是这样子我们没法使用 BurpSuite 开展进一步的渗透测试,因此还可以用另一种流量代理方案——在浏览器设置 Burp 代理,然后在 Burp 中设置 CS 服务器的 Socks4 代理:
总结
Cobaltstrike 功能强大复杂,篇幅所限,不再继续展开介绍,更多教程请参见:安全客谢公子的文章(很全):CobaltStrike使用详解 :https://www.anquanke.com/post/id/235251#h3-5;Cobaltstrike 的批量详细使用教程:CN-SEC 中文网:http://cn-sec.com/archives/tag/cobaltstrike/; 语雀 xiaogege-yxttw 大佬的专栏:Cobaltstrike:https://www.yuque.com/xiaogege-yxttw/pmozby/cobaltstrike;Github资源合集:Awesome-CobaltStrike:https://github.com/zer0yu/Awesome-CobaltStrike;Cobaltstrike 中文使用手册:https://pan.baidu.com/share/init?surl=LpMkskfUaBuiwVvQ2vjHPQ,密码: nifi。 原文转自:https://blog.csdn.net/weixin_39190897/article/details/118243520