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

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

缺陷编号:wooyun-2015-0111824

漏洞标题:北京国际首都机场重要敏感信息泄露导致出现一系列安全问题(可泄露所有人的登机信息、理论可getshell)

相关厂商:北京国际首都机场

漏洞作者: izy

提交时间:2015-05-03 23:53

修复时间:2015-06-22 08:30

公开时间:2015-06-22 08:30

漏洞类型:系统/服务运维配置不当

危害等级:高

自评Rank:20

漏洞状态:已交由第三方合作机构(cncert国家互联网应急中心)处理

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-05-03: 细节已通知厂商并且等待厂商处理中
2015-05-08: 厂商已经确认,细节仅向厂商公开
2015-05-18: 细节向核心白帽子及相关领域专家公开
2015-05-28: 细节向普通白帽子公开
2015-06-07: 细节向实习白帽子公开
2015-06-22: 细节向公众公开

简要描述:

泄露..泄露...各种泄露...

详细说明:

这是当时在机场测试的,时间比较紧没有测试完全就登机了。。。
在登陆的时候抓包看到这个

屏幕快照 2015-05-03 上午6.41.22.png


然后我就把seat改成我朋友的,同样返回一个password,并且可以登录

屏幕快照 2015-05-03 上午6.41.42.png


屏幕快照 2015-05-03 上午6.42.24.png


屏幕快照 2015-05-03 上午6.42.15.png


返回的账号都是可以成功登陆的,因为不在机场所以就不测试了...
当时因为登陆速度太慢了,同时用nmap探测了一下wifi认证的服务器:106.120.238.126
对机场用户开放了如下端口:

屏幕快照 2015-05-03 上午6.37.18.png


如果是外网则未开放80、8090端口
在机场的时候访问443端口:http://106.120.238.126:443/ (刚刚回来发现外网也可以访问)
有目录遍历漏洞

屏幕快照 2015-05-03 下午6.17.01.png


服务器账号密码泄露(不可外连)

屏幕快照 2015-05-03 上午6.31.02.png


找到源码,还是1月份备份的

屏幕快照 2015-05-03 下午6.17.01.png


屏幕快照 2015-05-03 下午6.24.22.png


屏幕快照 2015-05-03 下午6.24.33.png


还有各种接口的信息
稍微看了一下源码,有很多漏洞啊..
因为前面就有一个越权访问的漏洞,所以重点看了一下登陆、查询的逻辑,普通的:短信炸弹、越权访问(泄露登机人信息)
都是验证成功后直接调用接口,而我们可以直接访问接口绕过验证

public function sendsmsAction(){
$this->_helper->viewRenderer->setNoRender();
$userip = $_SERVER["REMOTE_ADDR"];
$pid = $_REQUEST['pid'];
$phone = $_REQUEST['phone'];
$lan = $_REQUEST['lan'];
$curtime = $_REQUEST['curtime'];
$passport = $_REQUEST['passport'];
$password = "auto!^**wwkeypss";
$json = array(array('code'=>'1', 'msg'=>'申请成功,直接发送短信'),array('code'=>'2', 'msg'=>'申请成功,返回帐号'),array('code'=>'3', 'msg'=>'申请成功,返回帐号和密码'),array('code'=>'-1', 'msg'=>'登陆失败'),array('code'=>'-2', 'msg'=>'非法的手机号'),array('code'=>'-3', 'msg'=>'非法的mac地址'),array('code'=>'-4', 'msg'=>'非法>的校验位'));
$value = md5($pid.$phone.$curtime.$password);
if($passport!=$value){
$rt = json_encode($json[6]);
echo $rt ;
die;
}
$getsmsurl = "http://106.120.238.122/portal/regbycustomer?idtype=1&idnum=$phone";
$f = fopen($getsmsurl, "r");
if($f){
$smscode=fread($f,60);
$result = substr($smscode,10,1);
// var_dump($smscode);echo "</br>";
// var_dump($result);
if($result == 1){
$rt = json_encode($json[0]);
echo $rt;
}
}
}


越权访问,理论可以获得所有人的登机信息

public function ajaxloginAction()
{
$this->_helper->viewRenderer->setNoRender();
$user=trim($_POST['user']);
$password=trim($_POST['password']);
$mac=$_SESSION["usermac"];
$userIp = $_SERVER['REMOTE_ADDR'];
$userip = $_SERVER["REMOTE_ADDR"];
if ('' == $user) {
echo -4;//账号不能为空
return;
}
if ('' == $password) {
echo -5;//密码不能为空
return;
}
//require_once '../application/models/Login/Standard.php';
require_once '../application/models/Remote/DataValidation.php';
$login=new Models_Remote_DataValidation();
$rs=$login->checkLogin($user, $password);
//echo $rs;// -1:用户名,密码不对,-2:用户帐号使用时间已到期,正值:剩余上网时间
$len=strlen($rs);
if($len > 10)
{
echo 0;
fopen("http://".REMOTE_ADDRESS."/portal/macinsacct?mac=$mac&user=$user&pass=$password", "r");

error_log("user==================================".$user);
$i=0;
for($i=0;$i<3;$i++)
{
$rt=$this->test();
error_log("bras rt=$rt");

if(0==$rt)
{
$sendurlcn = "http://106.120.238.123/portal/sendloginauth?ip=$userip&username=$user&msgtype=2";
try{
fopen ( $sendurlcn, "r" );
}catch(Exception $e){
}
break;
}

break;
}
if(0==$rt)
{

$cookiewu=$_COOKIE['loginwu'];
$cookiewp=$_COOKIE['loginwp'];
if ($cookiewu && $cookiewp){

}else{
$loginuser = $user;
$loginpass = $password;
$sendurlcn = "http://106.120.238.123/portal/getregtime?username=$user";
$f = fopen ( $sendurlcn, "r" );
if($f){
$name=fread($f,80);
$logintimescj = $name;
}else{
// $username = $user;
}
setcookie("loginwu","$loginuser",time()+3600*4);
setcookie("loginwp","$loginpass",time()+3600*4);
setcookie("loginwt","$logintimescj",time()+3600*4);
}
error_log("user=================loginsuccess============".$user);
echo $rt;
}
elseif(2==$rt)
{
echo "1";
error_log("重复登陆,直接跳转!");
}
else
{
echo "-3";
error_log("login fail !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
}

}else
{
echo $rs;
error_log("login failed rt=$rt\n");
}
}


直接访问接口则绕过登陆验证,理论可以登陆所有账户
因为在外网所以不能测试
如果可以,请找一家安全公司做源码审计项目,问题太多,既然用户这么信任你,请保护好用户的隐私。
在这也是 可能 造成前台getshell的漏洞

function updateConf($username, $pass, $server){
if(!file_exists("api/config.inc.php")) return "文件smsdemo/api/config.inc.php 不存在!";
if(!is_writable("api/config.inc.php")) return "文件smsdemo/api/config.inc.php 不可写!请检查文件属性!";
$fd = fopen("api/config.inc.php","w");
if(!$fd) return "文件smsdemo/api/config.inc.php 打不开, 请检查文件属性!";
$line = '<? '."\n".
'/** '."\n".
' * 这是配置文件 '.
' * $'."vcpserver SCP服务器地址,测试服务器为testxml.todaynic.com,正式服务器为xml.todaynic.com "."\n".
' * $'."vcpserverport SCP服务器,在测试环境和真实环境,使用的接口均为20001 "."\n".
' * $'."vcpsuser 时代互联提供的真实短信用户或测试用户 "."\n".
' * $'."vcppassword 时代互联提供的真实短信用户密码或测试用户密码 "."\n".
' * '."\n".
' * www.now.com,Inc. http://www.now.com '."\n".
'**/ '."\n".
'$'.'vcpserver="'.$server.'"; '."\n".
'$'.'vcpserverport="20001"; '."\n".
'$'.'vcpuser="'.$username.'"; '."\n".
'$'.'vcppassword="'.$pass.'"; '."\n".
'?> '."\n";
if(fwrite($fd, $line)===FALSE) return "文件smsdemo/api/config.inc.php 写入失败!请检查文件属性!";
fclose($fd);
return "1";
}


还有这个服务器,不知为何测试有点问题:
$vcpserver="sms.todaynic.com";
$vcpserverport="20002";
$vcpuser="m****18";
$vcppassword="o****t";

漏洞证明:

屏幕快照 2015-05-03 下午6.39.58.png


所有资料、源码已删。

修复方案:

安全审计、服务器安全配置、第三方接口认证

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:11

确认时间:2015-05-08 08:28

厂商回复:

CNVD未直接复现,已经转由CNCERT向民航行业测评单位通报,由其后续协调网站管理单位处置.

最新状态:

暂无