DedeCMS V5.7 SP2后台代码执行漏洞复现(CNVD-2018-01221)

dedeCMS  V5.7 SP2后台代码执行漏洞复现(CNVD-2018-01221)

一、漏洞描述

织梦内容管理系统(Dedecms)是一款PHP开源网站管理系统。Dedecms V5.7 SP2版本中的tpl.php中存在代码执行漏洞,可以通过该漏洞在增加新标签中上传木马,获取webshell。该漏洞利用需要登录后台,并且后台的账户权限是管理员权限。

二、漏洞环境搭建

1、官方下载DeDeCMS V5.7 SP2(UTF-8),下载地址: http://www.dedecms.com/products/dedecms/downloads/

2、使用phpstudy搭建web环境

3、把下载好的源码放到网站根目录下(www),然后开启phpstudy, 浏览器访问http://192.168.10.171/dedecms/uploads/install/index.php

  

4、点击我已阅读并继续。然后是环境检测,保存默认即可

  

5、接下来是参数配置,需要设置的只有数据库密码,把自己的密码填上去就行了

  

6、然后就把环境搭好了

  

三、漏洞复现

1、由于此漏洞是属于后台漏洞,需要先登录到后台,后台默认的账户和密码都是admin。Dedecms默认后台路径是/uploads/dede。

  

2、分析tpl.php里面的代码

  

  a.此处定义了一个savetagfile的函数,首先做一个判断,参数”action”是否等于savetagfile,如更等于就进行下一步

  b.这里有一个csrf检验函数,需要加上token来绕过限制

  c.正则表达式匹配,这里的意思是判断filename参数是否匹配正则表达式的条件,不匹配就不允许修改操作的进行。

  d.把$content里面的内容写入到相对用的路径里,由于这一部分代码除了对写入的文件名字做了简单的过滤和一个csrf防护之外,其他并没有什么安全措施,导致我们可以任意写入代码。

3、通过上面的代码,有csrf检测防御,需要获得token来进行绕过。再次浏览tpl.php代码,发现action的参数有很多,比如del,edit,upload等等,但只有传入upload的时候页面才会获取token,而其他的都没有获取token,所以只能通过action=upload来获取token。

  

4、我们再去tpl.php里看一下,发现action的参数有很多,只有通过action=upload来获取token,浏览器访问http://192.168.10.171/dedecms/uploads/dede/tpl.php?action=upload 

  

5、然后查看页面源码,发现token

  

6、通过浏览tpl.php代码,发现要上传的参数有:action,token,filename,content,构造payload

a.由于dedecms全局变量注册的特性,所以这里的content变量和filename变量可控。

b.可以把content内容直接写到以.lib.php结尾的文件中。

Payload: http://192.168.10.171/dedecms/uploads/dede/tpl.php?action=savetagfile&token=d751030d70c713c3687a33b77b92e046&filename=abc.lib.php&content=<?php phpinfo();?>

7、浏览器访问构造的payload,下图发现成功写入

  

8、根据代码可以看到写入到taglib目录,浏览器访问 http://192.168.10.171/dedecms/uploads/include/taglib/abc.lib.php

  

9.gethsell写入一句话木马

  

10.菜刀链接,成功getshell

  

四、漏洞防御

1.禁止此处写入文件。

2.过滤恶意标签

posted @ 2019-08-09 14:03 雨中落叶 阅读(...) 评论(...) 编辑 收藏