本文講述了印度票務平臺Townscript缺乏速率限制,以及密碼重置缺陷導致的任意賬戶劫持漏洞。速率限制(Rate Limiting)仍是大多數Web應用不太重視的問題,但一旦與其它功能形成漏洞利用,也將會導致嚴重的危害影響。

漏洞發現

Townscript是一家印度在線活動票務公司,主要提供研討會、展覽、馬拉松和冒險活動等項目的登記、註冊和售票服務,只要用戶發佈活動項目,註冊和購票頁面就會自動生成,其於2017年被印度另一家在線票務平臺BookMyShow收購。

近期,我們打算在印度國內舉辦名爲“Letshack”的安全訓練營活動,作爲活動發起方,我們把該項活動的售票放到了Townscript平臺。不巧的是,註冊進行了一段時間之後,我就把綁定Townscript平臺的郵箱密碼和登錄Townscript平臺進行註冊人員管理的密碼都忘記了,糟糕!已經註冊了500多人,而且活動將在數週後開始,這該如何是好!思來想去,我註冊了一個新的Townscript賬戶打算向Townscript官方發郵件看看有何解決辦法。

但之後,我想就着測試一下Townscript應用吧,看看是否存在漏洞可利用以找回我的先前賬戶…。說整就整,起初我想到的就是SQL注入,雖然SQL注入漏洞影響較大,但發現過程稍顯複雜,我就把測試重點放到了相對簡單的登錄和註冊頁面上。

接下來,我就測試了登錄頁面上的“忘記密碼”功能,經過一番分析之後,我發現該“忘記密碼”並沒有部署速率限制措施(rate limit),那是不是可以據此對其它人的賬戶密碼來個暴力枚舉呢?

我以我當前新註冊的Townscript賬戶爲例,在忘記密碼功能區域輸入了與該賬戶綁定的郵箱地址,然後點擊“找回密碼”,然後,我在該賬戶綁定的郵箱中收到了以下找回密碼的鏈接:

可見,上述找回密碼鏈接非常簡單,其中包括了綁定賬戶的郵箱地址和一個code,該code是一個6位數的數字。那就用我之前賬戶的郵箱地址來試試吧,隨便輸入一個code值,用Burp來暴力枚舉試試:

把6位數的構造字典拉進去就是一番枚舉,但大部份響應看似都是一些404頁面未找到的302響應,在我快要放棄的時候,我又檢查了一下響應長度,一看,其中存在長度爲391的響應:

嘗試着把該響應進行轉發,哇,竟然可以成功跳轉到以下密碼重置界面!

就這樣,在密碼重置功能缺乏速率限制(Rate Limit)的情況下,我通過暴力枚舉重置了我之前忘記了Townscript登錄密碼和綁定郵箱密碼的Townscript賬戶,成功找回了丟失的Townscript賬戶權限,以及其中註冊的數百個參與人員信息。

但是,Townscript應用在賬戶設置中嚴禁更改用戶的綁定郵箱,所以,即使根據上述密碼重置漏洞劫持了受害者賬戶,但受害者一樣還可以通過自己的綁定郵箱再次發起密碼重置請求,找回賬戶,那對攻擊者來說,這就不算真正意義上的賬戶劫持。

接下來,我對Townscript應用中的用戶設置(edit)操作請求進行了抓包,從中發現了包含的用戶綁定郵箱地址,然後我嘗試對其進行了替換:

之後,竟然可以成功實現郵箱修改:

這樣一來,也就是說,我可以利用密碼重置缺乏速率限制+Code暴力枚舉+更改用戶綁定郵箱,實現真正意義上的賬戶劫持,只要知道對方用戶的Townscript綁定郵箱,就能對其實施賬戶劫持。

經驗總結

針對登錄頁面或密碼重置功能可以多花點心思進行研究,尤其是對其中的參數、編碼或用戶屬性進行測試,另外,缺乏速率限制也是當前大多數Web應用存在的問題,可以考慮用它來與其它功能進行組合利用。

*參考來源: medium ,clouds 編譯整理,轉載請註明來自 FreeBuf.COM

相關文章