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

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

缺陷编号:wooyun-2014-063298

漏洞标题:YouYaX论坛前台任意账户登入

相关厂商:youyax.com

漏洞作者: roker

提交时间:2014-06-03 15:06

修复时间:2014-09-01 15:08

公开时间:2014-09-01 15:08

漏洞类型:非授权访问/权限绕过

危害等级:中

自评Rank:10

漏洞状态:厂商已经修复

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

如题

详细说明:

/ext/mobile/login.php 登入页面的处理如下

if (isset($_POST['sub'])) {
include('../../ext_public/database_mobile.php');
mysql_query("SET NAMES 'utf8'");
$sql = "select* from " . $config['db_prefix'] . "user where binary user='" . addslashes($_POST['user']) . "' and binary pass='" . md5(addslashes($_POST['pass'])) . "' and status=1 and complete=0";
$user = $_POST['user'];
$result = mysql_query($sql);
$num = mysql_num_rows($result);
if ($num == 1) {
$_SESSION['youyax_data'] = 1;
$_SESSION['youyax_user'] = $user;
$_SESSION['youyax_bz'] = 1;
@setcookie('youyax_data',1,time()+(60*60*24*30),"/");
@setcookie('youyax_user',$user,time()+(60*60*24*30),"/");
@setcookie('youyax_bz',1,time()+(60*60*24*30),"/");
echo '<script>window.location.href="'.$config['SITE'].'";</script>';
exit;
} else {
$_SESSION['youyax_data'] = 0;
echo '<script>alert("输入错误 or 尚未激活");</script>';
}
}


账号密码正确即赋予 session youyax_data=1 youyax_user=user youyax_bz=1
然而,这个session是可以自己构造的。看到/Lib/IndexAction.php 的代码

public function index()
{
header("Content-Type:text/html; charset=utf-8");
if (empty($_SESSION['youyax_user']) && !stristr($_SERVER['HTTP_USER_AGENT'], 'android') && !stristr($_SERVER['HTTP_USER_AGENT'], 'iphone') && !stristr($_SERVER['HTTP_USER_AGENT'], 'ipad')) {
$cache = new Cache(20);
}
if(isset($_COOKIE['youyax_data']) && isset($_COOKIE['youyax_user']) && isset($_COOKIE['youyax_bz'])){
$_SESSION['youyax_data'] = $_COOKIE['youyax_data'];
$_SESSION['youyax_user'] = $_COOKIE['youyax_user'];
$_SESSION['youyax_bz'] = $_COOKIE['youyax_bz'];
}
if ($_SESSION['youyax_data'] == 1) {
$bz = $_SESSION['youyax_bz'];
$user = $_SESSION['youyax_user'];
if ($bz != 1)
$bz = 0;
if ($bz == 0) {
$_SESSION['youyax_user'] = "";
$user = "";
$_SESSION['youyax_data'] = 0;
}
} else {
$_SESSION['youyax_user'] = "";
$_SESSION['youyax_bz'] = "";
$bz = 0;
$user = "";
}
$this->assign('bz', $bz)->assign('user', $user);


显而易见了。检测cookie再将cookie值赋予session。 那么session将变得毫无意义。。
构造 Cookie: youyax_data=1; youyax_user=username; youyax_bz=1
可前台登入任意用户。对于 一个bbs的话 ,该漏洞是致命的。

漏洞证明:

如上所诉

修复方案:

去掉不必要的

版权声明:转载请注明来源 roker@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2014-06-03 15:51

厂商回复:

对此漏洞的发现表示极大的震惊

最新状态:

2014-06-03:修复公开