Duomicms1.32代码执行漏洞(个人理解)

发布于:2022-10-30 ⋅ 阅读:(553) ⋅ 点赞:(0)

0x01 前言

今天下午,想要练习一下代码审计能力,于是就找了Duomicms1.32版本展开,文章当中参考了DuomiCMS 前台命令执行 // 云屿's Blog (cloudyu.me)代码审计实战 - FreeBuf网络安全行业门户 ​​​​​​

0x02 思路

查找eval函数,来展开审计,寻找代码执行,其中包含双引号解析漏洞。

0x03 实战

注意:其中的部分PHP文件做了加密,需要进行解密操作,可以参考DuomiCMS core.class.php 反混淆 // 云屿's Blog (cloudyu.me)  ​​​​​​

的思路 ,我是直接偷懒拿了2.0版本中的中同名的PHP文件(也就是做了替换),发现效果一样

1、core.class.php的分析

先全局搜索,找到core.class.php(此文件是加密过的,我就在这偷懒了)

 找到这段代码(如上图),猜测$strIf可能能够进行恶意传参,向上追踪看看他的前身如下(这里说一下,下面有两个if语句,继续阅读文章,你会发现它是成立的)

这里使用了for循环(如上图),$iar应该是一个二维数组,然后调用了一个函数parsestrif来对$strif做处理,这里先不要急着去看函数是什么样的,在向上追踪$iar,如下

这里使用了preg_match_all函数,不知道的同学可以 看看PHP preg_match_all() 函数 | 菜鸟教程 (runoob.com)

这里的意思是以$labelRule为正则规则,以$content为内容,将匹配到的结果以一个二维数组的形式返回给$iar。

在看看上面if语句,为了使得代码执行下来,必须要在$content里面有  {if:  字样,这时我们追踪本函数parseIf,使用全局搜索功能

2、search.php的分析

一一对每个所包含这个函数的PHP文件分析代码,可以定位到search.php

这里走马观花的看一下,是对$content的多级处理 (如上图)

当我观察怎么样才能执行到下面的代码时,发现这原来在这函数当中(如上图)

 

这直接就在上面调用了这个函数(如上图)。现在我们明确一下目的:需要找一下$content可不可以控制,也就是找一下他的来源,真的让我去追$content发现有些难度,那怎么办呢?

使用die/exit大法来取巧,这里注意下,原搜索界面是这样的(下图1),写了die后界面是这样的(下图2)与此同时,发现在搜索时传参传入了searchword,也就是此变量可以控制,又因为这是一个全局变量(前面有定义)

 

 在PHP文件当中开始写入die,让他返回$content,其实也没有必要怎么做,为什么呢?因为$searchword无论如何都会通过替换(str_replace函数)被传入$content,这时候我们就开始考虑写木马了,接下来回到我们刚刚进入search.php文件时候的地方(中间有很多对于$content的过滤,我们先放置不管,因为有这么多的规则,一时半会分析不过来,等真正遇到的时候在去看是怎么替换的)

3、回到core.class.php的分析

上图所示,我们首先要保障我们传入的东西里面有  {if:  字样

向下看我猜测buildregx应该是跟正则表达式相关的东西,下面preg_match_all将所匹配到的东西返回给$iar

 查看buildregx函数

果然就是将其转化为正则表达式,翻译过来就是(对正则表达式不熟悉的师傅可以去Regex 101 - ZH-CN (regexlearn.com)

 

/{if:(.*?)}(.*?){end if}/is

 所以根据此正则表达式来看必须要{if:}冒号后面的就是我们可以利用的传参,上文也提到了,接下来的两个if判断语句是满足的

最后进入eval函数,eval会把里面的代码当作php代码执行,双引号构成双引号解析漏洞(我觉得这里与eval关系不大,我们的代码其实是双引号解析执行的)

 4、写马

 先拿phpinfo()试试水,然后去写马

 注意下面两段代码,

是search.php当作的(这里借鉴了代码审计实战 - FreeBuf网络安全行业门户

这里限制了我们传入的参数长度为20

 一句话执行成功!!!

5、写在最后的话

非常感谢代码审计实战 - FreeBuf网络安全行业门户DuomiCMS 前台命令执行 // 云屿's Blog (cloudyu.me)的文章的帮助

本文章可能有写的不对的地方或者思路需要改进的地方,欢迎师傅们批评指正

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到