1. 程式人生 > >網路封包分析軟體——WIRESHARK

網路封包分析軟體——WIRESHARK

圖片.png

0x00 wireshark 簡介

BurpSuite是一款大家熟知的抓包軟體,但它只能抓應用層的包,下面說的WireShark是與網絡卡進行資料交換的,可以抓到物理層的包,功能肥腸強大。

  • Wireshark(前稱Ethereal)是一個網路封包分析軟體。網路封包分析軟體的功能是擷取網路封包,並儘可能顯示出最為詳細的網路封包資料。Wireshark使用WinPCAP作為介面,直接與網絡卡進行資料報文交換。
  • Wireshark不是入侵偵測系統(Intrusion Detection System,IDS)。對於網路上的異常流量行為,Wireshark不會產生警示或是任何提示。然而,仔細分析Wireshark擷取的封包能夠幫助使用者對於網路行為有更清楚的瞭解。Wireshark不會對網路封包產生內容的修改,它只會反映出目前流通的封包資訊。 Wireshark本身也不會送出封包至網路上。

0x01 wireshark 的安裝

wireshark的安裝還是很簡單的,沒什麼要配置的,去官網直接下載wireshark.exe進行安裝即可

  • https://www.wireshark.org/download.html

0x02 wireshark的配置及使用

wireshark是與網絡卡進行互動的,所以需要配置的是選擇要抓取的網絡卡,按以下步驟配置即可 全集網

wireshark 開始抓包

  • 開始介面

圖片.png

wireshark是捕獲機器上的某一塊網絡卡的網路包,當你的機器上有多塊網絡卡的時候,你需要選擇一個網絡卡。點選"捕獲--選項",英文版是:Caputre->Interfaces.。出現下面對話方塊,選擇正確的網絡卡。然後點選"開始"按鈕, 開始抓包

bt天堂

圖片.png

  • Wireshark 視窗介紹

圖片.png

WireShark 主要分為這幾個介面

  1. Display Filter(顯示過濾器), 用於過濾

  2. Packet List Pane(封包列表), 顯示捕獲到的封包, 有源地址和目標地址,埠號。 顏色不同,代表

  3. Packet Details Pane(封包詳細資訊), 顯示封包中的欄位

  4. Dissector Pane(16進位制資料)

  5. Miscellanous(位址列,雜項)

  • Wireshark 顯示過濾

圖片.png

使用過濾是非常重要的, 初學者使用wireshark時,將會得到大量的冗餘資訊,在幾千甚至幾萬條記錄中,以至於很難找到自己需要的部分。搞得暈頭轉向。

過濾器會幫助我們在大量的資料中迅速找到我們需要的資訊。

過濾器有兩種:

一種是顯示過濾器,就是主介面上那個,用來在捕獲的記錄中找到所需要的記錄

一種是捕獲過濾器,用來過濾捕獲的封包,以免捕獲太多的記錄。 在Capture -> Capture Filters 中設定

  • 儲存過濾

在Filter欄上,填好Filter的表示式後,點選Save按鈕, 取個名字。比如"Filter 102"

Filter欄上就多了個"Filter 102" 的按鈕。

圖片.png

0x03 wireshrak的語法

  • 過濾IP,如來源IP或者目標IP等於某個IP
例子:
ip.src eq 192.168.1.107 or ip.dst eq 192.168.1.107
或者
ip.addr eq 192.168.1.107 // 都能顯示來源IP和目標IP
  • 過濾埠
例子:
tcp.port eq 80 // 不管埠是來源的還是目標的都顯示
tcp.port == 80
tcp.port eq 2722
tcp.port eq 80 or udp.port eq 80
tcp.dstport == 80 // 只顯tcp協議的目標埠80
tcp.srcport == 80 // 只顯tcp協議的來源埠80

udp.port eq 15000

過濾埠範圍
tcp.port >= 1 and tcp.port <= 80
  • 過濾協議
例子:
tcp
udp
arp
icmp
http
smtp
ftp
dns
msnms
ip
ssl
oicq
bootp
等等

排除arp包,如!arp   或者   not arp
  • 過濾MAC
太以網頭過濾
eth.dst == A0:00:00:04:C5:84 // 過濾目標mac
eth.src eq A0:00:00:04:C5:84 // 過濾來源mac
eth.dst==A0:00:00:04:C5:84
eth.dst==A0-00-00-04-C5-84
eth.addr eq A0:00:00:04:C5:84 // 過濾來源MAC和目標MAC都等於A0:00:00:04:C5:84的

less than 小於 < lt
小於等於 le

等於 eq
大於 gt
大於等於 ge
不等 ne
  • 包長度過濾
例子:
udp.length == 26 這個長度是指udp本身固定長度8加上udp下面那塊資料包之和
tcp.len >= 7   指的是ip資料包(tcp下面那塊資料),不包括tcp本身
ip.len == 94 除了乙太網頭固定長度14,其它都算是ip.len,即從ip本身到最後
frame.len == 119 整個資料包長度,從eth開始到最後

eth ---> ip or arp ---> tcp or udp ---> data
  • http模式過濾
例子:
http.request.method == "GET"
http.request.method == "POST"
http.request.uri == "/img/logo-edu.gif"
http contains "GET"
http contains "HTTP/1."

// GET包
http.request.method == "GET" && http contains "Host: "
http.request.method == "GET" && http contains "User-Agent: "
// POST包
http.request.method == "POST" && http contains "Host: "
http.request.method == "POST" && http contains "User-Agent: "
// 響應包
http contains "HTTP/1.1 200 OK" && http contains "Content-Type: "
http contains "HTTP/1.0 200 OK" && http contains "Content-Type: "
一定包含如下
Content-Type:
  • TCP引數過濾
tcp.flags 顯示包含TCP標誌的封包。
tcp.flags.syn == 0x02     顯示包含TCP SYN標誌的封包。
tcp.window_size == 0 && tcp.flags.reset != 1
  • 過濾內容
tcp[20]表示從20開始,取1個字元
tcp[20:]表示從20開始,取1個字元以上
tcp[20:8]表示從20開始,取8個字元
tcp[offset,n]

udp[8:3]==81:60:03 // 偏移8個bytes,再取3個數,是否與==後面的資料相等?
udp[8:1]==32   如果我猜的沒有錯的話,應該是udp[offset:擷取個數]=nValue
eth.addr[0:3]==00:06:5B

例子:
判斷upd下面那塊資料包前三個是否等於0x20 0x21 0x22
我們都知道udp固定長度為8
udp[8:3]==20:21:22

判斷tcp那塊資料包前三個是否等於0x20 0x21 0x22
tcp一般情況下,長度為20,但也有不是20的時候
tcp[8:3]==20:21:22
如果想得到最準確的,應該先知道tcp長度

matches(匹配)和contains(包含某字串)語法ip.src==192.168.1.107 and udp[8:5] matches "\x02\x12\x21\x00\x22"ip.src==192.168.1.107 and udp contains 02:12:21:00:22ip.src==192.168.1.107 and tcp contains "GET"udp contains 7c:7c:7d:7d 匹配payload中含有0x7c7c7d7d的UDP資料包,不一定是從第一位元組匹配。

例子:得到本地qq登陸資料包(判斷條件是第一個包==0x02,第四和第五個包等於0x00x22,最後一個包等於0x03)0x02 xx xx 0x00 0x22 ... 0x03正確oicq and udp[8:] matches "^\x02[\x00-\xff][\x00-\xff]\x00\x22[\x00-\xff]+\x03$"oicq and udp[8:] matches "^\x02[\x00-\xff]{2}\x00\x22[\x00-\xff]+\x03$" // 登陸包oicq and (udp[8:] matches "^\x02[\x00-\xff]{2}\x03$" or tcp[8:] matches "^\x02[\x00-\xff]{2}\x03$")oicq and (udp[8:] matches "^\x02[\x00-\xff]{2}\x00\x22[\x00-\xff]+\x03$" or tcp[20:] matches "^\x02[\x00-\xff]{2}\x00\x22[\x00-\xff]+\x03$")

不單單是00:22才有QQ號碼,其它的包也有,要滿足下面條件(tcp也有,但沒有做):oicq and udp[8:] matches "^\x02[\x00-\xff]+\x03$" and !(udp[11:2]==00:00) and !(udp[11:2]==00:80)oicq and udp[8:] matches "^\x02[\x00-\xff]+\x03$" and !(udp[11:2]==00:00) and !(udp[15:4]==00:00:00:00)說明:udp[15:4]==00:00:00:00 表示QQ號碼為空udp[11:2]==00:00 表示命令編號為00:00udp[11:2]==00:80 表示命令編號為00:80當命令編號為00:80時,QQ號碼為00:00:00:00

得到msn登陸成功賬號(判斷條件是"USR 7 OK ",即前三個等於USR,再通過兩個0x20,就到OK,OK後面是一個字元0x20,後面就是mail了)USR xx OK [email protected]正確msnms and tcp and ip.addr==192.168.1.107 and tcp[20:] matches "^USR\x20[\x30-\x39]+\x20OK\x20[\x00-\xff]+"


- dns模式過濾

- DHCP

以尋找偽造DHCP伺服器為例,介紹Wireshark的用法。在顯示過濾器中加入過濾規則,顯示所有非來自DHCP伺服器並且bootp.type==0x02(Offer/Ack)的資訊:bootp.type==0x02 and not ip.src==192.168.1.1


- msn

msnms && tcp[23:1] == 20 // 第四個是0x20的msn資料包msnms && tcp[20:1] >= 41 && tcp[20:1] <= 5A && tcp[21:1] >= 41 && tcp[21:1] <= 5A && tcp[22:1] >= 41 && tcp[22:1] <= 5Amsnms && tcp[20:3]=="USR" // 找到命令編碼是USR的資料包msnms && tcp[20:3]=="MSG" // 找到命令編碼是MSG的資料包tcp.port == 1863 || tcp.port == 80

如何判斷資料包是含有命令編碼的MSN資料包?1)埠為1863或者80,如:tcp.port == 1863 || tcp.port == 802)資料這段前三個是大寫字母,如:tcp[20:1] >= 41 && tcp[20:1] <= 5A && tcp[21:1] >= 41 && tcp[21:1] <= 5A && tcp[22:1] >= 41 && tcp[22:1] <= 5A3)第四個為0x20,如:tcp[23:1] == 204)msn是屬於TCP協議的,如tcp

MSN Messenger 協議分析http://blog.csdn.net/Hopping/archive/2008/11/13/3292257.aspx

MSN 協議分析http://blog.csdn.net/lzyzuixin/archive/2009/03/13/3986597.aspx```

更詳細的說明:wireshark過濾表示式例項介紹

  • http://www.csna.cn/viewthread.php?tid=14614

Wireshark 主介面的操作選單中英對比

  • http://www.csna.cn/viewthread.php?tid=9645&extra=page%3D1

又一款好的網路分析軟體

  • 科來網路分析系統

學習Ethereal/Wireshark網站

  • http://www.csna.cn/index.php