导航

心动吧黑客BLOG

自发研究:须要多维思想而且要想不可能为可能的人才能做到

« Microsoft IIS 6.0 WebDAV Remote Authentication Bypass VulnerabilityDOC 0day »

DreamArticle 3.0 后台验证漏洞和注入漏洞

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我就不贴出来了,自己摸索。

本地测试是可以直接进后台的。

可以参考这里。

原创文章如转载,请注明:转载自心动吧黑客BLOG [ http://www.abcxd.com/abcxd/ ]

本文链接地址:http://www.abcxd.com/abcxd/abcxdArticle/PHPoday/DreamArticle-3.0.html

  • 相关文章:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

黑客榜之热文排行

黑客榜之本年排行

黑客榜之本月排行

黑客榜之随机文章

网站分类

搜索内容

最新评论及回复

最近发表

所属分类下的文章

日历

Copyright ⊙ 2004-2009 心动吧 UrL:ABCXD.CoM All RiGhts Reserved