如何使用 Netcat 並提升您的網絡技能!

管理網絡並監控系統間的流量數據聽起來很嚇人。嗯,除非你知道如何使用 Netcat

Netcat 是一個命令行工具,您可以用於各種目的,例如端口掃描、文件傳輸和創建一個最小的 Web 服務器來測試連接活動。在這個教程中,您將學會如何利用 Netcat,並瞭解一些最常見的 Netcat 用例。

準備好了嗎?繼續閱讀,提升您的網絡技能吧!

先決條件

本教程將進行實際演示。如果您想跟著做,請確保您具有以下條件。

  • 兩台 Linux 機器:一台(ubuntu1)充當接收主機,另一台(ubuntu2)充當發送主機 – 本教程在兩台機器上均使用 Ubuntu 20.04。

掃描開放端口

Ports 是允许网络流量进入和离开计算机的门户。当端口关闭时,该端口上没有服务在监听,流量无法通过。但是如果端口是开放的,您的网络就容易受到攻击。

如果您想检查计算机上的特定端口是否开放以查找任何安全漏洞,Netcat 是一个很好的选择。作为渗透测试者,您需要知道哪些端口是开放的,以进行攻击。无论原因是什么,扫描开放端口是一个常见需求。

使用 Netcat 进行端口扫描的基本语法如下,其中:

  • host – 是要扫描的计算机的 IP 地址或主机名。
  • startport – 是起始端口号。
  • endport – 是结束端口号。
netcat options host startport-endport

netcat 命令有一个别名为 nc,这在缩短命令时非常方便。但是本教程使用 netcat 进行正确的文档记录。

通过 SSH 连接到您的发送主机(ubuntu2),并运行以下命令以扫描端口范围在 1-100 之间的开放端口。

在本教程中,将 149.28.86.131 替换为您发送主机的 IP 地址。

在大多数情况下,1-100 端口范围足够使用。大多数服务使用的默认端口号通常在这个范围内,例如 SSH 的 22 端口,HTTP 的 80 端口等。

  • -z(零I/O模式) – Netcat 将不从网络连接读取或写入。此选项使扫描过程更快。
  • -n – 告诉Netcat禁用DNS查找以避免延迟。
  • -v – 使Netcat详细显示所有端口扫描过程。
netcat -z -n -v 149.28.86.131 1-100

您可以看到连接到端口22(SSH)成功,但所有其他端口都失败。

How to Use Netcat : Scanning for Open Ports

由于netcat命令列出了所有扫描过的端口,您会获得大量信息,其中一些您不需要。在这种情况下,运行以下命令,将grep命令进行管道传递。此命令仅过滤以“succeeded!”消息结尾的打开端口,如下所示。

netcat -z -n -v 149.28.86.131 1-100 2>&1 | grep succeeded

在下面,您可以看到端口22作为SSH连接是打开的,这是预期的。

Filtering the Successful Port Connection

安全地在主机之间发送文件

除了端口扫描之外,Netcat还可以在两台机器之间安全传输文件。 Netcat使用TCP协议进行文件传输,比UDP更可靠。

使用Netcat发送文件的基本语法如下:

netcat options host port filename

要从主机向另一台机器发送文件:

1. 运行以下命令在接收主机(ubuntu1)上的端口4444上开始侦听。

這個指令沒有輸出,但以下選項會影響指令設置監聽端口:

  • -l – 告訴 netcat 在指定的 TCP 端口上監聽連入的連接。端口可以是任何你想要的數字,但請確保其他服務沒有使用你首選的端口。
  • > - 告訴 netcat 將所有接收到的數據重定向到指定路徑(ata_file)的文件中。
netcat -l 4444 > ata_file

只有 root 用戶可以綁定到小於 1000 的端口,所以作為非 root 用戶,你必須選擇一個大於 1000 的端口。如果你嘗試作為非 root 用戶使用小於 1000 的端口號,你會得到以下錯誤。

Getting “Permission denied” Error When Using Port Lower Than 1000

2. 在發送主機(ubuntu2)上運行以下 echo 命令,它沒有輸出,但會創建一個名為 ata_file 的文件,內容為 Hello from ATA。

echo "Hello from ATA" > ata_file

3. 現在,運行以下 netcat 命令將 ata_file 發送到接收主機(ubuntu1)。請確保在接收主機上(4444)使用與發送主機相同的端口號。

這個指令沒有輸出,但 < 選項告訴 netcat 從指定文件中獲取輸入。

netcat 149.28.86.131 4444 < ata_file

4. 最後,切換到接收主機(ubuntu1)並運行以下 cat 命令檢查 ata_file 的內容。

cat ata_file

你可以看到下面的 Hello from ATA 消息,表示傳輸成功。

Verifying the Transfer Worked

將目錄發送到另一台主機

到目前為止,你已成功將單個文件從一台主機發送到另一台主機。但如果你想發送包含所有子目錄和文件的整個目錄怎麼辦?Netcat 也可以發送目錄!

假設您在發送主機(ubuntu2)上有一個名為apache_backup的備份目錄。首先,您需要壓縮該目錄,然後將其發送並解壓縮到接收主機(ubuntu1)上。

1. 在接收主機(ubuntu1)上運行以下命令來創建一個名為apache_backup的新目錄並移動(cd)到該目錄中。

mkdir apache_backup && cd apache_backup
Creating the apache_backup Directory

2. 接下來,運行以下命令在端口4444上開始監聽並提取發送主機(ubuntu2)發送到接收主機(ubuntu1)的壓縮文件。

該命令不會輸出任何信息,但tar xf –標誌會從Netcat(標準輸入)接收輸入並將所有文件提取到當前目錄中。

netcat -l 4444 | tar xf -

3. 在發送主機(ubuntu2)上運行以下命令來創建一個目錄(apache_backup)、一些文本文件並將它們發送到接收主機(ubuntu1)。

這些命令不會輸出任何信息,但您將在後續步驟中驗證傳輸是否成功。

# 創建一個apache_backup目錄並在其中創建一些文本文件
mkdir apache_backup && cd apache_backup && touch ata{1..5}.txt
# 壓縮工作目錄並將其發送到接收主機
tar cf - . | netcat 149.28.86.131 4444

4. 最後,切換到接收主機(ubuntu1),按下Ctrl+C停止監聽端口4444,然後運行ls命令列出apache_backup目錄中的文件。

ls

如下所示,apache_backup目錄中的文件已成功傳輸到接收主機的apache_backup目錄中。

Verifying Transferred Files on the Receiving Host

將整個磁盤或分區發送到另一個主機

將整個磁碟或分割區傳送到另一主機可能看起來很難,但這個任務是可行的,除了傳送檔案和目錄之外。這一技巧非常有用,特別是在需要在採取激進措施(如移動或刪除大量檔案)之前備份整個磁碟的情況下。

1. 在接收主機(ubuntu1)上運行以下命令以在端口4444上開始監聽。此命令沒有輸出,但會將所有傳入的數據(bzip2 -d | dd)解壓縮到/dev/sdb。

/dev/sdb是機器上的第二個硬碟。但在這種情況下,/dev/sdb是附加到此教程的這台機器上的一個空白硬碟。

netcat -l 4444 | bzip2 -d | dd of=/dev/sdb

2. 在發送主機(ubuntu2)上運行以下fdisk命令,以查找機器上的所有磁碟和分割區。

 fdisk -l

如下所示,/dev/vda1/是本教程中發送主機的根分割區。根據您機器的配置,輸出可能會有所不同。

Finding All Disks and Partitions

3. 在發送主機(ubuntu2)上運行以下命令,此命令沒有輸出,但通過端口4444將/dev/vda1分割區發送到接收主機(ubuntu1)。

壓縮和傳送分割區到接收主機需要一段時間,具體取決於分割區的大小。

bzip2 -c /dev/vda1 | netcat 149.28.86.131 4444

4. 一旦過程完成,切換到接收主機(ubuntu1),您將看到下面的輸出。

沒有空間的錯誤是預期的,因為/dev/vda1可能比/dev/sdb大。但你懂的!您可以使用Netcat將整個硬盤或分區發送到另一台機器。

Viewing the Sending Disk/Partition Process

5. 最後,在接收主機(ubuntu1)上運行命令以掛載/dev/vda1分區並列出分區中的所有文件。

# 掛載/dev/vda1分區
mount /dev/vda1 /media 
# 列出分區中的所有文件
ls media

如下所示,所有來自/dev/vda1的文件和目錄都成功傳輸到/dev/sdb。

Verifying Data Integrity of the File Transfer

創建最小Web服務器

配置像Apache或NGINX這樣的全功能Web服務器來診斷Web服務器問題可能很麻煩。相反,使用Netcat創建一個最小的Web服務器來快速識別Web服務器問題。

要創建最小的Web服務器:

1. 切換到您的接收主機並運行以下命令來創建Web服務器的根目錄(nc-webserver-docroot)和生成HTTP響應的shell腳本(httpresponse.sh)。

mkdir -pv /root/nc-webserver-docroot/
Creating a Webserver Root Directory

2. 接下來,在/root/nc-webserver-docroot/目錄中使用您喜歡的編輯器創建一個index.html 文件,並使用下面的代碼填充 文件。這個HTML文件保存Netcat Web服務器將提供的內容。

<!doctype html>

<html lang="en">

<head>
	<title>NETCAT Testing network connectivity </title>
</head>

<body>
	<h1>NETCAT Test</h1>
	<p>Connection Successful! Your networking skills are awesome!</p>
</body>

</html>

3. 在 /root/nc-webserver-docroot/目錄中創建一個名為httpresponse.sh 的shell腳本文件並填充以下代碼。

這個 shell 腳本將/root/nc-webserver-docroot/index.html文件的內容作為 HTTP 響應返回給向您的 Netcat Web 伺服器發送請求的任何客戶端。

#!/bin/bash
printf 'HTTP/1.1 200 OK\n\n%s' "$(cat /root/nc-webserver-docroot/index.html)"

4. 現在,執行下面的 chmod 命令,該命令沒有輸出,但使 httpresponse.sh 文件可執行(+x)。

chmod +x /root/nc-webserver-docroot/httpresponse.sh

5. 執行以下ncat命令以在端口 7777 上啟動 Netcat Web 伺服器。

請確保將端口 7777 替換為您選擇的端口號,該端口號未被系統上的任何其他服務使用。

以下選項影響了聲明 Netcat Web 伺服器的行為:

  • -l – 告訴 Ncat 監聽傳入連接。
  • -v – 啟用詳細模式,以在終端中顯示所有傳入的 HTTP 請求。
  • -c - 指定生成 HTTP 響應的 httpresponse.sh 腳本的路徑。
  • -keep-open – 即使在第一個連接關閉後也保持 Ncat 監聽器打開。如果您使用多個客戶端測試 Web 伺服器,此選項很有用。
ncat -lv 7777 -c /root/nc-webserver-docroot/httpresponse.sh --keep-open

一旦 Netcat Web 伺服器在所有可用的網絡接口上運行並在端口 7777 上進行監聽,您將看到以下輸出。

Starting the Ncat Server

6. 現在,打開另一個終端並運行以下命令來測試您的 Netcat 網絡服務器(http://localhost:7777)。

curl -vvv http://localhost:7777

下面的輸出顯示 Netcat 網絡服務器正在按預期工作,可以作為 HTTP 響應返回/root/nc-webserver-docroot/index.html文件的內容。

Testing your Ncat server

7. 最後,切換回運行 Netcat 網絡服務器的終端。您將看到 Netcat 網絡服務器已經接收並處理了來自 curl 客戶端的 HTTP 請求。

恭喜!您已成功創建了一個最小的 Netcat 網絡服務器,以測試您的網絡連通性!

Verifying the HTTP Request from the curl Client

結論

在本教程中,您學會了使用 Netcat 提升您的網絡和調試技能。您掃描了開放端口,傳輸文件,並創建了一個最小的 Web 服務器。在這一點上,您現在可以使用這個強大的網絡實用程序解決許多現實世界的網絡問題!

憑藉這些新發現的知識,為什麼不進一步提升您的網絡技能,成為网络安全領域的高級用戶呢?

Source:
https://adamtheautomator.com/how-to-use-netcat/