1. 发现方式:没什么,提现的时候随手一抓包一看觉得有点意思,挖了挖就发现这个了。
2. 漏洞证明:
1.首先给 http://app02.baidurecord.com/html/qianbao.html 这个页面打断点,将这个页面的内容替换为以下内容。
<!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no"/> <title>百度云ABC答题王</title> <script type="text/javascript" src="https://bj.bcebos.com/v1/baidu-abc-dati/baidudati/js/jquery-1.11.1.min.js"></script> <script type="text/javascript" src="https://bj.bcebos.com/v1/baidu-abc-dati/baidudati/js/port.js"></script> <script type="text/javascript" src="https://bj.bcebos.com/v1/baidu-abc-dati/baidudati/js/jiami.js"></script> <script type="text/javascript" src="https://bj.bcebos.com/v1/baidu-abc-dati/baidudati/js/vue_min.js"></script> <script type="text/javascript" src="https://bj.bcebos.com/v1/baidu-abc-dati/baidudati/layer_mobile/layer.js"></script> <script type="text/javascript" src="https://bj.bcebos.com/v1/baidu-abc-dati/baidudati/js/zKit.js"></script> <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> <script type="text/javascript" src="https://bj.bcebos.com/v1/baidu-abc-dati/baidudati/js/share.js"></script> <script type="text/javascript" src="https://bj.bcebos.com/v1/baidu-abc-dati/baidudati/js/zshang.js"></script> <link type="text/css" rel="stylesheet" href="https://bj.bcebos.com/v1/baidu-abc-dati/baidudati/css/default.css"> </head> <body> <section id="stage"> <div class="part qianbao"> <div> <div> <div> <div> <!--头像--> <div><img src="https://bj.bcebos.com/v1/baidu-abc-dati/baidudati/images/touxiang.png" alt=""></div> <!--昵称--> <h2></h2> </div> <div> <ul> <!--游戏次数展示--> <li> <a href="javascript:void(0)"> <h3>¥<span>0</span>.<b>00</b></h3> <p>账户余额(元)</p> </a> <a href="JavaScript:void(0)">去提现</a> </li> <!--奖金金额展示--> <li> <a href="javascript:void(0)"> <h3>¥<span>0</span>.<b>00</b></h3> <p>总收入(元)</p> </a> </li> </ul> </div> </div> </div> <!--明细列表--> <div> <h1>余额明细</h1> <ul> <!-- <li> <div> <h2>奖励</h2> <p>2018.02.05 08:26:22</p> </div> <div class="rightmx centerboth"> <p>+<span>110</span>.<b>00</b></p> </div> </li> --> </ul> <p style="text-align: center;padding: 1vw 0;color: #999999;font-size: 1.4rem;display: none;">点击加载更多</p> </div> </div> </div> <!--提现--> <div class="part tixianbxx" style="display: none"> <!--返回按钮--> <div> <a href="javascript:void(0)"><img src="https://bj.bcebos.com/v1/baidu-abc-dati/baidudati/images/back_hei.png" alt=""></a> </div> <div> <h2>提现金额</h2> <div> <b>¥</b> <p><input type="text"><p> </div> <div> <p>可提现余额<span>0.00</span>元<a href="javascript:void(0)">全部提现</a> </p> </div> </div> <div class="linkbox_p linkbox_x_blue tix"><a href="javascript:void(0)">确认提现</a> </div> <h3>温馨提示</h3> <p>提现成功后,请到<span style="color: #3388FF"> "零钱账户" </span>查看。<br>如有疑问请联系客服<a href="" style="color: #3388FF"></a> </p> </div> <!--提示用微信打开--> <div class="part weixinTishi" style="display: none"> <!--成功界面--> <div class="jieguo chenggbox"> <div><img src="https://bj.bcebos.com/v1/baidu-abc-dati/baidudati/images/chengg.png" alt=""></div> <h2>请在微信中打开</h2> </div> </div> </section> <!----> <script> $(function(){ /*判断是否是微信*/ if(!z.plat.isWeixin()){ $('.weixinTishi').show(); } infor_index(); share(); var infoData = localStorage.getItem('infoData');//读取首页信息 console.log(infoData); infoData = JSON.parse(infoData); $('.shouname').html(infoData.nickname); //填充昵称 $('.tiwen_p a').html(infoData.site_tel); //服务电话 $('.tiwen_p a').attr('href','tel:'+infoData.site_tel); //服务电话 /*if(infoData.img!=''){ $('.touxiang img').attr('src',infoData.img); //填充头像 }*/ var moneyArr=infoData.money.split('.'); //分割余额 $('.yue span').html(moneyArr[0]); //赋值金额 $('.yue b').html(moneyArr[1]); //赋值金额 $('.tibootmoy span').html(infoData.money); //赋值金额 var totalMoneyArr=infoData.totalMoney.split('.'); //分割总奖金 $('.totalmo span').html(totalMoneyArr[0]); //赋值金额 $('.totalmo b').html(totalMoneyArr[1]); //赋值金额 /*请求余额明细*/ var urldatalink = geturllink(); var pagesize = 10; //每页显示数量 var page = 1; function mingxi() { var loading = layer.open({type: 2}); var token = tokenmake(); var userAccessToken = localStorage.getItem('userAccessToken'); var signature = signaturetik(('token='+token),('userAccessToken='+userAccessToken),('pagesize='+pagesize),('page='+page)); $.ajax({ url: urldatalink.mxlist, type: 'post', data: { token: token, signature: signature, userAccessToken: userAccessToken, pagesize: pagesize, page: page }, success:function(ret, err) { layer.close(loading); if (ret) { if(ret.status==1){ lockdian = true; if(ret.data.length>0){ setdata(ret.data); }else { $('.moredate').html('暂无更多'); $('.moredate').show(); } if(ret.data.length>0 && ret.data.length<pagesize){ $('.moredate').html('暂无更多'); $('.moredate').show(); }else if(ret.data.length==10){ $('.moredate').html('点击加载更多'); $('.moredate').show(); } } } else { layer.open({ content: err.msg, skin: 'msg', time: 2 //2秒后自动关闭 }); } } }) } mingxi(); //填充数据 function setdata(data){ if(data){ for(var i =0;i<data.length;i++){ var moneyArrl=data[i].money.split('.'); //分割余额 if(data[i].money>=0){ $('.mingxilist ul').append('<li><div><h2>'+data[i].type+'</h2><p>'+data[i].addTime+'</p></div><div class="rightmx centerboth"><p>+<span>'+moneyArrl[0]+'</span>.<b>'+moneyArrl[1]+'</b></p></div></li>'); }else if (data[i].money<0){ if(data[i].type=='用户提现'){ $('.mingxilist ul').append('<li><div><h2>'+data[i].type+'<span>('+data[i].orderid+')</span></h2><p>'+data[i].addTime+'</p></div><div class="rightmx centerboth"><p><span>'+moneyArrl[0]+'</span>.<b>'+moneyArrl[1]+'</b></p></div></li>'); }else { $('.mingxilist ul').append('<li><div><h2>'+data[i].type+'<span></span></h2><p>'+data[i].addTime+'</p></div><div class="rightmx centerboth"><p><span>'+moneyArrl[0]+'</span>.<b>'+moneyArrl[1]+'</b></p></div></li>'); } } } } } //加载到底部滚动 /* $(window).scroll(function(){ var scrollTop = $(this).scrollTop(); var scrollHeight = $(document).height(); var windowHeight = $(this).height(); if(scrollTop + windowHeight == scrollHeight){ } });*/ /*点击加载更多*/ var lockdian = true; $('.moredate').click(function(){ if(!lockdian){ return; } $('.moredate').html('加载中...'); lockdian = false; page++; mingxi(); }); /*点击跳提现*/ $('.tixianbtn').click(function(){ $('.tixianbxx').show(); $('.timoney input').focus(); }); $('.tixianbxx .back').click(function(){ infor_index(); $('.tixianbxx').hide(); }); $('.tixianbtn').click(function(){ var zonmuney = parseFloat($(this).closest('p').find('span').html()); if(zonmuney>200){ $('.timoney input').val('200'); }else { $('.timoney input').val(zonmuney); } }); /*提现*/ var locktixian = true; $('.tix a').click(function(){ if(!locktixian){ return ; } var don = $('.timoney input').val(); //输入框金额 var zonmuney = $('.tibootmoy').find('span').html(); //总金额 console.log(don); locktixian = false; /*请求首页信息*/ var loading = layer.open({type: 2}); var token = tokenmake(); var userAccessToken = localStorage.getItem('userAccessToken'); var signature = signaturetik(('token='+token),('userAccessToken='+userAccessToken),('money='+don)); $.ajax({ url: urldatalink.withdraw, type: 'post', data: { token: token, signature: signature, money: don, userAccessToken: userAccessToken }, success:function(ret, err) { locktixian = true; layer.close(loading); if (ret) { if(ret.status==1){ window.location.href=ret.data.url; }else { layer.open({ content: ret.msg, skin: 'msg', time: 2 //2秒后自动关闭 }); } } else { layer.open({ content: err.msg, skin: 'msg', time: 2 //2秒后自动关闭 }); } } }) }); }); </script> </body> </html>
主要就是将页面上的校验关掉,我懒得去算签名了,直接在页面上输注入语句让页面给算了。
2.然后在 提现金额 那输入注入语句,可以看到返回有 SQL 语句的错误信息,说明该处存在注入点。
3.然后我们来试试改余额,在之前看到的错误返回信息里可以看到这个参数被弄到钱数那了,所以直接给个加号,让他当做 SQL 语句执行就好了。
4.可以看到余额增加了
5.提现测试,畅通无阻。
3. 修复方案:
1.不要直接拼接 SQL 语句,PHP 的话用 PDO,实在要拼接就做好校验。
2.找个好一点的外包,这外包也忒次了。
3.测试提现的钱要返还吗?
1 个评论
陈子都
赵总niubi哈哈哈哈