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

杀毒防毒
U盘(auto病毒)类病毒分析与解决方案
解析魔兽木马Trojan-PSW.Win32.WOW
绕过主动防御 木马病毒刺穿卡巴斯基
总结经典:木马十大藏身地点大搜查
手动清除 chcp.exe病毒 保护 MSN的安全
卡巴斯基KIS 7.0防火墙设置完全攻略
百毒不侵 如何以不变应万变预防病毒
病毒日新月异 六大反病毒技术亟待成熟
守住你的网站 防御DDoS攻击实用指南
提高诺顿杀毒软件速度的五则技巧
安全升级 新版迅雷杀毒方案之详解
病毒非电脑的专利 常见手机病毒分析
卡巴斯基8.0主要特性介绍(附激活码)
几大常见的手机杀毒软件试用横评
三种2008版杀毒软件七大主流功能横评
检测硬盘与内存中病毒痕迹的四种绝招
优化XP使卡巴斯基7.0单机版运行流畅
上网不再怕中毒 教你一招克死所有病毒
“色情终结者”病毒专删PC内色情电影
精心设置卡巴斯基 加快杀毒速度

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-20   浏览: 30 ::
收藏到网摘: 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我就不贴出来了,自己摸索。
  本地测试是可以直接进后台的。
  可以参考这里。