提交需求
*
*

*
*
*
立即提交
点击”立即提交”,表明我理解并同意 《美创科技隐私条款》

logo

    产品与服务
    解决方案
    技术支持
    合作发展
    关于美创

    申请试用
      安全实验室 | 内网渗透—CobaltStrike工具介绍
      发布时间:2020-11-27 阅读次数: 424 次

      内网渗透是每一个安全工程师绕不过去的难题,为什么大家都觉得内网渗透要比其他方面的渗透测试更为头疼,其实主要原因还是在大家对攻入目标网络的环境感到陌生罢了。第一次进入目标内网,独自一人面对庞大的目标系统网络、各种复杂的分区结构,很容易犯迷糊。如果这时能有个team帮助你一起探索内网、一起协作,显然会使得内网渗透的难度大大降低。


      本期美创安全实验室将给大家介绍一款能够用于内网渗透时团队协同作战的工具“Cobalt Strike”。


      01CobaltStrike工具简介


      Cobalt Strike是一款以metasploit为基础的GUI的框架式渗透工具,集成了端口转发、服务扫描,自动化溢出,多模式端口监听,winexe木马生成,win dll木马生成,java木马生成,office宏病毒生成,木马捆绑;钓鱼攻击包括:站点克隆,目标信息获取,java执行,浏览器自动攻击等等。


      Cobalt Strike主要用于团队作战,可以说是内网渗透中的团队渗透神器,CobaltStrike能够让多个攻击者同时连接到团队服务器上,共享攻击资源与目标信心和Session。要知道众人拾柴火焰高的道理,当我们发现一个内网控制点后,为了使我们的攻击收益最大化,最好的办法就是跟团队共享资源,给其他成员提供同样的接入点,Cobalt Strike很好的做到了这一点。因此Cobalt Strike作为一款协同APT工具,针对内网的渗透测试和作为APT的终端控制功能,使其变成众多APT组织的首选工具。


      02Cobalt Strike功能使用


      1. 安装Cobalt Strike


      a) 服务端:


      在服务端执行teamserver即可,命令格式为./teamserver <服务端IP> <连接密码>


      一般来说,如果团队成员都处在一个局域网下,那么只需要找一台能够访问到目标内网的机器当作服务端即可,例如本机、跳板机等等,不一定非得使用VPS,还需要考虑目标内网是否能出网。


      b) 客户端:


      在客户端,只需要运行cobaltstrike.jar文件,默认连接服务端的端口是50050,但要注意的是必须要与服务端所启动的版本相同,例如服务端使用了cobaltstrike3.8版本的teamserver,那么客户端就必须启动cobaltstrike3.8的jar文件,才不会出错。



      正确填写服务端IP以及端口和密码即可,成功连接服务端。



      2. Cobalt Strike功能介绍


      |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 #报告展示模块


      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横向渗透


      03Cobalt 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:<域账户hash> /run:"cmd -whidden"


      成功传递,并执行了一个CMD程序,通过获取CMD的进程ID可以得知,他的PID是5040.



      接下来,我们利用Cobalt Strike提供的窃取令牌功能,获得刚刚创建CMD的进程的令牌,执行以下命令:


      Stael_token 5040


      这时我们已经获得了与域控CMD交互的权限。



      但这还不够,我们需要一个更为稳定的权限,最好能将域控DC上线到Cobalt Strike中,所以我们远程创建一个计划任务,并将一个远程木马文件利用copy命令传入到目标机中,通过计划任务来触发该木马文件的执行,使其成功上线。




      最终域控机成功上线,至此我们成功获得了该域内所有机器的访问权限


      免费试用
      服务热线

      马上咨询

      400-811-3777

      回到顶部