【流量劫持】沉默中的狂怒 —— Cookie 大噴發

精簡版:https://www.cnblogs.com/index-html/p/mitm-cookie-crack.html

前言

上一篇文章 講解了如何藉助前端技術,打造一個比 SSLStrip 更高大上的工具。

今天我們再次使用這套戰術,通過前後端的裏應外合,實現一個殺手鐗級的攻擊方案 —— Cookie 數據大噴發。

傳統嗅探

在過去,Cookie 的竊取大多通過嗅探流量來實現。

這種方法具有很強的隱蔽性,讓人幾乎難以察覺。然而,正因爲如此,也面臨一個巨大的缺陷:速度太過緩慢。

中間人只能嗅探到用戶正在訪問的頁面,對於那些令人期待的網站,只能慢慢等了。在家庭、辦公場所這些穩定的網絡環境裏,長久的等待或許還能得到想要的結果;但對於公共場所上網的用戶,就沒那麼容易了。

在公共網絡裏,大家多少保持一些警惕,很少會去訪問一些重要的網站。況且,臨時的網絡用戶也不會停留太久。因此純粹的流量嗅探,難以捕捉到更有意義的數據。

前端出擊

既然用戶不按我們的套路出牌,那麼我們的前端戰術就得派上用場了 —— 只要能控制頁面,一切皆可由我們做主。哪怕用戶就是不中圈套,我們的腳本也可以強制跳轉過去,從而輕易拿下想要的 Cookie 數據。

不過強制跳轉的方式也太過暴力了。儘管我們使用了劫持頁面這種高調的方式,但之後的所作所爲,仍需保持隱蔽。

也許你會說可以通過隱藏框架頁來代替,就可大幅提升隱蔽性了。這個方式確實不錯,離我們的目標又近了一步,但仍然不夠完美。爲什麼非得用訪問頁面的方式來獲取 Cookie,這代價不免也太大了。

事實上,Cookie 的發送和請求類型是沒有任何關係的。無論是頁面的訪問、還是第三方資源的加載,只要目標 URL 匹配了 Cookie 數據庫的路徑,符合的記錄最終都會被帶上。或許你平時並沒有注意到這一點,但我們可以馬上來驗證下。

我們先在頁面裏,發起一個第三方的資源請求:

抓到請求包,自然就獲得了其中的 Cookie:

但這些數據究竟是不是完整的,能否直接利用?不多猜測,我們把它粘到其他瀏覽器裏試試:

當我們再次刷新頁面時,奇蹟發生了:

通過 Cookie,我們成功還原了之前的登錄狀態。而這一切,僅僅從一個第三方的圖片請求中獲得!

所以,中間人可以使用非常輕量的方式,來獲取某個站點下的 Cookie,並不需要用戶主動訪問該站點。

我們可以事先收集大量的網站地址,讓前端間諜進行逐一偵探,從而能嗅探到相當一部分賬號了:

方案優化

前後端結合戰術,在此又一次得到了展現。但爲了能將其發揮到淋漓盡致,我們還需進行充分優化。

路徑標記

雖然我們可以通過加載第三方資源的方式,將目標站點的 Cookie 送到流量上。但中間人收到請求後又該如何處理?返回空白內容,還是代理正常頁面?

如果真走一遍代理,那實在是太浪費了。既然我們已得到 Cookie,隨便返回什麼都可以;但若返回空內容,要是用戶正好打開這個網站,那就白屏了。

爲了不影響 Cookie 的發送,同時能讓中間人明白這個請求是咱們自己人的,我們在請求的 URL 里加上一個特殊的標記。

當中間人發現請求帶有這個暗號,自然就明白了 —— 記錄下其中攜帶的情報,然後放心的返回空白就可以了。

因爲 Cookie 的 Path 屬性不包括 Query,所以加上這個記號,並不影響 Cookie 的攜帶。原來有哪些,現在仍一樣。

此外,修改了路徑還有另一個好處:即使偵探被緩存了的站點,也能產生請求流量。從而不錯過任何一個目標!

DNS 加速

解決了代理問題,發送 Cookie 現在只需極小的流量。

這時的瓶頸,已不僅僅是 HTTP 流量了。因爲我們事先準備了大量的網站,他們都有各自的域名,因此 DNS 查詢也成爲不可忽視的一部分。

爲了縮短查詢時間,我們可以將所有發往 UDP/53 的數據包,全轉發到中間人的 DNS 服務下,並且都解析成自己的 IP。這樣不僅加快域名查詢的過程,而且還能給中間人節省不少帶寬。

當然,如今的瀏覽器,對域名解析做了大量的優化。因此在前端上,速度提升或許並不明顯。

但這種方式仍有極大的意義 —— 我們同時劫持了 DNS 和 HTTP,這意味着整套方案,可以不依賴互聯網,進行離線攻擊!這尤其適用於上網成本較高的戶外環境裏。

痕跡收集

當然,並不是所有賬號都得通過 Cookie 成功還原的。稍微重視安全的網站,其登錄會話都綁定了 IP 地址段。如果還原時的外網 IP,和用戶之前使用的存在較大區別,這個 Cookie 很有可能就失效了。

但大多數時候,我們劫持的都是附近的用戶,甚至是同一內網的,所以仍有不少能夠還原的。

但隨着安全等級的提高,一些網站不僅僅綁定 IP 地址,有的還關聯了 User-Agent 等信息。在將來,甚至還會綁定用戶更多的痕跡,例如屏幕分辨率、插件版本、繪圖算法等等,更精確的識別用戶。

爲了能提高還原成功率,我們也儘可能多的收集用戶信息。除了 User-Agent,我們還可以考慮通過前端代碼,收集更詳細的瀏覽器特徵信息。在賬號還原時,把這些信息都模擬到沙盒裏,僞裝到天衣無縫。

攻擊演示

Demo: https://github.com/EtherDream/cookie_hijack_demo

當受害者進入我們的劫持環境裏,打開任意頁面,即可觸發佈置其中的 XSS 腳本。(當然,這裏爲了演示簡單,把整個頁面都替換了。實戰中,可以參考前一篇的文章的注入方法)

我們的日誌,成功記錄下各種賬號的 Cookie:

於是,就在這一瞬間 —— 儘管沒做任何事,但衆多賬號已被黑客所控制:

當然,這裏只演示最基本的功能,將嗅探到的 Cookie 保存在文件裏。至於如何還原,有無數種方式,這裏就不再介紹了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章