我是如何在Periscope管理面板中繞過Google認證的
Periscope是一個屬于Twitter的iOS/Android應用,主要用于現(xiàn)場直播。通過一個基于WEB的管理面板管理著數(shù)百萬的用戶,你可以通過訪問admin.periscope.tv獲悉。
當你瀏覽站點,所有的請求都講重定向到/auth?redirect=/(這是由于我們沒有一個有效的會話),進而重定向到谷歌身份驗證
重定向后的URL如下所示,包含各種參數(shù)。最有趣的還是.hd這是用來限制登錄到特定域,在我們這個案例中為bountyapp.co
https://accounts.google.com/o/oauth2/auth?access_type=
&approval_prompt=
&client_id=57569323683-c0hvkac6m15h3u3l53u89vpquvjiu8sb.apps.googleusercontent.com&hd=bountyapp.co&redirect_uri=https%3A%2F%2Fadmin.periscope.tv%2Fauth%2Fcallback
&response_type=code
&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fplus.login+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile
&state=%2FStreams
我們嘗試使用test@gmail.com賬戶進行登錄操作,接著我們將重定向到用戶選擇頁面,再次嘗試操作依舊重定向到該頁面。
然而,我們可以簡單的移除這個參數(shù)。在URL中沒有簽名來阻止我們進行修改,該應用的主要任務就是驗證返回的token。
這提供給我們以下的URL(你可能會注意到我已經將Google+范圍刪除了,這是由于測試并沒有進行注冊的原因)
https://accounts.google.com/o/oauth2/auth?access_type=
&approval_prompt=
&client_id=57569323683-c0hvkac6m15h3u3l53u89vpquvjiu8sb.apps.googleusercontent.com
&redirect_uri=https%3A%2F%2Fadmin.periscope.tv%2Fauth%2Fcallback
&response_type=code
&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile
&state=%2FStreams
瀏覽器轉到這個新的頁面,提示我們進行應用授權
單擊“Accept”按鈕之后,重定向連接回到管理面板,以下信息可作為參考
這里可以有應用交換訪問token的代碼,從白名單中驗證返回的用戶ID,或者至少會驗證這個域為bountyapp.co
但是在本案例中,假設我們作為該公司員工使用@bountyapp.co后綴的郵箱成功登錄。所請求的userinfo.profile許可不包含用戶的電子郵箱地址,所以應用程序是不能對它進行驗證的。
至此,我們便獲得了管理后臺。
在這里我們便能夠看到許多的東西了——用戶以及各種信息流。
修復方案
Twitter對這個BUG進行了兩處修改。***個便是在請求中增加了額外的許可
https://www.googleapis.com/auth/userinfo.email
第二個就是修正用戶回調的驗證,現(xiàn)在嘗試使用一個無效的用戶進行身份驗證只會返回一個401頁面
HTTP/1.1 401 Unauthorized Content-Type: text/html; charset=utf-8 Location: /Login Strict-Transport-Security: max-age=31536000; preload X-Content-Type-Options: nosniff X-Frame-Options: DENY X-Xss-Protection: 1; mode=block Content-Length: 36 <href="/Login">Unauthorized</a>.