文章出處

精簡版:http://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 保存在文件里。至于如何還原,有無數種方式,這里就不再介紹了。


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()