当前位置: 首页 > 图文教程 > 网络安全 > 杀毒防毒 > 利用DreamArticle 后台验证漏洞直接登陆后台

杀毒防毒
几个小绝招增强系统对木马和病毒的防范
全面解析木马后门程序运行原理 把它扼杀在摇篮里
修改注册表清除黑客程序保证计算机安全
关闭和限制电脑不常用端口确保安全
与脚本病毒做斗争 几种常见的杀毒方法
经验共享---如何防御网络游戏外挂木马
系统安全之教你手工清除灰鸽子Vip2005
识别文本文件型邮件附件的欺骗方法
安全防护我先行 不准病毒自行启动
彻底清除无法显示隐藏文件病毒
使用杀毒软件的十大误区
李鬼?李逵? 深入了解灰鸽子2007真实功能
揭示灰鸽子七宗罪 不可不知的病毒解决方案
双击无法打开驱动器的杀毒方法
最新木马专杀下载 可杀灭十万种木马
看看你的系统有没有被流氓入侵
小心藏在情书邮件里的病毒盗取你的QQ账号
“灰鸽子”从防到杀全过程
“灰鸽子”凶猛:不容忽视的潜在威胁
彻底清除无法显示隐藏文件的病毒

杀毒防毒 中的 利用DreamArticle 后台验证漏洞直接登陆后台


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-20   浏览: 40 ::
收藏到网摘: n/a

  Topic: DreamArticle 3.0 后台验证逻辑漏洞和注入漏洞, 导致直接登录后台Team: bbs.wolvez.org
  By q1ur3n
  在admin/global.php 有这样一段代码,用来实现”记住密码”登录后台功能的。
  $administrator    = get_cookie("administrator");
  $adminpassword    = get_cookie("adminpassword");
  if ($administrator && $adminpassword) {
  islogin($administrator,$adminpassword);
  } else {
  unset($_SESSION['admincode']);
  set_cookie("admincode",'',time() - 31536000);
  set_cookie("adminid",'',time() - 31536000);
  set_cookie("administrator", '',time() - 31536000);
  set_cookie("adminpassword", '',time() - 31536000);
  da_admin_login();
  }
  $admin=get_admin_info($administrator,$adminpassword);
  get_cookie() 在/include/common.php
  function get_cookie($name){
  global $_COOKIE,$cookieprename;
  if (isset($_COOKIE[$cookieprename.$name])) {
  return urldecode($_COOKIE[$cookieprename.$name]);
  }
  return FALSE;
  }
  可以看到用了urldecode()函数,可以用%2527引入一个单引号绕过gpc
  Islogin() 在admin/function.php
  function islogin($username, $password) {
  global $DreamCMS;
  $_password_=$DreamCMS->db->get_var("SELECT `password` FROM `#DC@__members` WHERE `username`='{$username}'"); //查询$username的密码
  if($password!=$_password_){ //数据库里的密码和提交的密码相比较,不一样就$ISDreamCMSADMIN=FALSE
  $ISDreamCMSADMIN=FALSE;
  if(md5(base64_encode('__DreamCMS__'.$username.'~!(*%)$!$~'.$password.'%#@)'))==DreamCMSAdmin){
  $ISDreamCMSADMIN=TRUE;  //这里是实现一个超级管理员的功能的,DreamCMSAdmin定义在配置文件里。
  }
  }
  if (empty($username)||empty($password)||$ISDreamCMSADMIN){ //逻辑错误出现了,程序员本意是,如果$username为空,或者$password为空,或者$ISDreamCMSADMIN为false就执行登出处理,可以却忘记了在$ISDreamCMSADMIN前面加上!,这样就刚好和程序员本意相反了.也就是说这里就算我们的密码不对都可以通过这个函数。
  unset($_SESSION['admincode']);
  set_cookie("admincode",'',time() - 31536000);
  set_cookie("adminid",'',time() - 31536000);
  set_cookie("administrator", '',time() - 31536000);
  set_cookie("adminpassword", '',time() - 31536000);
  da_admin_login();
  }
  }
  看下面的$admin=get_admin_info($administrator,$adminpassword);
  function get_admin_info($username, $password) {
  global $DreamCMS;
  $admin=$DreamCMS->db->get_row("SELECT * FROM `#DC@__members` WHERE `username`='{$username}' AND password='{$password}'");
  if(empty($admin)){
  if(md5(base64_encode('__DreamCMS__'.$username.'~!(*%)$!$~'.$password.'%#@)'))==DreamCMSAdmin){
  $admin->uid="1";
  }
  }
  $admin->info && $admin->info=unserialize($admin->info);
  return $admin;
  }
  这里就麻烦了,帐号或者密码不对就没有任何权限。
  别忘了,前面还有个可以绕过gpc的get_cookie()
  详细的利用方法和exp我就不贴出来了,自己摸索。
  本地测试是可以直接进后台的。
  可以参考这里。