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

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

缺陷编号: WooYun-2015-92164

漏洞标题: 360安全路由某版本固件源码中发现多处安全隐患(PHP代码逻辑)

相关厂商: 奇虎360

漏洞作者: Matt认证白帽子

提交时间: 2015-01-16 19:28

公开时间: 2015-03-02 19:28

漏洞类型: 应用配置错误

危害等级: 中

自评Rank: 20

漏洞状态: 厂商已经确认

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

Tags标签: 无

3人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

360安全路由某版本固件源码中发现多处安全隐患

详细说明:

/*

由于手头上没有360路由,暂且一切都是从代码层面上来看的。

理论上漏洞是存在的。

*/

先用binwalk导出了360路由的固件

发现其用的是php写的web模块,

其中指令的交互是与本机的5000端口进行通信实现的,

包括重启等动作。

漏洞证明:

并且验证代码存在多处漏洞

1 unserialize

在userclient的模块中,

验证用户的时候,首先通过读取cookie中的qty的值进行unserialize

所以这里存在一个潜在的威胁

code 区域
```PHP
public function GetData()
{
global $_COOKIE;

$ArrRet = Array();
$sQRT = array_key_exists( self::COOKIE_NAME, $_COOKIE ) ? $_COOKIE[ self::COOKIE_NAME ] : '';
$sQRT = trim( $sQRT );
if ( ! empty( $sQRT ) )
{
$sQRT = @ stripslashes( $sQRT );
$ArrTmp = @ unserialize( $sQRT );//存在的点
if ( is_array( $ArrTmp ) && count( $ArrTmp ) )
{
$ArrRet = $ArrTmp;
}
}

return $ArrRet;
}
```



2 dev_mod

360的开发者模式存在俩种判断模式

1 手动开启了开发者模式

2 HTTP_HOST=127.0.0.1

在第二种模式中 我们完全可以通过

GET http://192.168.1.1/ HTTP/1.0

Host: 127.0.0.1

这样的请求达到请求的HOST是127.0.0.1

从而绕过他对HOST的判断

code 区域
```PHP
function _is_dev_env() {
if (defined ( '_is_dev_env_cache' )) {
return true;
}

if (0 == strcasecmp ( '127.0.0.1', $_SERVER ['HTTP_HOST'] )) { //漏洞点
define ( '_is_dev_env_cache', 1 );
return true;
}

return false;
}
```



绕过开发者模式到底能看什么呢,就不用细说了,看下面的文件列表大概就知道了

code 区域
root@kali:~/Desktop/_360_Original_0605.bin.extracted/squashfs-root# grep -n -r "IsDebug" *
grep: home: 没有那个文件或目录
www/mag/incfsmag/CMagWifi.php:28: if ($this->IsDebug()) {
www/mag/incfsmag/CMagWifi.php:64: if ($this->IsDebug()) {
www/mag/incfsmag/CMagWifi.php:79: if ($this->IsDebug()) {
www/mag/incfsmag/CMagWifi.php:118: if ($this->IsDebug()) {
www/mag/incfsmag/CMagWifi.php:135: if ($this->IsDebug()) {
www/mag/incfsmag/CMagWifi.php:165: if ($this->IsDebug()) {
www/mag/incfsmag/CMagNetwork.php:49: if ( parent::IsDebug() ) {
www/mag/incfsmag/CMagNetwork.php:102: if ( parent::IsDebug() ) {
www/mag/incfsmag/CMagNetwork.php:149: if ( parent::IsDebug() )
www/mag/incfsmag/CMagLoginChange.php:20: if ($this->IsDebug()) {
www/mag/incfsmag/CMagLoginChange.php:59: if ($this->IsDebug()) {
www/mag/incfsmag/CMagBase.php:16: public function IsDebug() {
www/mag/incfsmag/CMagWatt.php:19: if ($this->IsDebug()) {
www/mag/incfsmag/CMagWatt.php:44: if ($this->IsDebug()) {
www/mag/incfsmag/CMagDevice.php:25: if (parent::IsDebug ()) {
www/mag/incfsmag/CMagDevice.php:91: if (parent::IsDebug ()) {
www/mag/incfsmag/CMagOptimize.php:36: if ( parent::IsDebug() )
www/mag/incfsmag/CMagReboot.php:29: if ( parent::IsDebug() )
www/mag/incfsmag/CMagMacClone.php:20: if ($this->IsDebug()) {
www/mag/incfsmag/CMagMacClone.php:47: if ($this->IsDebug()) {
www/mag/incfsmag/CMagInfo.php:35: if ( parent::IsDebug() )
www/mag/incfsmag/CMagDeviceList.php:34: if ( parent::IsDebug() )
www/mag/incfsmag/CMagDeviceList.php:211: if ( parent::IsDebug() )
www/mag/incfsmag/CMagDeviceList.php:270: if ( parent::IsDebug() )
www/mag/incfsmag/CMagDhcp.php:23: if ($this->IsDebug()) {
www/mag/incfsmag/CMagDhcp.php:41: if ($this->IsDebug()) {
www/mag/incfsmag/CMagDhcp.php:67: if ($this->IsDebug()) {
www/mag/incfsmag/CMagDeviceBlackList.php:14: if ($this->IsDebug ()) {
www/mag/incfsmag/CMagProtect.php:36: if ( parent::IsDebug() )
www/mag/incfsmag/CMagProtect.php:44: if ( parent::IsDebug() )
www/mag/incfsmag/CMagProtect.php:234: if ($this->IsDebug()) {
www/mag/incfsmag/CMagProtect.php:264: if ($this->IsDebug()) {
www/mag/incfsmag/CMagProtect.php:294: if ($this->IsDebug()) {
www/mag/incfsmag/CMagProtect.php:314: if ($this->IsDebug()) {
www/mag/incfsmag/CMagProtect.php:328: if ($this->IsDebug()) {
www/mag/incfsmag/CMagUpgrade.php:25: if ($this->IsDebug ()) {
www/mag/incfsmag/CMagUpgrade.php:35: if ($this->IsDebug ()) {
www/mag/incfsmag/CMagUpgrade.php:54: if ($this->IsDebug ()) {
www/mag/incfsmag/CMagUpgrade.php:94: if ($this->IsDebug ()) {
www/mag/incfsmag/CMagUpgrade.php:112: if ($this->IsDebug ()) {
www/mag/incfsmag/CMagUpgrade.php:133: if ($this->IsDebug ()) {
www/mag/incfsmag/CMagUpgrade.php:163: if ($this->IsDebug ()) {
www/mag/incfsmag/CDiagnose.php:13: if ( parent::IsDebug() )
www/mag/incfsmag/CMagFirstLaunch.php:22: if ($this->IsDebug()) {
www/mag/incfsmag/CMagFirstLaunch.php:40: if ($this->IsDebug()) {
www/mag/incfsmag/CMagFirstLaunch.php:52: if ($this->IsDebug()) {
www/mag/incfsmag/CMagFirstLaunch.php:125: if ($this->IsDebug()) {



3 后门or正常服务?

code 区域
class CMagReboot extends CMagBase
{
const SERVER_ADDR = '127.0.0.1';
const SERVER_PORT = 5000;



基本通讯功能都是与这个端口进行通信,

暂且不知道这个端口只是单独绑定在127还是绑定在所有的网卡上的

4 修改任意配置?

我猜这个要么是手机客户端使用的,要么是web的时候ajax请求,

不管怎么说这是一个验证的错误

code 区域
ajax_execute.php

$cmd = isset($_REQUEST['cmd']) ? $_REQUEST['cmd'] : "";

$skipReferCheck = (0 == strcasecmp ('isinited_start', $cmd));

if (!$skipReferCheck) {
_check_refer();//检测来路,来路是不是Luyou360.com 这个绕过不用说罢
}
//login_verify_start
//isinited_start
// 开绿灯
$skipInitedCheck =
(0 == strcasecmp ('login_verify_start', $cmd)
||0 == strcasecmp ('isinited_start', $cmd) );

if (!$skipInitedCheck) {
$ajaxBase = new AjaxBase();
$ajaxIsInited = new AjaxIsInited();
$isDebug = $ajaxBase->isDebug();
if (!$isDebug && $ajaxIsInited->isInitedSucc()) {
echo "yyyy";
exit();
}
}
$result = null;

$ajaxMap = new AjaxMap();
try {
$worker = $ajaxMap->Parse($cmd);//这边可以调用一些模块
if (!empty($worker)) {
$result = $worker['o']->execute($worker['p']);
}
} catch (Exception $e) {}

if (empty ( $result )) {
$result = getResultArray( SRConst::SR_ERROR_UNKNOWN );
}

header( 'Content-type: text/html; charset=utf-8' );
echo @ json_encode(is_array($result) ? $result : Array());





这里是大致可以调用的模块,但是模块的参数都是加密的

很多模块哦,什么改ssid密码,拨号密码什么的

ajaxmap.php

code 区域
var $cmdMap = Array(
'login_verify_start' => Array('c' => 'AjaxLoginVerify', 'p' => Array('cmd', 'userpwd')),

'islogin_start' => Array( 'c' => 'AjaxIsLogin', 'p' => Array('cmd', 'isblock')),

'isinited_start' => Array( 'c' => 'AjaxIsInited', 'p' => Array('cmd', 'isblock')),

'initpwd_start' => Array( 'c' => 'AjaxInitPwd', 'p' => Array('cmd', 'userpwd','isblock')),

'dwt_start' => Array( 'c' => 'AjaxDetectWLanType', 'p' => Array('cmd')),
'dwt_read' => Array( 'c' => 'AjaxDetectWLanType', 'p' => Array('cmd')),

'loginpppoe_start' => Array( 'c' => 'AjaxPPPOE', 'p' => Array('cmd', 'username', 'userpwd', 'dns_type', 'dns1', 'dns2')),//比如这个可以修改dns配置和pppoe配置
'loginpppoe_read' => Array( 'c' => 'AjaxPPPOE', 'p' => Array('cmd')),

'loginpppoesp_start' => Array( 'c' => 'AjaxPPPOESpecial', 'p' => Array('cmd', 'username', 'userpwd', 'dns_type', 'dns1', 'dns2', 'area')),
'loginpppoesp_read' => Array( 'c' => 'AjaxPPPOESpecial', 'p' => Array('cmd')),

'wanstatic_start' => Array( 'c' => 'AjaxWanStatic', 'p' => Array('cmd', 'ip', 'mask', 'gate', 'dns_type', 'dns1', 'dns2')),
'wanstatic_read' => Array( 'c' => 'AjaxWanStatic', 'p' => Array('cmd')),

'wandhcp_start' => Array( 'c' => 'AjaxWanDHCP', 'p' => Array('cmd', 'dns_type', 'dns1', 'dns2')),
'wandhcp_read' => Array( 'c' => 'AjaxWanDHCP', 'p' => Array('cmd')),

'wconfig_start' => Array( 'c' => 'AjaxConfigWLan', 'p' => Array('cmd', 'ssid', 'sspwd', 'isblock')),//比如这个可以修改ssid的名字密码

'wconfig2_start' => Array( 'c' => 'AjaxConfigWLan2', 'p' => Array('cmd', 'ssid', 'sspwd','userpwd'))
);



大概都是这么加密的

// 解密

code 区域
$primarykey = parent::getAesKeyLen16();//aes看到我就吓尿了,
$username = lib_aes_decrypt($primarykey, $username);
$password = lib_aes_decrypt($primarykey, $password);

//check params
if (empty($username) || empty($password) ||
$dns_type < 0 || $dns_type > 2) {
return parent::getReturnJsonStruct(SRConst::SR_ERROR_PARAMETER);
}

传说中的key到手了,那我还不横着走?
CMagBase.php
public function getAesKeyLen16(){
return '360luyou#install';
}







修复方案:

你猜

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


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:7

确认时间:2015-01-19 15:57

厂商回复:

此报告涉及产品为老款的360安全路由,我们已修复相关漏洞隐患,新的固件将很快发布在官网论坛上。
关于通信端口的问题,由于已绑定了127.0.0.1的网卡,任何外部请求都无法访问。
感谢白帽子对360安全路由的关注!

最新状态:

暂无


漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(共0人评价):
登陆后才能进行评分

评价

  1. 2015-01-16 19:30 | 泳少 ( 普通白帽子 | Rank:248 漏洞数:82 | ★ 梦想这条路踏上了,跪着也要...)
    1

    安全路由~

  2. 2015-01-16 20:48 | xy小雨 ( 普通白帽子 | Rank:197 漏洞数:55 | 成为海贼王的男人)
    1

    打脸了

  3. 2015-01-16 21:12 | 贫道来自河北 ( 普通白帽子 | Rank:1469 漏洞数:439 | 一个立志要把乌云集市变成零食店的男人)
    1

    10W大奖吗?

  4. 2015-01-16 23:32 | U神 ( 核心白帽子 | Rank:1360 漏洞数:150 | 乌云核心菜鸟,联盟托管此号中,欢迎加入08...)
    1

    P1 么

  5. 2015-01-19 16:03 | wefgod ( 核心白帽子 | Rank:1825 漏洞数:183 | 力不从心)
    1

    哟哟哟哟哟!

  6. 2015-03-03 01:19 | Th1nk ( 实习白帽子 | Rank:58 漏洞数:21 | 关注苍老师与波多野老师)
    0

    求一份源码

登录后才能发表评论,请先 登录