某开源CMS的一次批量证书挖掘分享

admin 2023年10月17日13:26:00评论42 views字数 2302阅读7分40秒阅读模式
某开源CMS的一次批量证书挖掘分享

前言

今天给师傅们分享一个开源系统批量挖掘CNVD证书的实战内容,由于开源系统的源代码开放,所以相对于闭源系统来说更安全,对于安全人员来说,开放源代码更有利于我们去进行安全测试,也就更容易去找到系统中存在的一些安全问题。

是否符合证书获取条件

之前和大家简单介绍过CNVD获取证书的一些条件,今天我们分享的CMS叫做dedecms也叫织梦CMS,相信有些师傅对于该CMS并不陌生,首先我们先去了解一下该CMS。

从官方网站上我们可以看到该公司名称,通过公司名称我们去企查查搜索看看注册资金是否符合CNVD获取证书的条件。

某开源CMS的一次批量证书挖掘分享

从注册资本我们可以看到该CMS不符合获取证书的条件,因为CNVD要求所属公司的注册资本要大于5000W,具体相关条件在我之前的文章也有写到。

某开源CMS的一次批量证书挖掘分享

可能有的师傅这时候会有疑问了,不符合条件为什么还能获取到证书呢?这也是我在讲公开课师傅们经常问到的一个问题,其实CNVD获取证书的条件有的时候不仅只看注册资本,也看该产品或者该系统的互联网影响力,什么叫做互联网影响力呢?

第一点就是该产品在该行业内的影响力,这点Dedecms是毋庸置疑的,从介绍和成立时间也可以看到。

第二点是该系统的使用人数,也就是互联网资产数量。这点从FOFA中也可以看出来,在所有CMS中织梦CMS也是佼佼者。

所以这两点是满足证书发放条件的,即使该系统没有达到CNVD的硬性要求,这也是我课中所提到的获取证书的一些隐性条件。

某开源CMS的一次批量证书挖掘分享

这里我们确定了该系统可以达到证书获取的条件,接下来我们就去分享一下DedeCMS的漏洞挖掘技巧。

DedeCMS绕过代码检测RCE

目前DedeCMS已经更新至5.7.111版本,这里以5.7.87版本进行分享。

我们从article_string_mix.php文件中可以清楚的看到,在代码的59行存在fwrite()函数,该函数可以将任意内容写入到一个指定的文件中。

那么这里想要利用该函数进行RCE的话需要达成两个条件:

1、首先该函数的第一个参数,也就是写入的文件是可控的或者可以解析的。

2、该函数的第二个参数,也就是写入的内容必须是可控的。

经过测试我们发现上述的两个条件都是满足的,首先写入位置为data/downmix.data.php并且可以访问,写入内容$allsource参数也是可控的。但是此处存在一处WAF拦截,我们要绕过此处的拦截才可以实现RCE。

某开源CMS的一次批量证书挖掘分享

从代码中可以看出,其中过滤了大部分命令执行的函数和传递参数的超全局变量,如果写入内容包含这些关键字的话,会直接提示“当前页面存在恶意代码”并通过die()结束语句的执行,看似过滤还比较全面,但是这里我们可以通过无参一句话来绕过此处的过滤来进行rce。

某开源CMS的一次批量证书挖掘分享

我们通过如下payload巧妙的绕过了该处的过滤,这里的get_defined_functions()函数是以数组的形式获取已定义的函数,而$a['internal'][850]获取到的正是数组中的assert()函数,巧妙绕过了这里对assert函数的过滤。

某开源CMS的一次批量证书挖掘分享

$a=get_defined_functions();
$a['internal'][850](next(getallheaders()));

这里我们将无参一句话写入到downmix.data.php中

某开源CMS的一次批量证书挖掘分享

然后访问downmix.data.php,通过无参一句话将phpinfo写入1.php中。

某开源CMS的一次批量证书挖掘分享

访问1.php成功getshell。

某开源CMS的一次批量证书挖掘分享

上述我们通过无参一句话巧妙的绕过了DedeCMS代码中的过滤,成功getshell,并且获取到一张CNVD证书。那么我们怎么通过代码审计的方式批量进行漏洞挖掘或者批量进行证书获取呢?

DedeCMS批量证书获取

上述我们通过代码审计发现DedeCMS中是通过fwrite()函数实现文件的写入的。那么我们可以思考一下,是不是所有写入功能点都是使用fwrite()实现的呢?

通过全局搜索fwrite(函数验证了我们的猜想,该CMS的开发人员还是比较喜欢用fwrite来实现文件写入功能的,代码中使用到了100多个fwrite函数,所以了解开发思维和开发习惯对于安全人员是非常重要的一点。

某开源CMS的一次批量证书挖掘分享

上述我们定位到了很多fwrite()函数,经过我们测试发现其中多处fwrite都满足上述我们提到的两个条件,也就都可以达到rce的效果。

例如这里的会员模型管理功能点处也是将我们的写入的内容写入到相应的配置文件中。

某开源CMS的一次批量证书挖掘分享

只不过这里的内容先插入到了数据库中,在从数据库中获取相应的字段内容后再通过fwrite写入到配置文件。其中多了SQL插入的一部分代码,但是开发的逻辑还是一样的。

某开源CMS的一次批量证书挖掘分享

我们在去看下要写入的member_model.inc配置文件,我们通过反斜杠转义原有单引号,使之与后面的单引号闭合,然后通过有括号将前面的内容全部闭合掉,成功将我们的内容逃逸出来。

这里我们成功将我们想要写入的内容逃逸出来,但是我们知道.inc文件是无法进行解析的,所以我们要找到一处文件包含点来包含该inc文件才可以。

某开源CMS的一次批量证书挖掘分享

我们通过文件管理器功能处可以进行文件包含,因为这里用又用到了fwrite()函数,我们通过包含也可以绕过上述我们说到的代码过滤。

某开源CMS的一次批量证书挖掘分享

我们去访问1.php文件,成功包含member_model.inc,实现rce。

某开源CMS的一次批量证书挖掘分享

其中存在如下逻辑的代码在DedeCMS中还有很多很多,以下就不去一一列举,师傅们掌握其中的审计思路即可。

sys_safe.php

某开源CMS的一次批量证书挖掘分享

article_string_mix.php

某开源CMS的一次批量证书挖掘分享

article_template_rand.php

某开源CMS的一次批量证书挖掘分享

以下展示DeDeCMS部分证书:

某开源CMS的一次批量证书挖掘分享

原文始发于微信公众号(零幺sec):某开源CMS的一次批量证书挖掘分享

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年10月17日13:26:00
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   某开源CMS的一次批量证书挖掘分享http://cn-sec.com/archives/2120296.html

发表评论

匿名网友 填写信息