一、漏洞描述
一款用于PHP开源网站进行管理的系统被称为织梦内容管理系统 , 也就是Dedecms , 在Dedecms V5.7 SP2版本里边的tpl.php当中存在着代码执行方面的漏洞 , 利用这个漏洞能够于增加新标签期间上传木马 , 进而得以获取webshell。
二、利用条件
该漏洞利用需要登录后台,并且后台的账户权限是管理员权限。
三、漏洞环境搭建
1、DeDeCMS V5.7 SP2(UTF - 8)由官方进行下载, 其具体的下载地址是, www.dedecms.com/products/de… , 这是提供该版本下载的网址。
2、使用phpstudy搭建web环境
3、把下载好的源码放到网站根目录下也就是www目录下,然后开启phpstudy, 浏览器访问http://127.0.0.1/dedecms/uploads/install/index.php,点击继续,
中间有一个配置MySQL数据库密码,其余全部默认继续
四、漏洞复现
1、鉴于这个漏洞是归属于后台漏洞范畴, 得先登录至后台才行, 此后台默认的账户以及密码均为admin, Dedecms默认的后台路径乃/uploads/dede。
2、分析tpl.php里面的代码
有一个名为savetagfile的函数在此处被定义, 首先会做一个判断, 判断参数“action”的值是不是等于savetagfile, 要是等于的话就会进行下一步。
那么, 存在着这样一个函数, 它被称作csrf检验函数, 此函数肩负着对于CSRF漏洞防备的功用, 而要实现绕过其限制的目的, 就得去添加token。
C呢, 正则表达式匹配, 这所表达的意思是, 去判断filename参数的值, 是不是匹配正则表达式的条件, 要是不匹配, 那就不允许进行操作。
D: 将$content之中的内容, 写入至相对应的路径里,鉴于这一部分代码, 除了针对写入的文件名字, 做了简便的过滤以及一项csrf防护之外, 其他方面并没有什么安全举措, 致使我们能够任意写入代码。
其余的
政策表达式的意思
匹, 配输入字符串的开始位置, 除非在方括号表达之中使用, 然此时候它表呈现不接受该些字符集, 合。若要去匹配这, 个帽字符的本身体, 那么请使用。
{1,}:代表匹配1次到多次,最少1次.
正则里的方括号, 所指的是那种, 符合方括号之中要求的, 仅仅为“一个字符”, 而这个字符, 是小写字母、数字、下划线、横线里的其中一个字符。

.lib.php:匹配.lib匹配.php
它可用于匹配输入字符串的结尾位置, 要是设置了RegExp对象的Multiline属性, 那么$也能够匹配‘\n’或者‘\r’, 若要匹配$字符自身, 得使用$。
用来表示匹配一个完整字符串的^和$, 是位于头尾的, 一旦这个字符串里出现哪怕任何一个并非属于给定中内容范畴的字符之时, 该字符串也就不能够被匹配成功了。
以下处理filename参数值, 把其中.lib.php替换成空。首先, 使用preg_replace函数, 通过“###i”这种方式, 针对filename参数值进行处理, 将其中.lib.php替换为空 , 这里的“###i”中, “#”是占位符, “i”表示不区分大小写。
用于删除反斜杠的stripslashes()函数, 其所删除的反斜杠, 是被addslashes()函数添加的。
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://127.0.0.1/dedecms/uploads/dede/tpl.php?action=savetagfile&token=a42b45bf9459aa8c256dadff4eaf483d&filename=abc.lib.php&content=
7、浏览器访问构造的payload,下图发现成功写入
8、根据代码可以看到写入到taglib目录,浏览器访问 http://127.0.0.1/dedecms/uploads/include/taglib/abc.lib.php
9.gethsell写入一句话木马
http://127.0.0.1/dedecms/uploads/dede/tpl.php?action=savetagfile&token=a42b45bf9459aa8c256dadff4eaf483d&filename=abcd.lib.php&content=
10.菜刀连接,成功getshell
五、漏洞防御
1.禁止此处写入文件。
2.过滤恶意标签