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

admin 2021年5月6日04:10:12评论181 views字数 2068阅读6分53秒阅读模式

::: hljs-center

==0x01==

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

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

::: hljs-center

==0x02==

:::
我在官网下载最新的1.8源码进行搭建,其中PHP要开启Openssl扩展方法很简单,打开php.ini找到该行,将前面的分号去掉就可以了

利用白盒与黑盒结合的方式审计某CMS
搭建好源码,然后去后台看看功能,测试发现多处上传的位置都存在目录遍历
发现过程:

利用白盒与黑盒结合的方式审计某CMS
点击选择,进入后点击upfile文件夹,Burp开启

利用白盒与黑盒结合的方式审计某CMS
抓取到如下数据包:

利用白盒与黑盒结合的方式审计某CMS
分析该数据包,发现并未提交参数,而是GET直接访问路径,观察路径发现
dXBmaWxl.html为Base64编码地址+.html

利用白盒与黑盒结合的方式审计某CMS
猜想,如果为./是否会遍历web根目录下的文件
将数据包发送到Burp的重放模块,并修改参数./ -> Li8= 测试目录遍历成功

利用白盒与黑盒结合的方式审计某CMS
该目录遍历存在的地方比较多,有上传的地方基本就存在,但是很鸡肋,没有列出目录,于是继续挖掘,发现插件中有一处目录遍历可列出目录和文件
进入插件列表,找到附件管理

利用白盒与黑盒结合的方式审计某CMS
当点击管理的时候,进入后Burp开启,然后随意点击一个文件夹抓到数据包

利用白盒与黑盒结合的方式审计某CMS
观察发现与上面的情况相似,直接修改为当前目录,然后提交.

利用白盒与黑盒结合的方式审计某CMS
发现成功遍历了网站根目录
这一处比较鸡肋,下面分享代码执行
在系统管理处有一处模板管理可以修改PHP文件

利用白盒与黑盒结合的方式审计某CMS
到这可能大家以为,这直接可以Getshell了啊,当时我也这样想,后面发现,写入PHP代码后还会在前面加一段代码,导致了我们的代码执行不了,甚至连phpinfo函数都写入不了,黑盒测试了一下无果

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

利用白盒与黑盒结合的方式审计某CMS
前面说到该CMS的一些文件是混淆了的,后来发现有些文件没有混淆,于是查找存在漏洞的位置在app/admin/controller目录下,发现大部分文件没有混淆加密,且可以通过文件名明白该文件实现的功能,如图:

利用白盒与黑盒结合的方式审计某CMS
而主题模板的功能文件在app/admin/controller/themecontroller.php
目录下,查找问题原因,定位到themecontroller.php文件的150

利用白盒与黑盒结合的方式审计某CMS
此处找到问题原因,如果路径中存在字符串.php则执行 if代码块的内容
if代码块的内容正是向文件中写入下面的代码:
<?php if(!defined('IN_SDCMS')) exit;?>
该代码导致了我们写入的代码无法执行,看到查找字符串的函数是strpos
学过PHP的朋友们应该知道strpos函数是对大小写敏感的,于是我们可以用.PHP的方法跳过该判断分支,前面我们还遇到一个问题就是phpinfo()函数写入时会报非法内容,原先的猜想是他有一个WAF会过滤,结果看到一个函数调用处理提交的数据,然后跟踪到该文件最后一行时震惊了

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

```
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为函数名执行

利用白盒与黑盒结合的方式审计某CMS
最后访问文件地址

利用白盒与黑盒结合的方式审计某CMS
成功写入PHP文件并执行了我们的代码
::: hljs-center

==结语==

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

相关推荐: PHPCMS_V9.2任意文件上传getshell漏洞分析

介绍&预备知识介绍:PHPCMS是一款网站管理软件。该软件采用模块化开发,支持多种分类方式。预备知识PHPCMS是采用MVC设计模式开发,基于模块和操作的方式进行访问,采用单一入口模式进行项目部署和访问,无论访问任何一个模块或者功能,只有一个统一的入口…

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年5月6日04:10:12
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   利用白盒与黑盒结合的方式审计某CMShttp://cn-sec.com/archives/246260.html