PHP imap 远程命令执行漏洞(CVE-2018-19158)
php imap扩展用于在PHP中执行邮件收发操作。其imap_open
函数会调用rsh来连接远程shell,而debian/ubuntu中默认使用ssh来代替rsh的功能(也就是说,在debian系列系统中,执行rsh命令实际执行的是ssh命令)。
因为ssh命令中可以通过设置-oProxyCommand=
来调用第三方命令,攻击者通过注入注入这个参数,最终将导致命令执行漏洞。
启动环境
1.进入漏洞环境目录
2.docker-compose build
3.docker-compose up -d
默认打开的端口是8080
进行复现之前先了解一下php_imap函数
作用:此函数基于imap 扩展,imap_open -将IMAP流打开到mailbox。
用法:imap_open ( string $mailbox , string $username , string $password )
其中包括三个参数,二三个是登录名和密码,第一个mailbox是执行命令参数的一部分,说到这里其实就很明显了,可以抓包修改邮箱名从而达到命令注入的目的
关于mailbox
并且上文提到imap_open函数会通过ssh远程连接shell(建立SSH连接)
然后通过设置oProxyCommand=参数执行第三方命令
打开环境是一个邮件系统:
既然是命令执行漏洞并且知道注入点在哪直接抓包:
根据给的poc制作POST包发送:
看一下构造的命令,先url解码再将选中部分base64解码,命令部分就是
然后再将请求包发送
进入容器
docker-compose exec web bash
进入根目录下的tmp查看test0001文件
复现完成,退出docker环境
修复方法
-
检查传递给 imap_open 的用户输入参数。
-
在 mailbox 参数中使用某些标志,其中 /norsh 标志可以用来禁用IMAP预身份认证模式。