TCP回話劫持原理和利用

因爲 TCP 協議並無對 TCP 的傳輸包進行身份驗證,因此在咱們知道一個 TCP 鏈接中的 seq 和 ack 的信息後就能夠很容易的僞造傳輸包,僞裝任意一方與另外一方進行通訊,咱們將這一過程稱爲 TCP 會話劫持(TCP Session Hijacking)shell

 

既然有了被攻擊的風險,那隨之而來的就有解決方案,因此爲解決這個問題,一般會在網絡層採用 IPSec 協議,在傳輸層採用 TLS 協議,對應的詳細協議能夠百度裏瞭解一下。安全

簡單的理解下TCP三次握手,詳細的過程能夠百度瞭解下。bash

 

因此對應沒有加密的TCP協議,咱們是很容易劫持的,下面就讓咱們來演示一下。服務器

 

演示說明:這裏我用的是telnet協議測試。網絡

虛擬機ip:tcp

  • 攻擊機:192.168.42.162
  • 客戶端:192.168.42.58
  • 服務端:192.168.42.171

實現條件:

攻擊機工具: wireshark,netwox,shijack工具

服務器 須要配置 telnet 服務器(這裏就不詳細說明了,有興趣的同窗能夠自行百度)測試

過程:加密

首先,咱們讓 客戶機 鏈接 服務器 。spa

終端命令:

telnet 192.168.42.171

 

此時,客戶端鏈接到服務器後輸入ls命令,在同一網段的 攻擊機 使用 wireshark 嗅探共用網卡,等待 客戶機 和 服務器 通訊,捕捉 telnet 包。

 

這裏咱們看到數據包的內容是 l ,由於咱們輸入的命令是 ls 他會吧咱們發生的內容拆分開發生,咱們看一下下一個數據包就會發現內容是 s

 

直接找到最後的一個包,點擊 TransmissionControl Protocol 查看其中的源端口,目的端口,next seq 和 ack 信息。(其中 服務器 的端口固定爲 23 ,由於 telnet 端口是 23 ) 

 

由於咱們要僞造發下一個包,因此直接採用 next seq 做爲下一個包的 ack ,採用 ack 做爲下一個包的 seq

獲取到信息以後,攻擊機 使用 netwox 工具僞造 客戶端 給 服務器 發一個 tcp 包。發送成功後,原來的 客戶端 就會失去鏈接,同時 服務器 會把 攻擊機 看成 客戶端 ,這樣 攻擊機 就實現了會話劫持。

攻擊機 終端輸入:

netwox 40 --ip4-dontfrag --ip4-offsetfrag 0 --ip4-ttl 64 --ip4-protocol 6 --ip4-src 192.168.42.58 --ip4-dst 192.168.42.171 --tcp-src 38048 --tcp-dst 23 --tcp-seqnum 5 --tcp-acknum 102 --tcp-ack --tcp-psh --tcp-window 128 --tcp-data "6c"

 

說明:

由於咱們要僞造 客戶端 給 服務的 發生TCP包,因此源ip:客戶端(192.168.42.58)目的 ip:服務器(192.168.42.171) ,seq 和 ack 按剛纔所說填寫,末尾的 6c 是字母 l 的十六進制數,這裏的l是咱們要發生的內容,其他參數默認就能夠了。

 如今咱們已經瞭解了tcp劫持的原理了,而後咱們推薦一款專業工具來測試TCP回話劫持漏洞。

 

 一樣,咱們先讓 客戶機 鏈接 服務器 。此時 攻擊機 打開 wireshark 抓包,獲取到源,目的 ip 以及端口號。

 

 

 

根據上面的信息,使用 shijack 工具輸入如下命令:

./shijack-lnx eth0 192.168.42.58 35396 192.168.42.171 23

參數依次爲網卡名,源地址,源端口,目的地址,telnet 端口 

顯示等待客戶端和服務器通訊以便工具自動獲取 seq,ack進行劫持。

 

在通訊以後顯示劫持成功,這個時候客戶端 就沒法和 服務端 的進行通訊了。此時咱們在供給端輸入 ls 並回車,用 wireshark 查看是否是真的成功發出僞造包。

 

 

如今咱們已經完成了TCP回話劫持了。

 總結:

咱們在會話劫持成功後,攻擊端是沒有回顯信息的,可是咱們仍是能夠成功執行命令並執行的。若是咱們必需要它有回顯的話,咱們能夠利用反向 shell 的方法讓攻擊機獲取服務器的權限。同時咱們要注意的是在滲透的時候可使用 nmap 這類工具對攻擊點進行掃描,若是發現有相似 telnet 這種不安全的協議的端口開放的話就能夠採用相應手段進行攻擊了。

相關文章
相關標籤/搜索