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

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

缺陷编号:wooyun-2014-060820

漏洞标题:最土团购某基础函数过滤不全导致大量sql注入漏洞

相关厂商:zuitu.com

漏洞作者: menmen519

提交时间:2014-05-19 15:54

修复时间:2014-08-14 15:56

公开时间:2014-08-14 15:56

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-05-19: 细节已通知厂商并且等待厂商处理中
2014-05-19: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放
2014-07-13: 细节向核心白帽子及相关领域专家公开
2014-07-23: 细节向普通白帽子公开
2014-08-02: 细节向实习白帽子公开
2014-08-14: 细节向公众公开

简要描述:

某基础函数过滤不全,导致大量sql注入漏洞

详细说明:

include/library/DB.class.php(128-134):
static public function GetDbRowById($table, $ids=array()) {
$one = is_array($ids) ? false : true;
settype($ids, 'array');
$idstring = join('\',\'', $ids);
if(preg_match('/[\s]/', $idstring)) return array();
$q = "SELECT * FROM `{$table}` WHERE id IN ('{$idstring}')";
$r = self::GetQueryResult($q, $one);
发现传递进来的参数,进行处理后变为$idstring ,在此期间 只是做了空格检测,并没有做其他特殊字符的过滤,然后直接进入查询,故而导致sql注入
辐射的文件有:
account/bindmobile.php
ajax/chargecard.php
ajax/coupon.php
api/call.php
......
拿其中第一个举例说明:
<?php
require_once(dirname(dirname(__FILE__)) . '/app.php');
if ( $_POST ) {
$userid = $_POST['userid'];
$update['mobile'] = $_POST['mobile'];
$user = Table::Fetch('user', $userid, 'id');
这里$userid并没有做任何处理,就传递过去了,我们构造url为

5.png


通过监控器,发现sql语句完整执行:
SELECT * FROM `user` WHERE id IN ('sssssssssssssssssssss',sleep(5))#')

漏洞证明:

修复方案:

include/library/DB.class.php
对此函数GetDbRowById入口参数做特殊字符的过滤,即可

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


漏洞回应

厂商回应:

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

忽略时间:2014-08-14 15:56

厂商回复:

此产品已不再维护,原站已经下线,感谢白帽子提交漏洞,中国因你们更精彩

最新状态:

暂无