您好,登錄后才能下訂單哦!
怎樣突破速率限制拿下任意Instagram賬戶,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
該Writeup是關于Instagram平臺的任意賬戶劫持漏洞,作者通過構造出突破速率限制(Rate Limiting)的方法,可暴力猜解出任意Instagram賬戶的密碼重置確認碼,以此實現Instagram賬戶劫持。以下是作者的分享。
在著名的數據泄露事件發生之后,Facebook在全平臺不斷改進它的安全控制措施。出于對包括賬戶劫持等嚴重漏洞的獎勵,Facebook增加了相應的漏洞賞金數額。我想試試運氣,看看能否發現一些東西,結果真的就在Instagram上中大獎了。(Instagram為Facebook旗下的子應用)
對Instagram的測試一開始,我就想到了賬戶劫持漏洞(Account Takeover),當然與之相關的應該就是Instagram的忘記密碼功能了。所以,我就在Web方式下,用我自己的Instagram賬戶進行反復的密碼重置測試。密碼重置請求發出后,Instagram會給賬戶相應的郵箱返回一條重置鏈接,這種重置鏈接貌似進行了全面的安全防范,滴水不漏,我找不到任何破綻。
所以,我就轉向了Instagram移動應用端的密碼重置機制下,不料我就在這里發現了一個可疑行為。密碼重置要求下,當用戶輸入他的手機號碼后,Instagram會向該手機號發送一個6位確認碼,在手機端輸入該6位確認碼之后,密碼重置才能成功生效。理論上來說,這種6位數確認碼,有10*10*10*10*10*10*的一百萬種可能,如果我在手機端都能嘗試一遍所有這一百萬種的各種可能,那么是不是就能對任意賬戶實現賬戶劫持了呢?可以肯定的是,應對這種暴力破解,Instagram后端肯定存在一定的速率限制(Rate Limiting)。不過,我決定試試看。
至少我的測試驗證了Instagram后端的速率限制機制長什么樣。在我發送的1000多個請求中,大約有250個左右會被有效通過,其余的750個會被速率限制機制阻擋掉。然后,我又發送了另外一組1000多個請求,這一次,其中有絕大部分被速率限制機制阻擋掉。這樣看來,Instagram的驗證和速率限制機制還可以。
但有兩件事我有點想不通,那就是發出的請求數量和Instagram未對請求執行黑名單化的行為。原因在于,即使我能在短時間內發送有限數量的請求,但我也能連續發送請求而不會被阻擋掉。這就.....是不是有點問題呢?
經過幾天的連續測試,我發現了可以成功繞過Instagram速率限制機制的方法,那就是:
Race Hazard(競態條件)
IP Rotation(IP輪換)
競爭冒險(Race Hazard):又名競態條件、競爭條件(Race Condition),它旨在描述一個系統或者進程的輸出依賴于不受控制的事件出現順序或者出現時機。此詞源自于兩個信號試著彼此競爭,來影響誰先輸出。
舉例來說,如果計算機中的兩個進程同時試圖修改一個共享內存的內容,在沒有并發控制的情況下,最后的結果依賴于兩個進程的執行順序與時機。而且如果發生了并發訪問沖突,則最后的結果是不正確的。競爭冒險常見于不良設計的電子系統,尤其是邏輯電路。但它們在軟件中也比較常見,尤其是有采用多線程技術的軟件。
IP輪換(IP Rotation):是指在一定時間內,用不同的IP地址去請求同一個服務端接口。通常用代理可實現這種IP地址輪換,這種方式應用于突破網站反爬蟲機制對大量數據的抓取。
如果你對競爭冒險(Race Hazard)或競態條件(Race Condition)了解較少,請自行百度熟悉。在競態條件之下,我使用多個IP地址向Instagram后端發送多個密碼重置的確認碼并發請求,這種情況下,可以繞過Instagram的速率限制機制,不被阻擋。可以發送的請求數量取決于請求的并發性和我們使用的IP地址數量。另外,我還發現,密碼重置的確認碼會在10分鐘之后過期,這就使得此類攻擊更加困難,也因此,我們可能需要多達1000個的不同IP地址來執行這種攻擊。
后來,我把該漏洞上報給Facebook之后,由于在漏洞報告中沒詳細說明情況,他們的安全團隊起初無法復現漏洞。之后,經過和他們的反復郵件溝通,我又制作了一段概念驗證性視頻發給他們,最終他們確認了該漏洞的有效性。
密碼重置時向Instagram后端請求確認碼:
POST /api/v1/users/lookup/ HTTP/1.1User-Agent: Instagram 92.0.0.11.114 Android (27/8.1.0; 440dpi; 1080×2150; Xiaomi/xiaomi; Redmi Note 6 Pro; tulip; qcom; en_IN; 152830654)Accept-Language: en-IN, en-USContent-Type: application/x-www-form-urlencoded; charset=UTF-8Accept-Encoding: gzip, deflateHost: i.instagram.comConnection: keep-aliveq=mobile_number&device_id=android-device-id-here
該POST請求發出后,受害都將會收到一個6位數的密碼重置確認碼,該確認碼的有效期為10分鐘。
客戶端輸入以上確認碼后,Instagram后端對該確認碼的驗證:
POST /api/v1/accounts/account_recovery_code_verify/ HTTP/1.1User-Agent: Instagram 92.0.0.11.114 Android (27/8.1.0; 440dpi; 1080×2150; Xiaomi/xiaomi; Redmi Note 6 Pro; tulip; qcom; en_IN; 152830654)Accept-Language: en-IN, en-USContent-Type: application/x-www-form-urlencoded; charset=UTF-8Accept-Encoding: gzip, deflateHost: i.instagram.comConnection: keep-aliverecover_code=123456&device_id=android-device-id-here
基于以上兩個POST請求和之前的攻擊策略,我們需要使用多個IP地址對該密碼重置服務端進行暴力猜解。經測試發現,大概來說,我可以用每個IP地址發送將近2000個的請求,而不被Instagram后端的速率限制阻擋。
在我的實際測試中,我用1000臺機器對應的1000個IP地址,并輕松實現了請求并發,發送了將近20萬個請求,占100萬個總概率的20%。
真實攻擊場景下,攻擊者用5000個IP地址就能成功暴力猜解出一個有效的密碼重置確認碼,以此就能“黑”掉(劫持掉)一個Instagram賬戶。這么多的IP地址聽起來貌似很難實現,但如果用 Amazon 或 Google等云服務就能非常容易地讓你擁有如此多的IP地址,執行完一百萬個密碼重置確認碼的暴力猜解,全程的成本花費也僅僅就是150美元。這....。
看完上述內容,你們掌握怎樣突破速率限制拿下任意Instagram賬戶的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。