记某cms的漏洞挖掘之旅

任意文件写入

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

我们看到第一个参数$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();?>即可

可以看到已经成功 rce

任意文件读取

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

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

反序列化漏洞

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

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

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

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

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

我们找到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

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

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

总结

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

本文涉及相关实验:任意文件下载漏洞的代码审计(过本节的学习,了解文件下载漏洞的原理,通过代码审计掌握文件下载漏洞产生的原因以及修复方法。)

(0)

相关推荐

  • Web架构笔记之基础环境搭建

    第一章 基础环境搭建 实验环境 工具 目标靶机 准备虚拟机 Kali Linux Kali Linux 是渗透测试安全工具的集合,集成了市面上常用的安全工具:基于Debian Linux 发行版进行封 ...

  • 从目录遍历到getshell

    某游戏厂商新增了一个网站,授权让我测试一下. 前台微信登录,未找到后台,功能简单,无常规漏洞,开始目录扫描. /_notes/dwsync.xml泄露其真实ip,物理路径,以及一个旁站. 阿里云服务器 ...

  • PHP的Hash信息摘要扩展框架

    PHP的Hash信息摘要扩展框架 今天我们主要学习的是 PHP 中一些 Hash 散列加密相关的扩展函数的使用,而不是 Hash 算法,这种加密其实也只是一种更复杂一些的密钥算法,与 Hash 算法类 ...

  • 帝国CMS tagsid伪静态实现方法(简单实用)

    帝国CMS tagid伪静态方法有很多种方式,在网上大多数都通过修改程序文件,二次开发实现.这里飓风哥给大家分享一种简单的实现方法,相信小白也能操作修改. 帝国CMS tagsid伪静态方法的展现方式 ...

  • 记某cms审计过程(新手入门篇)

    前言 今天放假闲着无事就找了个cms来挖挖漏洞,挖到的漏洞比较简单,适合新手入门,所以本篇文章就记录一下这几个漏洞的审计过程,以及如何从新手的角度去挖到cms一些常见的漏洞,如果是大佬就可以绕道了. ...

  • 感受军旅文化 体验拓展快乐——记六七年级军魂研学之旅

    继八年级军魂研学的圆满结束,六七年级终于盼来了属于他们的研学之旅. "金海中学的学生真的很有礼貌,也很听话,一点就通." "孩子们在这次活动中坚持完成每个项目,认真体检军 ...

  • 【中欧旅行记之十】告别中欧之旅

    在捷克最后一天的早晨醒来,窗外云层很厚,看来又是一个阴天.这样的天气凉爽宜人,最适合户外游览了.今天的行程只有一个,便是九点钟乘坐机场的摆渡车去布拉格机场,下午搭乘川航的空客330回到七千六百多公里外 ...

  • 魅力中捷克州 ——记中捷克州投资旅游之旅(二)

       魅力中捷克州   --记中捷克州投资旅游之旅(二) 今天的活动是由中捷克州组织安排的.受邀参加此次活动的有格兰特欧洲商会,捷克-中国文化艺术交流促进会,华人旅行社及新华社,中欧文联报,布拉格时报 ...

  • 魅力中捷克州 ——记中捷克州投资旅游之旅(一)

    * 初春的布拉格阳光明媚,3月1日,由中捷克州组织的"中捷克州投资旅游推荐活动"从布拉格开始了一日的行程. 中捷克州位于捷克的中部,像中国的河北省一样,将首都紧紧的抱在自己的怀中. ...

  • 喀什风情——李家骝记2020年南疆采风写生之旅

    寻着当地踯躅而行老人的脚步,耳畔传来阵阵欢快鼓乐之声,寻声而至的是古城里的传统老茶馆,这里是当地男性老人每天必到场所,他们在这里席花毯而坐喝茶.用点心,三五好友聊天,观赏艺人弹奏乐器.或引吭高歌.或翩 ...

  • 金秋十月踏歌行:记盛诺一家Boston采摘之旅

     波 士 顿  Boston 中秋过后,暑意渐退,金风送爽,正是秋游的好季节.Boston的夏秋之交,就像一个成长中的少女,俏皮可爱.放眼望去,郁郁葱葱的青涩依然浓厚,略带成熟的金黄深红却也羞答答地显 ...

  • 1987,全旅出击——记“87.4”演习中的52旅

    1987,全旅出击——记“87.4”演习中的52旅

  • 【万树花开】前世今生记不真,所以误行旅

    这是我的个人公众号 如果您喜欢我的文章 转发是对我最好的支持 文章做到极处,无有他奇,只是恰好: 人品做到极处,无有他异,只是本然. 不觉腊月的日历即将翻到了底,这一年啊!这一年呵,真是让人一言难尽. ...