標籤:nbsp 密碼 正則表達 image 方法 int user war 開啟
本文章僅供交流學習使用,本文章實驗用的主機也已經經由當事人授權,請勿用於其它用途,否則後果自負。
(真不想羅嗦這一句):-)
第一次寫技術性部落格,肯定會有一些問題,大家將就著看吧>_<
周五晚上在圖書館討論事情的的時候發現:教務處網站的網站使用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的Regex模組re篩選帳號密碼。代碼圖如下:
關於Regex的使用請自行百度,現在是下著雨的半夜,只想睡,懶得碼字了,原諒我:-)
ok,在通過欺騙手段實現攻擊之後,運行此指令碼,會一直等待,如果你在此時登入教務出,帳號和密碼就會被盜取。之後有用手機連上網登了一遍,沒毛病。
關於防禦的話:我的想法是寫一個指令碼,記下網關的mac地址,如果此地址發生變化,就說明你受到攻擊。
當然,這個想法太弱了,因為你出門以後怎麼知道你連上的wifi路由器的mac?具體的防禦措施可能得到暑假去實驗了。寫完這第一篇就得進入半個月的低產了(雖然本來就不高產):-),全心全意投入期末考試複習。但我保證暑假的時候絕對一天1~2兩篇,包括對網站後端開發和電腦系統原理的相關知識學習總結和實驗的文章。
所以以後出門不要隨便連wifi,臉上以後也不要登入什麼帳號。就連私密的圖片也不要看(指網上的),用一個小工具driftnet就能看到基友開啟的圖片。
>_ 就到這裡了,有什麼問題歡迎討論。(肯定有寫不恰當的地方)
基於ARP緩衝投毒擷取教務處網站密碼