從團購網的漏洞看網站安全性問題

自從9月份在同事推薦下在某團購網買了一份火鍋的套餐後,就迷上了,幾乎每天必去瀏覽一遍,看看有什麼又便宜又好喫的。元旦期間當然也不例外,1號那天上午,看到了XXX團購網的“VIP會員0元領紅包”活動,0元?我最喜歡了,雖然參與過很多次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跨站腳本攻擊(一般用判斷主機頭的方式)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章