对某cms的一次审计思路

漏洞的审计

源头是在/src/extend/extcore/ImageCrop.php/crop这个方法里面发现有个getimagesize函数,这个函数是能够触发phar反序列化漏洞的,而这个 cms 是基于 thinkphp5.1 框架二次开发的,这个框架有个反序列化漏洞相信大家都很熟悉了,所以我们的目的就是能控制$imgData这个变量就行了

可以看到$imgData是由$this->getImgData($img);控制的,我们跟踪进去

private function getImgData($img){        if(strripos($img, 'http://')!==FALSE OR strripos($img,'https://') !==FALSE) {   //站外图片            $data=file_get_contents($img);        }else{  //站内图片            $file=DOC_ROOT.'/'.$img;            if(is_file($file)) {                $data = file_get_contents($file);            }else{                return false;            }        }        return $data;    }

可以看到这里会限制只能由http://或者https://开头的参数才能获取站外的图片信息

再看看全局搜索crop这个方法看看哪里会调用他

我们在src/application/task/controller/UtilController.php/cropimage发现有个crop_image函数,我们跟踪进去

function crop_image($file, $options){    // echo $file;    $imageCrop=new \extcore\ImageCrop($file, $options);    return $imageCrop->crop();}

发现这里会调用到我们上面的crop函数

这里的$file参数也就是我们传给getImgData函数的$img变量,所以这里我们看看如何去控制他,可以看到crop_image方法里面有一个$paths=explode('.',$img);,就是会根据点去分隔我们的$img参数,然后又要count($paths)==3,我们可以回想到getImgData限制了http的开头,我们想要phar反序列化的话,必须是phar://的开头,那么我们直接在vps上放置我们的phar文件的路径不就可以了

但是这里有一个问题,我们正常输入一个IP地址的话肯定是不行的,因为他的count($paths)==3,所以我们可以使用十六进制绕过的方法,所以也就限制了这种方法只能在linux下面使用,这里顺便贴一下之前写的一个转进制的脚本

<?php$ip = '127.0.0.1';$ip = explode('.',$ip);$r = ($ip[0] << 24) | ($ip[1] << 16) | ($ip[2] << 8) | $ip[3] ;if($r < 0) {    $r += 4294967296;}echo "十进制:";echo $r;echo "八进制:";echo decoct($r);echo "十六进制:";echo dechex($r);?>

我们在$ip处贴上自己的vps的地址,这里要注意生成的十六进制前面要加上0x

然后cacheimage函数的

$response = crop_image($paths[0].'.'.$paths[2], $args);

$paths[0].'.'.$paths[2]就是我们想要控制的参数,因为前面explode把我们的url地址分成了3份,这里把第一份和第三份拼接了起来,于是我们可以构造类似于http://vps-ip/1.1.txt的形式,这里样我们的$paths[0].'.'.$paths[2]也就成为了1.txt也就是我们可控的东西了,同时这里也明白了为什么要将vps-ip转成16进制的原因了

我们同时在vps上放置test.phar的路径,这个cms后台是可以上传jpg文件的,当然phar反序列化的话即使是jpg后缀的文件也是能够成功反序列的,这里我为了方便直接放在根目录下

到了这一步我们的思路基本就清晰了,我们测试一下$img是否能够正确的打印出来,可以手动添加一个echo $img;

我们访问一下cacheimage的路由

可以看到我们的$img变成了1.txtgetimagesize函数里面也成功接收到我们放在1.txt里面的内容

我们再cmd传参我们的命令即可看到漏洞已经成功利用

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

总结

漏洞已经上交于cnvd平台,然后这个漏洞由于十六进制绕过的问题,只能在linux下才可以成功实现,所以可以把cms放在docker里面进行测试,然后在一些小的cms里面关于phar反序列化漏洞还是比较好找的,因为一般来说后台都是能够上传jpg格式的文件,能够触发phar的函数也蛮多的

(0)

相关推荐

  • crop

    crop

  • (1条消息) Scrapy用ImagePipeline爬取网页图片

    https://blog.csdn.net/Wilson_Iceman/article/details/79200796之前的那个系列文章只是讲到了如何使用Scrapy来爬取文本数据,今天我们来介绍如 ...

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

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

  • 【专栏|胖虎肥猫做审计】应收票据审计思路解析

    以下视频来源于 胖虎肥猫做审计

  • 审计思路之见招拆招

    老财老审,难兄难弟.会计和审计看问题的视角恰好相反,会计是从凭证到明细账,明细账到总账,总账到报表的过程,而审计,先看报表,再看明细,最后才是抽凭. 审计的思路,一个字可以概括--拆,如何见招拆招,才 ...

  • 【审计实务】基于大数据思维的医院收费审计思路与技巧

    来源:山东省审计厅网站,转载用作学习,如有问题,请及时联系我们.另转载请注明来源! 随着药品零差率等一系列医改举措的持续推进,当前各医院的药占比等指标持续下降,收入结构也随之发生变化,医疗服务收费较以 ...

  • 销售审计必须了解的业务知识、审计思路、常见问题(附案例)

    销售审计,看看应收款就行了? 做做账龄分析,然后通过分析性复核了解公司的财务收款状况. 其他的比如销售价格.销售合同之类的,都涉及到公司核心业务,老板也不让查- 的确,现在很多内审人员对销售审计有误解 ...

  • 房地产行业的审计思路

    房子是每个家庭的必需品,房地产行业一直也是拉动国民经济增长中不可忽视的力量.在审计实操中,房地产行业与其他行业相比有哪些不同呢?审计过程中重点要关注哪些方面?下面就随小编来看看吧! 一.房地产业特点 ...

  • 业务招待费/差旅费/会务费/咨询费/通讯费 审计思路

    会计工作审计做,审计来了不用方 不会做审计的会计不是好司机, 费用审计思路 1业务招待费 舞弊方式:业务招待费总体就是虚报和浮报,表现的形式很多,比如:购买发票报销,实质上是宴请朋友或者用于私人消费: ...

  • 专项资金审计思路

    <审计案例/文章汇编(一周年特辑)> 来源于网络,版权归原作者,无商业用途 ■     专项资金的特点 专项资金,是国家或有关部门或上级部门下拨行政事业单位具有专门指定用途或特殊用途的资金 ...

  • 工程审计与财务审计相结合的审计思路探讨

    工程审计推荐搜索 审计案例 工程造价 法律法规 合同管理 新形势下,面对社会经济的不断进步与发展,各级党委政府为了更好地改善基础设施建设,对基础设施建设的投入越来越大.工程审计作为项目完结资金把关的重 ...

  • 生产循环全过程审计:所需资料、审计思路与发现

    生产审计的内容可以分生产排程.材料领用.生产投产.成本核算.废品管理等很多方面,这个需要和ISO质量管理体系相结合. 一.基础知识入门 1.1 生产计划 生产订单是生管人员在安排的,生产计划安排得好不 ...