利用白盒与黑盒结合的方式审计某CMS

::: hljs-center

==0x01==

::: 在群里看到Ashe表哥放了几手0day,心里那个羡慕啊于是打算开始学代码审计逛CNVD的时候发现最近SDCMS的漏洞比较多,于是下手挖掘,找到了两个漏洞的位置,因为此源码一些关键的位置都混淆了,所以对我这个刚接触的憨憨有点难度,于是采用白盒加黑盒的方式进行审计。 注:以下漏洞非本人提交,CNVD已经收录,源码是8.27下载的,漏洞依然存在 image.png

::: hljs-center

==0x02==

::: 我在官网下载最新的1.8源码进行搭建,其中PHP要开启Openssl扩展方法很简单,打开php.ini找到该行,将前面的分号去掉就可以了 image.png 搭建好源码,然后去后台看看功能,测试发现多处上传的位置都存在目录遍历 发现过程: image.png 点击选择,进入后点击upfile文件夹,Burp开启 image.png 抓取到如下数据包: image.png 分析该数据包,发现并未提交参数,而是GET直接访问路径,观察路径发现 dXBmaWxl.html为Base64编码地址+.html image.png 猜想,如果为./是否会遍历web根目录下的文件 将数据包发送到Burp的重放模块,并修改参数./ -> Li8= 测试目录遍历成功 image.png 该目录遍历存在的地方比较多,有上传的地方基本就存在,但是很鸡肋,没有列出目录,于是继续挖掘,发现插件中有一处目录遍历可列出目录和文件 进入插件列表,找到附件管理 image.png 当点击管理的时候,进入后Burp开启,然后随意点击一个文件夹抓到数据包 image.png 观察发现与上面的情况相似,直接修改为当前目录,然后提交. image.png 发现成功遍历了网站根目录 这一处比较鸡肋,下面分享代码执行 在系统管理处有一处模板管理可以修改PHP文件 image.png 到这可能大家以为,这直接可以Getshell了啊,当时我也这样想,后面发现,写入PHP代码后还会在前面加一段代码,导致了我们的代码执行不了,甚至连phpinfo函数都写入不了,黑盒测试了一下无果 image.png image.png 前面说到该CMS的一些文件是混淆了的,后来发现有些文件没有混淆,于是查找存在漏洞的位置在app/admin/controller目录下,发现大部分文件没有混淆加密,且可以通过文件名明白该文件实现的功能,如图: image.png 而主题模板的功能文件在app/admin/controller/themecontroller.php 目录下,查找问题原因,定位到themecontroller.php文件的150image.png 此处找到问题原因,如果路径中存在字符串.php则执行 if代码块的内容 if代码块的内容正是向文件中写入下面的代码:

<?php if(!defined('IN_SDCMS')) exit;?>

该代码导致了我们写入的代码无法执行,看到查找字符串的函数是strpos 学过PHP的朋友们应该知道strpos函数是对大小写敏感的,于是我们可以用.PHP的方法跳过该判断分支,前面我们还遇到一个问题就是phpinfo()函数写入时会报非法内容,原先的猜想是他有一个WAF会过滤,结果看到一个函数调用处理提交的数据,然后跟踪到该文件最后一行时震惊了 image.png

private function check_bad($str)

  {

    $num=preg_match_all("/(phpinfo|eval|if(!APP_DEMO)file_put_contents|file_get_contents|passthru|exec|chroot|scandir|proc_open|delfolder|unlink|mkdir|fopen|fread|fwrite|fputs|tmpfile|flock|chmod|delete|assert|_post|_get|_request|_file)/Ui",$str,$match);

    return $num?$num:0;

  }

他自己写了一个函数,函数功能是用正则来过滤php的一些函数和变量名称,而且还没有过滤全,system函数漏了呀(程序员出来挨打). 这个绕过方法就不用多讲了,直接以变量为函数名,将函数名的字符串拆开绕过 ::: hljs-center

==0x03==

::: 先将访问一个php文件然后Burp抓包,操作与上面目录遍历的方法相同,不过文件后缀要大写然后Base64编码修改后访问,然后写文件时进行函数名拆分赋给变量str3,最后以变量str3为函数名执行 image.png 最后访问文件地址 image.png 成功写入PHP文件并执行了我们的代码 ::: hljs-center

==结语==

::: 本人最近刚开始学代审,文章深度可能达不到各位表哥的水平,但是希望该文章能给与我一样刚接触代码审计的小白一个思路,同时也希望与云众的各位共同进步,感谢在我的学习之路上一直鼓励和帮助过我的表哥们。

免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。查看原文

为您推荐