0


dedecms前台RCE代码审计复现

一、版本信息

dedecms V5.8.1

cms安装包地址:https://github.com/dedecms/DedeCMS/releases/tag/v5.8.1

成功安装cms后

来到include/common.func.php****目录下 的ShowMsg()方法下

该方法下如果$gourl参数为-1,就会将Referer参数赋值给$gourl,并且无任何过滤,那么说明$gourl参数我们是可以控制的

这里全局搜索哪里使用了ShowMsg()这个方法-------->/plus/flink.php

这里只需要让$dopost参数等于save即可调用ShowMsg()并且调用时只传入了两个参数,第一个$msg参数不影响,传入第二个参数$gourl=-1那么刚好满足Showmsg()方法中$gourl参数可控的条件

继续来到ShowMsg()的代码块

这里判断$gourl和$onlymsg的值,因为/plugs/flink.php调用ShowMsg()时之传入了两个参数,那么$onlymsg=0 所以条件都不满足,直接执行else下的代码

该正则匹配对$gourl参数没什么影响 然后将$gourl赋值给$tgobj

然后接下来$func .= 的意思为 $func = $func. 后面跟拼接的字符串

$func拼接完成后 此时我们可以echo一下$func

成功了 接下来又将$func赋值给$rmsg 经过下面一系列的拼接操作最后将$rmsg拼接给了$msg那么$msg参数就有我们构造的Referer参数

继续往下看

我们查看LoadString(方法)

这里将$msg参数赋值给了sourceString

然后又将MD5编码后的sourceString赋值给了$hashcode

接着又把$hashcode拼接然后赋值给cacheFile 这里我们可以echo $this->cacheFile 来证明一下

看样子应该是生成了一个文件 那么去该目录查看一下

确实保存在了/data/tplcache目录下面

然后我们跟进之前的Display()方法

这个就直接包含了刚才的那个文件 所以直接在referer参数后加上<?php system(ipconfig)?>

但是提示错误了,应该是做了过滤 那么过滤应该就在WriteCache()这个方法里面 继续跟进

看到了CheakDisabledFunctions() 应该就是过滤函数了 直接跟进

看到过滤的字符串,应该就是这里进行过滤了,这里我查看网上的师傅的文章 payload为<?php “system”('ipconfig')?>可以绕过

但根据这个过滤规则 我尝试了一下文件上传上常有的绕过思路 进行参数变异

<?php $a='syste';$b='m';$c=$a.$b;$c('ipconfig');?>

好像也可以绕过该过滤函数

以上就是这次dedecms前台rce复现的全部过程


本文转载自: https://blog.csdn.net/H4ck111/article/details/127531985
版权归原作者 挖不到洞啊:O 所有, 如有侵权,请联系我们删除。

“dedecms前台RCE代码审计复现”的评论:

还没有评论