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

联系老师 微信扫一扫关注我们 15527777548/18696195380 在线咨询
关闭