一、基础环境搭建
本部分介绍 Cobalt Strike 基础环境的启动流程,包括服务端、客户端的启动以及监听服务的配置。
步骤 1:启动服务端
在 Kali Linux 终端中,进入 Cobalt Strike 工具目录,使用 teamserver 命令启动服务端。需要指定 IP 地址、密码和配置文件。
图1:Kali Linux终端中启动Cobalt Strike Team Server
步骤 2:启动客户端
启动 Cobalt Strike 客户端程序,连接至已启动的服务端。客户端界面将展示会话管理、载荷生成等功能。
图2:Cobalt Strike客户端启动界面
步骤 3:启动监听
在客户端中配置并启动监听器(Listener),设置监听端口和回调地址,等待目标机连接。
图3:配置并启动监听器
步骤 4:目标机上线
目标机运行载荷后,Cobalt Strike 服务端将收到连接请求,目标机成功上线。可在 Beacons 视图中查看已上线的主机信息。
图4:目标机成功上线,Beacons列表显示在线主机
步骤 5:使用截图工具
上线后可使用 Cobalt Strike 内置的截图工具,远程获取目标主机的桌面截图,便于后续渗透测试操作。
图5:Cobalt Strike截图工具获取目标桌面截图
二、网络配置
在进行渗透测试之前,需要确认网络配置,确保 Kali 攻击机与目标机之间的网络连通性。
步骤 1:查看本机 IP 地址
在 Kali 终端中使用 ifconfig 或 ip 命令查看本机 IP 地址。注意查看 eth0 网卡的 IP 配置。
图6:查看Kali本机IP地址(注意eth0网卡)
步骤 2:Kali 启动服务端
在 Kali 终端中启动 Cobalt Strike Team Server,指定正确的 IP 地址和配置文件。
图7:Kali启动Team Server
步骤 3:Kali 启动客户端连接服务端
启动 Cobalt Strike 客户端,使用服务端 IP 地址进行连接。
图8:Kali启动客户端并连接服务端
步骤 4:启动监听
在客户端中配置监听器。注意 IP 地址填写 tun0 接口的地址(VPN 隧道接口)。
图9:配置监听器(IP填写tun0接口地址)
三、Payload 生成与木马制作(第 1 次实验)
本实验使用 Cobalt Strike 的 Payload 生成器制作木马文件,包括"大马"和"小马"两种类型。
步骤 1:生成 Payload
在 Cobalt Strike 客户端中,选择 Payloads 菜单,配置载荷参数。IP 地址填写 tun0 接口的 IP(左上方显示),然后生成 payload。
图10:配置payload参数并生成(IP填tun0接口地址)
步骤 2:保存文件
选择保存目录,将生成的 payload 文件保存到指定文件夹。
步骤 3:生成大马和小马
本次实验生成了两个木马文件:一个"大马"(功能完整的后门程序)和一个"小马"(轻量级下载器)。将这两个文件直接复制到目标机器上运行即可。
图11:生成的两个木马文件(大马和小马)
四、文件加密与十六进制转换
为了绕过杀毒软件检测,需要对木马文件进行加密处理和十六进制转换。
步骤 1:使用 sgn 工具加密
使用 sgn 工具对木马文件进行多轮加密处理,生成自解密的 .bin 文件,增加逆向分析难度。
图12:使用sgn工具运行多轮生成自解密.bin文件
步骤 2:转换为十六进制
使用 xxd 工具将 .bin 文件转换为十六进制格式,便于后续嵌入 C 代码中编译。
图13:使用xxd工具将文件转换为十六进制格式
步骤 3:查看转换结果
查看转换后的十六进制内容,确认文件数据完整无误。
图14:查看十六进制转换结果
五、Shellcode 编译与可执行程序生成(第 2、3 次实验)
本部分介绍如何将 shellcode 嵌入 C 语言代码中,编译生成可执行程序。
步骤 1:编写 Shellcode 加载器代码
编写包含 shellcode 的 C 语言源代码,使用 Windows API 函数 VirtualAlloc 分配内存、MoveMemory 拷贝 shellcode、然后通过函数指针执行。
#include <windows.h>
unsigned char shellcode[] = {0xe8, 0xdc, 0x05, 0x00, 0x00, 0xa0, 0xa6, 0xc3, ...};
unsigned int shellcode_len = 1641;
int main() {
void* pMem = VirtualAlloc(NULL, shellcode_len, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE);
MoveMemory(pMem, shellcode, shellcode_len);
((void (*)())pMem)();
}
步骤 2:编译生成可执行程序
使用 MinGW 交叉编译器(x86_64-w64-mingw32-gcc)将 C 代码编译为 Windows 可执行程序(.exe)。
图15:使用MinGW编译器生成可执行程序
实验说明
关于实验编号的说明:
• 第 2 次实验:不使用 sgn 工具加密,直接将 shellcode 转十六进制后编译生成可执行程序。
• 第 3 次实验:使用上述方法编译出来的 app 可执行程序。
六、DLL 动态链接库制作(第 4 次实验)
本实验将 shellcode 代码装入 DLL(动态链接库)文件中,通过 DLL 注入方式实现渗透。
步骤 1:创建动态链接库项目
在 Visual Studio 中创建一个新的动态链接库(DLL)项目。
图16:创建动态链接库项目
图17:项目配置
步骤 2:复制 wget 代码
将 wget 压缩包中的代码复制进来。这段代码包含特定函数名的函数,用于实现 DLL 的导出功能。
图18:将wget压缩包中的代码复制到DLL项目中
步骤 3:选择 Release 模式编译
在 Visual Studio 中选择 Release 编译模式,然后执行 Build(生成)操作。
图19:选择Release模式并编译构建
图20:编译输出结果
步骤 4:获得 DLL 文件
编译成功后获得一个 DLL 文件。其中的函数用于弹窗测试代码是否正确。
图21:Visual Studio编译DLL成功(输出窗口显示生成成功)
步骤 5:插入大马木马
将之前生成的"大马"木马代码插入到 DLL 的函数中,实现功能增强。
七、部署与攻击
本部分介绍如何将制作好的 DLL 文件部署到目标机器并执行攻击。
步骤 1:找到生成文件
在 Visual Studio 项目的 Release 输出目录中找到编译生成的 DLL 文件。
图22:查找编译生成的DLL文件
图23:DLL文件所在目录
步骤 2:获取文件哈希值
获取文件的哈希值(MD5),用于文件完整性验证和特征识别。例如:70993a2dd2bcae87026b4413f6a9e53a。
步骤 3:上传文件到目标机
将 DLL 文件和 wget 文件上传/复制到需要攻击的目标机器上。
图24:将DLL文件和wget文件上传到目标攻击机器
步骤 4:重命名文件
将生成的 DLL 文件重命名为 winget(伪装成正常文件,降低被检测风险)。
图25:将dll2重命名为winget
步骤 5:运行 winget
在目标机器上运行 winget 程序,触发 DLL 加载和 shellcode 执行。
图26:运行winget后Cobalt Strike收到连接,目标机上线
攻击结果
服务端收到连接请求,目标机成功上线。可在 Cobalt Strike 的 Beacons 视图中查看已控制的主机信息,包括进程名(winget.exe)、用户权限(Administrator)、架构(x64)等。