嗅探實驗

背景

Sniffer,中文翻譯爲嗅探器,也叫抓包軟件, Sniffer工具實際上就是一個網絡上的抓包工具,同時還能夠對抓到的包進行分析。因爲在共享式的網絡中,信息包是會廣播到網絡中全部主機的網絡接口,只不過在沒有使用sniffer工具以前,主機的網絡設備會判斷該信息包是否應該接收,這樣它就會拋棄不該該接收的信息包,sniffer工具使用一種基於被動偵聽原理的網絡分析方式,可以使主機的網絡設備接收全部到達的信息包,這樣就達到了網絡監聽的效果。對於網絡管理人員來講,使用嗅探器能夠隨時掌握網絡的實際狀況,在網絡性能急劇降低的時候,經過sniffer工具來分析緣由,找出形成網絡阻塞的來源。對於網絡程序員來講,經過sniffer工具來調試程序。
Tcpdump是Linux下很是優秀的sniffer命令行工具,在各大linux發行版中的軟件倉庫中都有提供,能夠直接經過包管理器安裝,好比fedora使用yum install tcpdump,debian使用apt install tcpdump安裝,若是沒有也可使用源碼安裝。雖然叫tcpdump,可是它卻不僅能夠嗅探TCP數據包,也能夠抓取其餘協議的數據包,好比UDP、ICMP、ARP等。對於使用命令行的人來講是很是合適的工具。
另外一個著名的sniffer工具就是wireshark了,wireshark是目前功能最全面使用者最多的抓包工具,並且是開源軟件,在unix、windows、Mac OS上均可以獲取到,wireshark也有對應的命令行工具tshark。爲了安全考慮,wireshark只能查看包,而不能修改包的內容,或者發送數據包。
另外,scapy是從python的一個模塊獨立出來的功能強大的交互式數據包處理程序,可用來發送、嗅探、解析和僞造網絡數據包,經常被用到網絡攻擊和測試中。因此若是想要修改抓到的包可使用這個工具。python

要求

使用一種Sniffer工具(自選)進行網絡監聽,主要集中在HTTP、FTP、SMTP、TELNET協議方面,並分析監聽結果。
爲了減小分析的數據量,必須有效地設置過濾規則。
經過使用Sniffer軟件來掌握Sniffer工具的使用方法,實現捕捉HTTP、FTP、SMTP、TELNET等協議的數據包,理解TCP/IP主要協議的數據結構、會話鏈接創建和終止的過程、TCP序列號應答號的變化規律。
經過實驗瞭解HTTP、FTP、SMTP等協議明文傳輸的特性,以創建安全意識。linux

實驗過程

工具

Wireshakr安裝簡單,和其餘windows程序同樣,下載exe安裝包以後,一路下一步就能夠了。
打開wireshark以後以下圖所示,首先要選擇一個網絡適配器(網卡)進行捕獲,由於筆記本電腦使用的wifi,因此只有WLAN顯示有流量,那就只能監聽這個網卡。
wireshark
選擇以後以下圖,能夠看到正在捕獲WLAN,以及窗口中顯示抓到的數據包。
監聽
和其餘的sniffer工具同樣也是使用表達式對數據包進行過濾,點擊下圖中的表達式按鈕能夠看到全部的表達式元素。能夠經過搜索關鍵字快速查找目標。
過濾過濾程序員

HTTP

HTTP協議是超文本傳輸協議(Hyper Text Transfer Protocol)的縮寫,是用於從web服務器傳輸信息到本地瀏覽器的傳送協議。HTTP基於TCP/IP通訊協議來傳遞數據。默認端口是80。
HTTP請求報文格式:
a
HTTP響應報文格式:
b
要過濾出HTTP協議數據包,只須要在過濾條件處寫上http便可。
c
雙擊其中一個包就能夠看到包內的具體內容,以下圖:
d
能夠看到請求報文中只有請求行和首部,沒有主體。
請求行中的方法是GET,url是GET以後的/sdm/242_…qlt=50,版本號是HTTP/1.1。
接着下面就是請求的首部。
Host:p0.qhimg.com表示服務器主機名是p0.qhimg.com。
User-Agent:Mozilla……說明了發起請求的瀏覽器是火狐瀏覽器,由於早期微軟和網景公司的瀏覽器之爭致使如今的瀏覽器分爲幾個陣營,開發者要根據瀏覽器不一樣的特性開發不一樣的代碼,以便內容可以正確顯示。因此請求中要指明瀏覽器的名稱。
Accept:image/webp 說明了客戶端要接收的媒體類型,爲圖像。
Accept-Language:en-US說明了客戶端可以識別的語言,包括英文、漢字,q表示優先級。
Accept-Encoding:gzip客戶可以接收的編碼類型。
Referer:https://cn.bing.com先前網頁的地址。
Connection:keep-alive 須要持久鏈接。
最後是一行空行\r\n
上面是請求報文,下面是該請求報文的響應。
e
響應報文由三部分組成,第一部分狀態行,有三部分:協議版本HTTP/1.1,狀態碼200,狀態碼描述OK,常見狀態碼以下:
f
接下來是首部:
Content-Length:9014響應內容長度9014
Connection:keep-alive 客戶端與服務器之間通訊是持久鏈接
Cache-Control:max-age=31536…說明了緩存大小是3153…

File Data:9014bytes指明文件數據大小9014字節。
接着就是報文的具體內容,即傳送的真正內容,爲明文消息,這裏應該是圖片的編碼:
jweb

FTP

FTP文件傳輸協議。FTP使得主機間能夠共享文件,用於控制Internet上文件的雙向傳輸。和HTTP同樣是一個客戶機/服務器系統。用戶經過一個支持FTP協議的客戶端,鏈接到在遠程主機上的FTP服務器。用戶經過客戶機程序向服務器發出命令,服務器執行用戶所發出的命令,並將執行的結果返回到客戶端。 當FTP客戶端與服務器創建FTP鏈接時,將與服務器上的兩個端口創建聯繫:端口20和21。FTP使用不一樣的端口號傳輸不一樣的內容,會創建不一樣的TCP鏈接。首先,使用 TCP 生成一個虛擬鏈接用於控制信息,而後再生成一個單獨的 TCP 鏈接用於數據傳輸。
使用ftp or ftp-data表達式過濾ftp數據包。
k
能夠看到上圖第二幀是請求報文並以ascii碼方式明文傳輸數據,請求命令爲USER,參數爲anonymous,即一個匿名用戶發起的請求,由於實驗條件限制,使用的gnuftp服務器只容許匿名訪問,但實際上ftp服務器是使用明文傳輸,因此若是條件容許能夠嗅探到明文用戶名和密碼。而後下圖是第三幀響應報文,響應碼是230,表示登陸因特網。
l
接下來是ftp服務器返回的提示信息,也是明文傳輸。
m
而後是PORT命令,告訴 FTP 服務器客戶端監聽的端口號,讓 FTP 服務器採用主動模式鏈接客戶端。能夠看到端口號是63442
n
接着是LIST命令,以下圖,說明用戶查看了ftp服務器目錄,紅框中的三幀說明用戶使用RETR命令請求下載README文件。查看具體幀能夠看到ftp爲數據傳輸又開闢了一個TCP鏈接(用於數據鏈接ftp-data),服務器端口是20,常說的ftp21端口是ftp的控制鏈接
o
而後經過追蹤流,就能夠看到傳輸的明文信息。
p
查看數據包內容以下:
q
上面兩圖分別截取了開頭和結尾部分,而後對比下圖實際接收到的README文件,能夠發現內容是相同的。
rubuntu

SMTP

SMTP稱爲簡單郵件傳輸協議(Simple Mail Transfer Protocal),目標是向用戶提供高效、可靠的郵件傳輸。它的一個重要特色是它可以在傳送中接力傳送郵件,即郵件能夠經過不一樣網絡上的主機接力式傳送。SMTP是一個請求/響應協議,它監聽25號端口,用於接收用戶的Mail請求,並與遠端Mail服務器創建SMTP鏈接。
實驗首先設置wireshark過濾規則爲smtp,以後使用telnet登陸網易的smtp.163.com服務器。以下:
s
首先發送EHLO命令查詢服務器支持的擴充功能,而後使用AUTH LOGIN請求認證,服務器會發迴響應334 dxNlcm5hbWU6(通過BASE64編碼了的"Password:"=),輸入通過BASE64編碼了的用戶名zevsee@163.com(個人網易郵箱,BASE64編碼爲emV2c2VlQDE2My5jb20=),回車以後提示繼續輸入密碼334 UGFzc3dvcmQ6(通過BASE64編碼了的"Password:"=),輸入密碼以後顯示登陸成功而後就是使用MAIL命令發送郵件了。
t
而後查看wireshark抓取到的數據包以下:
u
上圖是一次完整的smtp通訊過程,能夠看到咱們每一步發送的SMTP數據包都被抓取到了,並且是明文傳輸的。
用戶名:(明文的BASE64)
v
密碼:(密碼也是明文的,由於涉及到敏感信息因此做了處理)
w
收發人:
x
郵件內容:
y
上面右圖中的粉紅色部分是我寫在郵件中的內容,對比能夠看到是相同的。windows

TELNET

Telnet協議是TCP/IP協議族中應用最普遍的協議,是Internet遠程登錄服務的標準協議和主要方式,爲用戶提供了在本地計算機上完成遠程主機工做的能力。在終端使用者的電腦上使用telnet程序,用它鏈接到服務器,在telnet程序中輸入命令,這些命令會在服務器上運行,就像直接在服務器的控制檯上輸入同樣,在本地就能控制服務器。要開始一個telnet會話,必須輸入用戶名和密碼來登陸服務器。Telnet是經常使用的遠程控制Web服務器的方法,可是Telnet使用明文傳輸,這致使其安全性不高,所以目前一般使用 SSH代替Telnet進行遠程管理,SSH是目前較可靠,專爲遠程登陸會話和其餘網絡服務提供安全性的協議。SSH基於成熟的公鑰加密體系,把全部傳輸的數據進行加密,保證數據在傳輸時不被惡意破壞、泄露和篡改。
在上面的SMTP實驗中使用了TELNET協議,從wireshark的捕獲結果中已經能夠看出telnet使用明文傳輸的特性了,下面分析使用telnet遠程登陸的情景。
首先使用telnet登陸遠程主機,遠程主機上要開啓telnet服務,這裏我使用虛擬機做爲遠程主機。操做以下:
命令爲telnet IP PORT,192.168.8.130是個人虛擬機地址,系統是ubuntu14.04,默認是不開啓root用戶的,因此使用普通用戶void登陸,密碼是123456。能夠看到成功登陸,而且可以執行ls命令查看文件。
z
下面是wireshark在我登陸的時候抓取的telnet數據包。過濾規則是telnet
a
經過使用追蹤流,能夠看到整個通訊過程當中的數據以下圖所示:
b
上圖中,粉色部分是客戶端(我)輸入的信息,淺藍色是服務器返回的響應。能夠看到紅色框的部分有我輸入的明文的用戶名void和密碼123456,最後是輸入的命令ls。
c瀏覽器

說明

課程做業,僅做記錄。緩存