记某cms的漏洞挖掘之旅

admin 2021年3月17日09:30:50评论121 views字数 2303阅读7分40秒阅读模式

‍‍


记某cms的漏洞挖掘之旅
原创稿件征集

邮箱:[email protected]

QQ:3200599554

黑客与极客相关,互联网安全领域里

的热点话题

漏洞、技术相关的调查或分析

稿件通过并发布还能收获

200-800元不等的稿酬


任意文件写入

这个 cms 是基于 thinkphp5.1 的基础开发的,一般我们挖 cms 如果想 rce 的话,可以在 application 文件夹直接搜索file_put_content等危险函数,如下图,我们直接全局定位到这个fileedit方法里面的file_put_content

记某cms的漏洞挖掘之旅

我们看到第一个参数$rootpath,他是被拼接了这么一段路径
$rootpath = Env::get('root_path') . 'theme' . DIRECTORY_SEPARATOR . $template . DIRECTORY_SEPARATOR . $path;
其中$path是我们可控的,那么一般就可以考虑下是否存在路径穿越的问题
再看到第二个参数htmlspecialchars_decode(Request::param('html')也是我们可控的
所以这里就比较清晰了,我们只需要../就可以进行路径穿越,htmlspecialchars_decode也对我们写入 php 代码没有什么影响,所以我们直接 post 传参 path=../../index.php&html=<?php phpinfo();?>即可
记某cms的漏洞挖掘之旅

可以看到已经成功 rce

记某cms的漏洞挖掘之旅

任意文件读取

我们再顺着fileedit这个方法往下瞅瞅,发现还有一个file_get_contents,他的参数也是$rootpath,所以这里也是我们可控的,不同的是进入这个 else 分支我们用 get 传参即可

我们直接传入../../index.php,发现已经成功把index.php读取出来了

记某cms的漏洞挖掘之旅

反序列化漏洞

上面两个漏洞是利用了file_get_contentsfile_put_content,这两个函数都是涉及了 IO 的操作函数,也就是说可以进行操作 phar 反序列化漏洞,但是他们的路径并不是完全可控的,只是后面一小部分可控,所以这条路走不通,所以接下来的思路就是搜索有没有可以操作phar的函数

我们直接全局搜索is_dir,一个一个分析是否可以利用

记某cms的漏洞挖掘之旅

这里我的运气比较好,映入眼帘的是scanFilesForTree这个方法,他的$dir是直接可控的,文章的开头说了这个 cms 是基于 thinkphp5.1 二次开发的,所以我们可以直接利用这个漏洞生成 phar 文件来进行 rce

我们首先看看能不能上传 phar 文件,在后台一处发现可以上传文件

记某cms的漏洞挖掘之旅

我们先抓个包试试水,发现提示非法图片文件,应该是写了什么过滤

记某cms的漏洞挖掘之旅

我们找到upload这个函数发现对图片的类型和大小进行了一些验证

public function upload($file, $fileType = 'image')
    
{
        // 验证文件类型及大小
        switch ($fileType)
        {
            case 'image':
                $result = $file->check(['ext' => $this->config['upload_image_ext'], 'size' => $this->config['upload_image_size']*1024]);
                if(empty($result)){
                    // 上传失败获取错误信息
                    $this->error = $file->getError();
                    return false;
                }
                break;
        $result =  $this->uploadHandler->upload($file);
        $data   =  array_merge($result, ['site_id' => $this->site_id]);
        SiteFile::create($data);
        return $data;
    }

然后尝试加了GIF89a头就可以上传了,看来多打CTF还是有用的,于是直接上传我们的 phar 文件就好了

这里要记得生成 phar 文件的时候要要加入GIF89a头来绕过,如下

$phar->setStub('GIF89a'.'<?php __HALT_COMPILER();?>');//设置stub

可以看到已经成功上传了,同时记住下面那个路径

记某cms的漏洞挖掘之旅

最后我们在scanFilesForTree这里触发我们的phar文件就可以了

记某cms的漏洞挖掘之旅

总结

本篇的漏洞已经全部上交cnvd,这个 cms 总的来说比较适合练手,主要的切入点还是通过白盒通过寻找一些危险的函数,再想方设法的去控制它的参数变量

知识点实操,复制链接开始操作-任意文件下载漏洞的代码审计  

https://www.hetianlab.com/expc.do?ec=ECID06a1-2876-4bfb-8e59-a0096299c167&pk_campaign=weixin-wemedia#stu        

本节的学习,了解文件下载漏洞的原理,通过代码审计掌握文件下载漏洞产生的原因以及修复方法。    


向知识的海洋进军,领取39元会员卡。
记某cms的漏洞挖掘之旅

本文始发于微信公众号(合天网安实验室):记某cms的漏洞挖掘之旅

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年3月17日09:30:50
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   记某cms的漏洞挖掘之旅http://cn-sec.com/archives/293822.html

发表评论

匿名网友 填写信息