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

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

缺陷编号:wooyun-2014-048570

漏洞标题:phpmps 某处存在sql注入(鸡肋)

相关厂商:phpmps.com

漏洞作者: menmen519

提交时间:2014-02-20 16:40

修复时间:2014-05-21 16:41

公开时间:2014-05-21 16:41

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

phpmps 某处存在sql二次注入

详细说明:

phpmps_v2.3_build121113_utf8
在用户注册时候,虽然做了转移,但是存储到数据库的时候转义符被去掉,从而造成sql二次注入,登陆后跳转截图

ss.png


点击左侧的购买信息币处:

qq.png


此处有两处,都是从数据库直接取出来用户名,做用户查询所用:
在member.php里面:

526     case 'act_gold':
527 $type = $_POST['type'];
528 $number = $type == 'money2gold' ? intval($_POST['m_number']) : intval($_POST['c_number']);
529
530 if($number <= 0)showmsg('数量必须大于0');
531 $userinfo = member_info($_userid);
532 $_credit = $number * $CFG['credit2gold'];
533 $_money = $number * $CFG['money2gold'];
534
535 if($type == 'money2gold') {
536 if($_money > $userinfo['money']) showmsg('您的资金不足以支付此次购买');
537 money_diff($_username, $_money, $type);
538 } else {
539 if($_credit > $userinfo['credit']) showmsg('您的积分不足以支付此次购买');
540 credit_diff($_username, $_credit, $type);
541 }
542 gold_add($_username, $number, $type);
543 showmsg('购买信息币成功' , 'member.php?act=gold');
544 break;


追踪到相关函数:

21 function gold_diff($username, $number, $note = '', $authid = '')
22 {
23 global $db, $table;
24 $number = intval($number);
25 if($number < 0) showmsg('数量不能小于0');
26 $note = addslashes($note);
27 $r = member_info($username,'2');
28 if(!$r) showmsg('不存在此用户');
29 extract($r);
30 $time = time();
31 $ip = get_ip();
32 if($number > $gold) showmsg('您的金额不够支付');
33 $db->query("UPDATE {$table}member SET gold=gold-$number WHERE username='$username'");
34 $db->query("INSERT INTO {$table}pay_exchange (`username`,`type`,`value`,`note`,`addtime`,`ip`) VALUES('$username','g
old','-".$number."','$note','$time','$ip')");


43 function credit_add($username, $number, $note = '')
44 {
45 global $db, $table;
46 $number = intval($number);
47 if($number < 0) showmsg('数量不能小于0');
48 $db->query("UPDATE {$table}member SET credit=credit+$number WHERE username='$username'");
49 $note = addslashes($note);
50 $time = time();
51 $ip = get_ip();
52 if($db->affected_rows() == 0) showmsg('添加失败');
53 $db->query("INSERT INTO {$table}pay_exchange (`username`,`type`,`value`,`note`,`addtime`,`ip`) VALUES('$username','c
redit','$number','$note','$time','$ip')");
54 }


由此可见两处都没有对从数据库取出来的参数进行过滤,所以导致sql注入

漏洞证明:

在资金购买信息币处,验证处sql报错,后面的利用就不用多说了,很简单

y1.png


显示:
MySQL server error report:Array ( [0] => Array ( [message] => MySQL Query Error ) [1] => Array ( [sql] => select * from phpmps_member where username='jkgh009'' ) [2] => Array ( [error] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''jkgh009''' at line 1 ) [3] => Array ( [errno] => 1064 ) )

修复方案:

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2014-02-26 23:30

厂商回复:

非常感谢作者提供漏洞信息。谢谢。

最新状态:

暂无