前言:
去年九月同事在某團購網買了一份火鍋套餐,後來幾乎每天都去買。元旦期間,該團購網推出了「VIP會員0元領紅包」活動,領紅包誰不喜歡?因此我也參與了該活動。
於是果斷進去註冊,點擊購買,進入了購物車再點擊確認訂單,恩?怎麼alert這麼一句「本活動只限VIP會員參與」?我第一個反應是去看頁面原始碼(由於活動已經結束,進不去購買頁面了,所以在這裡我只好用偽代碼來表示):
//确认订单按钮的点击事件function btn_click(){ ajax获取当前用户的类型 如果不是VIP,alert("本活动仅限VIP会员参与"); 否则 form1.submit(); }
然後我在地址欄敲入:javascript:form1.submit(); 回車!進入付款頁面了,再點選確定,恩?購買成功!我獲得了5元紅包!
太給力了! ! !我又新註冊一個帳號,重複上面的步驟,也成功獲得了5元紅包。
馬上留言給客服說明此BUG,但到今天還沒回覆我,呵呵。
這個漏洞的關鍵點是開發人員忘記了在form1.submit()的後台程式碼中判斷目前使用者是否VIP會員,只依賴javascript的驗證。
前台的驗證頂啥用啊,完全可以繞過去,後台的驗證才最重要! !
有了上午的收穫,1號晚上我就繼續找別的團購網的漏洞,果然被我找到一個更嚴重的。
該團購網也舉行了一個元旦抽獎砸金蛋活動,也是免費參與,購買後發現得邀請好友參與活動才有砸金蛋的機會,邀請一個好友就多一個機會,如圖:
我一點擊金蛋就alert一句“沒有抽獎機會了快去邀請好友吧!”,恩,又是javascript?看看程式碼先:
這便是金蛋的點擊事件,其中有一個用AJAX去訪問的頁面lottery1.php,而要傳過去的chance變數應該就是目前使用者擁有的砸蛋機會。
(學習影片分享:程式設計入門)
我試著直接存取lottery1.php?chance=1,回傳error字串,lottery1.php?chance= 0也返回error,lottery1.php?chance=-1,也
返回error,難道沒效果麼?我刷新了一下砸金蛋的頁面,哇! !
我傳了-1過去導致溢出了?我試著砸了幾個,每次都成功拿到代金卷! !太給力了。接著試著用代金捲去下單,也能成功減免掉幾塊錢,
不過一張訂單只能用一個代金卷,呵呵(當然測試用的訂單我最後取消掉了,本人還沒那麼邪惡,哇咔咔)
馬上聯絡客服,居然下班了,QQ不在線,電話打不通,只好留了個言。
接下來幹嘛呢?砸蛋嗆! 42億的金蛋呢,寫了段JS自動砸!截止現在一共有3588個金蛋被砸開,其中至少有2000多個是我砸的,哇咔咔咔
得到了一大堆的代金卷:
##整整185頁,呵呵,蠻壯觀的! ! ! 到了2號,我重新查看該團購網的程式碼時,發現了一個更嚴重的問題:JS中有這麼個方法 乍看之下是跟錢有關的吧,傳入用戶ID和錢的數目,試試看有什麼效果。 用戶ID怎麼獲得?別急,頁面上有: 這個96204就是我當前帳戶的ID了,訪問了一下,返回“線下充值成功”,哇,這麼給力?儲值頁面都不加權限驗證的? 查看了一下帳戶餘額,果然儲值成功了: #哥有2萬餘額了,哇咔咔! !這個漏洞太致命了,立刻給客服留言。剛留完言,他們的開發人員打電話給我了,和我討論砸金蛋的漏洞問題,剛好將剛發現的漏洞一起告訴他。開發人員就是命苦啊,元旦期間,晚上10點多了,他還要改程式碼。
改完他說老闆可能送點禮物給我,好期待啊,呵呵。
最後他把我的帳戶餘額清零了,我在心裡呼喊:不~要~啊,我的2萬元啊~~~~~~~~
總結一下:前台的驗證都是不可靠的,後台必要都要驗證一遍;管理頁面一定要加訪問權限;傳遞到後台的資料一定要
進行合法性驗證;不必要傳遞的參數就不傳,像那個砸蛋,我就想不明白為什麼要把目前使用者擁有的砸蛋機會傳遞到
後台,直接從資料庫中讀取不行麼?用戶ID不要以明文出現。另外也要防範XSS跨站腳本攻擊(一般用判斷主機頭的方式)
我的網站:http://i.goto327.top:85/
#相關推薦:網站安全性
以上是探討某團購網的漏洞的詳細內容。更多資訊請關注PHP中文網其他相關文章!