dedecms前台RCE代码审计复现

本文围绕DedeCMS V5.8.1展开,介绍了其安装包地址。详细阐述了前台RCE复现过程,包括在特定方法下发现$gourl参数可控,通过一系列操作使$msg参数包含构造的Referer参数,生成文件后尝试在referer参数添加代码,因过滤报错,最后给出绕过过滤函数的思路和示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、版本信息

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复现的全部过程

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值