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

漏洞作者: menmen519

include/library/DB.class.php(128-134): [php] 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); [/php]   发现传递进来的参数,进行处理后变为$idstring ,在此期间 只是做了空格检测,并没有做其他特殊字符的过滤,然后直接进入查询,故而导致sql注入 辐射的文件有: account/bindmobile.php ajax/chargecard.php ajax/coupon.php api/call.php ......   拿其中第一个举例说明: [php] <?php require_once(dirname(dirname(__FILE__)) . '/app.php'); if ( $_POST ) { $userid = $_POST['userid']; $update['mobile'] = $_POST['mobile']; $user = Table::Fetch('user', $userid, 'id'); [/php]   这里$userid并没有做任何处理,就传递过去了,我们构造url为 15115127d3e8d3fb396a435eb866369c31a66037   通过监控器,发现sql语句完整执行: SELECT * FROM `user` WHERE id IN ('sssssssssssssssssssss',sleep(5))#')

发表评论