1. 程式人生 > >基於ARP緩存投毒獲取教務處網站密碼

基於ARP緩存投毒獲取教務處網站密碼

說明 art sage ons 字符串 則表達式 png sni ***

本文章僅供交流學習使用,本文章實驗用的主機也已經經由當事人授權,請勿用於其它用途,否則後果自負。

(真不想羅嗦這一句):-)

第一次寫技術性博客,肯定會有一些問題,大家將就著看吧>_<

  周五晚上在圖書館討論事情的的時候發現:教務處網站的網站使用http協議,post表單是明文傳送的。截取表單後發現一個類似IPT_LOGINUSERNAME=×××××××××(×代表帳號)&IPT_LOGINPASSWORD=***********(我的密碼)的字符串。於是想著如果能抓包此HTTP post請求,就能篩選出密碼。

  於是說幹就幹,在討論完後買來一貫啤酒,兩包薯片,拿著電腦來到好基友宿舍,開始用基友的WiFi實驗了起來。一開始想要用無線混雜模式抓包,但是由於基友用的路由器是三層設備,混雜模式無法抓包,於是開始使用ARP緩存投毒。

  先說一說我對ARP緩存投毒的一點理解:二層以太網的設備是通過MAC識別目標傳輸IP數據包,因此IP地址與MAC地址存在對應關系,而ARP就是一種對應關系的協議。ARP工作的機制:如果局域網的一臺主機想要到達另一臺設備,它首先發送數據廣播包給所有局域網下的設備,包含目標設備的IP地址,以及自身的mac。目標主機接收到之後會發送一個包含自身IP和mac的ARP包應答。局域網中的網關和主機都存在ARP表,此表中的一行如果一段時間沒有使用,就會被清除。而主機接收到ARP包之後無論是不是目標設備發來的都會將對應關系寫入ARP表。因此ARP投毒就是不斷向網關和被攻擊主機發送ARP應答或請求包,使其ARP表中對應的mac變為攻擊機的。

  在查閱和參考了相關書籍和大牛的博客之後,寫了一個python腳本,實現arp緩存投毒,圖片如下(有詳細備註):
技術分享

技術分享

幾處代碼的備註:

usage="Usage %prog [-i interface] [-t target] host"
parser=OptionParser(usage)
parser.add_option(‘-i‘,dest=‘interface‘,help=‘Specify the interface to use‘)
parser.add_option(‘-t‘,dest=‘target‘,help=‘Specify a particular host to APR posion.(None to send broadcast packet)‘)
parser.add_option(‘-m‘,dest=‘mode‘,default=‘req‘,help=‘Poisoning mode:requests(req) or replies(rep) [default:%default]‘)
parser.add_option(‘-s‘,action=‘store_true‘,dest=‘summary‘,default=False,help=‘Show packet summary and ask for confirmation before poisoning‘)
(options,args)=parser.parse_args()

此處使用optionparser包,usage為使用示範,首先創建optionparser對象,使用optionparser.OptionParser方法,參數為usage。使用add_option()方法,-i‘,dest=‘interface‘表示會將命令行參數 -i 後的內容存儲在interface中。幫助文檔為help之後的,當屬如-h參數時會輸出幫助文檔。下面的同理。 可以看出parser是一個類似字典對象的對象。然後調用parser_args()方法解析,返回一個字典,一個列表。字典key為dest,值為命令行參數的內容。args為列表,內容是除了字典內容以外的命令行內容。

pkt=Ether(scr = mac.dst=‘ff:ff:ff:ff:ff:ff:)/ARP(hwsrc=mac,psrc=args[0],pdst=args[0])

此為本腳本的關鍵,ARP包的封裝。

首先一個以太網數據包,scr為本機mac,pdst為目標主機的mac,此處是廣播包,非廣播包使用getmacbyip(options.target)轉化參數的ip為mac。後面為ARP包。hwscr為源mac,pscr為源ip也就是args·0「

hwdst為目標主機的mac,pdst為目標主機的ip,廣播包的此兩項不填。

封裝好包以後,使用sendp()發送,傳入包,inter代表TCP/IP第二層,iface為你的網卡接口。通過終端輸入iwconfig查看。

在使用時跟命令行參數 -i (此處為你的網卡) -t(攻擊目標ip) -m rep (此處為網關地址)對目標主機進行投毒。

然後另一個終端中跟參數 -i (此處為你的網卡) -t(此處為網關地址) -m rep (攻擊目標ip)對網卡進行投毒。

:-)

  原諒我忘記截圖了,第一次沒經驗.以後補上

這時候用基友的電腦查看acr表,發現欺騙成功,網關的ip對應的mac為我的電腦的。然而此時用基友的電腦打開百度發現斷網了。搗鼓了一會發現時本機未開啟ip轉發。也就是說基友電腦的數據包會發到我的電腦上,但是不會傳出去。與使用sysctl net.ipv4.ipforward=1開啟ip轉發。此時會把基友的電腦的數據包發給網關,然後把從網關的數據包發給基友。

  ok,萬事具備,之前東風。第二個腳本:使用scapy模塊的sniff函數將數據包傳給解析函數,然後在解析函數中通過python的正則表達式模塊re篩選帳號密碼。代碼圖如下:

技術分享

關於正則表達式的使用請自行百度,現在是下著雨的半夜,只想睡,懶得碼字了,原諒我:-)

ok,在通過欺騙手段實現攻擊之後,運行此腳本,會一直等待,如果你在此時登錄教務出,帳號和密碼就會被盜取。之後有用手機連上網登了一遍,沒毛病。

關於防禦的話:我的想法是寫一個腳本,記下網關的mac地址,如果此地址發生變化,就說明你受到攻擊。

  當然,這個想法太弱了,因為你出門以後怎麽知道你連上的wifi路由器的mac?具體的防禦措施可能得到暑假去實驗了。寫完這第一篇就得進入半個月的低產了(雖然本來就不高產):-),全心全意投入期末考試復習。但我保證暑假的時候絕對一天1~2兩篇,包括對網站後端開發和計算機系統原理的相關知識學習總結和實驗的文章。

  所以以後出門不要隨便連wifi,臉上以後也不要登錄什麽帳號。就連私密的圖片也不要看(指網上的),用一個小工具driftnet就能看到基友打開的圖片。

  >_ 就到這裏了,有什麽問題歡迎討論。(肯定有寫不恰當的地方)

基於ARP緩存投毒獲取教務處網站密碼