我们之前在这里写过关于混凝土 CMS 的文章。在那篇文章中,我们描述了我们如何设法利用文件上传功能中的双重竞争条件漏洞来获得远程命令执行。在这篇博文中,我们将展示我们在去年年底对我们的一位客户进行渗透测试时发现的 Concrete CMS 中的多个漏洞。所有这些漏洞都已修复,我们要感谢他们的团队在这些问题上的合作。有关更多信息,请参阅“缓解措施”部分,了解有关解决密码中毒问题的安全提示以及有关提高此 CMS 安全性的其他提示。
让我们从开始测试时发现的权限提升问题开始。用户组具有层次结构,它们相互继承权限。我们有一个权限有限的用户“Editor”,因此我们问自己,如果我们尝试将“Editors”组移动到“Administrators”下会发生什么,我们会继承他们的权限吗?
第一次尝试将编辑器移到管理员组下
尝试失败
该死的,看起来我们的尝试失败了,开发人员实际上想到了这一点,他正在后端检查我们的权限。但这还不是全部,我们发现了另一个端点,我们可以尝试相同的操作,所以让我们再试一次,看看所有端点的权限检查是否一致
第二次尝试将编辑器移到管理员组下
编辑组现在在管理员下,继承他们的权限
好吧,看看这个,他们似乎忘记在此端点上实施权限检查,我们已经设法使用权限非常有限的用户(“编辑”角色)将“编辑”组移动到“管理员”下。我们必须注销并再次登录才能刷新我们的会话和权限。瞧,我们现在是可以访问整个控制面板的“管理员”
PrivEsc 成功了,我们现在是管理员
如第 1 部分所述,控制面板包含设计特性的SSRF。我们在上一篇文章中展示了如何获得 RCE,但我们实际利用的第一件事是这个 SSRF。很明显,这个 SSRF 以前被利用过,现在他们已经采取了一些缓解措施。此功能的目的是允许编辑者从远程服务器下载文件并将其保存在本地。
SSRF 设计
我们使用了 Burp Suite 的 Collaborator 有效负载,我们立即收到了回调:
收到回调
AWS 实例元数据被阻止,哦不!如前所述,我们很清楚这已被利用,并且已经进行了一些修复。我们可以绕过这些修复吗?
不允许使用实例元数据
某些文件扩展名被阻止(.php 和其他),您也不能使用重定向。我们还能做什么?
不允许重定向/黑名单也用于扩展
我们发现我们可以用一个众所周知的 php 技巧绕过扩展黑名单( /info.php/test.html 仍然请求 info.php 但 CMS 现在认为 .html 是被列入白名单的请求扩展,而服务器将实际执行一个 .php 扩展名)然后在本地网络中枢转,访问内部网络服务器。从 Internet 转向 Intranet:
在 LAN 内旋转
您可以使用它来枚举和识别内部 Web 应用程序。在这里,我们正在读取存储在内部网络服务器上的典型 phpinfo 文件的输出。
访问内部 Web 服务器
在 LAN 中旋转很好,您可以将其与各种一次性 GET 漏洞链接起来,但这对我们来说还不够。云环境中的全部目标是访问实例元数据服务器并窃取 IAM 凭证。我们已经成功地使用我们的好老朋友 DNS 重新绑定来实现这一点。感谢emil_lerner提供这项非常有用的服务。我们尝试了其中的一些,但这个效果最好,我们这边的设置为 0!作为提示,您可能必须发送 2-3 个请求才能成功,因为本质上您是在尝试在这里赢得竞争条件(检查时间、使用时间),因为 Concrete CMS 团队进行了多次验证之前已经到位。
使用 DNS 重新绑定获取 AWS IAM 角色
我们获得了实例使用的 AWS IAM 角色:
AWS IAM 角色
来自实例元数据的 AWS IAM 密钥
这个故事的寓意是,总是有更多的技巧可以尝试,你只需要足够的坚持。
我们之前写过关于Drupal和Joomla的这种类型的攻击。我们也想在这里尝试一下,看起来我们是对的。毒化下面的主机头:
恶意请求重置密码
会导致密码重置链接中毒。
中毒密码重置链接
这是将发送给用户的电子邮件:
带有中毒链接的电子邮件
SSRF 和 PrivEsc 漏洞已在去年底的 8.5.7 和 9.0.1 版本中修复。您应该升级到最新版本。对于密码中毒问题,请在 Concrete CMS 管理面板中设置规范 url。有关具体 CMS 安全性的更多提示,请参阅以下页面以了解配置的最佳实践:https ://documentation.concretecms.org/developers/introduction/configuration-best-practices 。我们要再次感谢他们的团队在迅速解决这些问题方面的支持与合作。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。