Netcat詳解

Netcat詳解

點擊右上角【關注】發哥微課堂頭條號,get更多相關技能~


0x00:介紹

netcat 簡稱 nc,安全界叫它瑞士軍刀。ncat 也會順便介紹,彌補了 nc 的不足,被叫做 21 世紀的瑞士軍刀。nc 的基本功能如下:

  • telnet / 獲取系統 banner 信息
  • 傳輸文本信息
  • 傳輸文件和目錄
  • 加密傳輸文件
  • 端口掃描
  • 遠程控制 / 正方向 shell
  • 流媒體服務器
  • 遠程克隆硬盤

0x01:端口掃描

首先應該知道的一個參數是 - h,這是最基本的一個命令,nc 長跟的參數有兩個,一個是 n 一個是 v,幫助文檔解釋如下:

Netcat詳解


v 參數就是列出執行過程的詳細信息,n 參數翻譯過來就是隻接收 ip 地址,沒有 dns。之所以使用 n 參數,是因為使用命令的過程中只去傳入 ip,減少了 nc 把域名解析為 ip 的過程,這樣可以節省時間提高效率。

nc 用來進行端口掃描的命令是 nc -nvz ip 地址 端口號,z 參數翻譯過來就是不進行 i/o,用來掃描。意思就是僅僅是去 ping 去探測目標是否開啟指定端口,不進行任何的交互。

Netcat詳解


z 參數默認掃描的是 tcp 類型,如果需要掃描 udp,則需要使用一個新參數 u。

0x02:Telnet/Banner

telnet 使用率大不如以前了,基本被 ssh 取代了,最大的弊端在於其明文傳輸。nc 也是明文方式傳輸的數據,所以後續需要使用 nmap 下的 ncat 工具來結合一下,彌補其不足。nc 在這裡可以獲取服務器的 banner 信息。例如 163 的 smtp,命令格式是 nc -nv ip port,如下圖:

Netcat詳解


根據返回的信息可以知道,其使用的是 coremail 郵件系統。

0x03:傳輸文本信息

nc 可以在兩臺機器之間相互傳遞信息,首先需要有一臺機器進行監聽一個端口,另一臺以連接的方式去連接其指定的端口,這樣兩臺機器之間建立了通信後,相互之間可以傳輸信息。l 參數是監聽模式的意思,p 是指定一個端口(為了區分,一個機器發送字母,一個機器發送數字),如下圖:

Netcat詳解


這種相互傳輸信息和滲透之間的關係是,電子取證的時候可以用。當機器被攻擊後,為了不破壞現場,需要提出大量的信息和文件出來做分析,這時候可以用 nc 的這個機制,例如,需要一個命令的輸出信息,首先在一臺機器上監聽一個端口,隨後在被攻擊的機器上執行相關的命令,然後以管道給 nc,指定另一臺的地址和端口,這樣輸出結果就會到另一端,如下圖:

Netcat詳解


如果輸出內容過多,則可以將內容定向輸出到文件中,如下圖:

Netcat詳解


0x04:傳輸文件和目錄

作為文件傳輸和目錄這些功能,其實和文本信息傳輸類似,只不過是把文本信息換成了文件和目錄。首先用一臺機器監聽一個端口,如果有人連接並傳來信息時,則將信息使用 > 重定向到文件。另一臺機器連接目標指定端口然後通過 < 輸出要傳送的文件即可。

Netcat詳解


上面這個是正向傳輸的,同樣的也有一個反向傳輸,這個需要理解一下,因為和經常用到的正反向 shell 原理一樣。原先是我打開指定端口,等待別人連我,給我傳文件。現在是我打開指定端口把文件準備好,別人連我,我傳給他文件。

Netcat詳解


這裡需要理解兩個重定向符號 ,> 是將文件進行輸出。

對於傳輸目錄其實和傳輸文本信息傳輸文件一樣,當作文件處理即可,傳輸時將目錄進行壓縮進行傳輸,隨後另一臺機器接收後進行解壓,這樣就完成了目錄的傳輸。例如使用 tar 命令,cvf 進行壓縮,xvf 進行解壓,c 是壓縮的意思,v 是顯示詳細過程,f 是文件名,x 是解壓。

Netcat詳解


0x05:加密傳輸文件

加密傳輸文件需要使用 mcrypt 庫,linux 系統默認是沒有安裝的,需要手動安裝。隨後和傳輸文件類似,只需要在傳輸文件時使用 mcrypt 加密即可。

命令用到的參數有,--flush 立即沖洗輸出,-F 輸出數據,-b 不保留算法信息,-q 關閉一些非嚴重的警告,-d 解密,首先在接收端監聽一個端口,等待另一臺進行連接傳送文件,隨後在要傳送的機器上把要傳送的文件進行加密使用 nc 連接指定的地址和 ip,如下圖:

Netcat詳解


第一次需要輸入加密的密碼,然後回車再次確認密碼,接收端輸入相應的密碼就會收到傳輸的文件,如下圖:

Netcat詳解


Netcat詳解


0x06:流媒體服務

對於直播的功能就類似於流媒體,就是對方把視頻通過流的方式進行傳輸,傳輸多少,對方就會實時的播放多少。

首先,需要在要傳送文件的機器上把文件通過管道給 nc,然後監聽一個端口。在接收端,連接此端口然後通過管道給 mplayer 進行實時播放,mplayer 默認 linux 不安裝,需要手動安裝。其中 vo 參數是選擇驅動程序,cache 是每秒要接收的播放幀。

Netcat詳解


0x07:遠程克隆硬盤

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

nc -lp 6666 | dd of=/dev/sda
dd if=/dev/sda | nc -nv 192.168.228.128 6666 -q 1

0x08:遠程控制 / 正反向 shell

原理和傳輸 xin'xi 傳輸文件一樣,只不過傳輸得是 bash,windows 系統是 cmd,正向是目標機器主動指定 bash,然後通過別人連接自己的端口,別人連接自己後,執行的命令就是自己的機器,如下圖(左邊是目標服務器,右邊是客戶端):

Netcat詳解


通常情況下,一般的服務器都會有防火牆,很少會允許其他外在的機器來連接自己的某一個端口,只有某些指定端口可能會允許訪問,例如 web 服務的 80 端口。這時正向的 shell 就不不起作用了,而防火牆一般都會禁止外在機器來連接自己機器的其他端口,但自己的機器訪問外面的端口一般不會做限制,這時候就可以使用反向 shell,也就是攻擊者指定一個端口和 bash,讓目標服務器來連接自己,這樣就可以寫一個腳本放到目標服務器的開機啟動中,只要目標服務器運行就會連接自己。當然,有些管理員安全意思比較好的話,也會限制自己的服務器訪問外在的一些端口,這種情況很少見,但也有,這時可以指定常用的端口,例如服務器要使用 dns 服務的 53 端口,這時候自己就可以監聽 53 讓目標服務器來連接自己。

下圖(左邊是目標服務器,右邊是客戶端)。

Netcat詳解


總結:正向 shell 是服務器開啟一個端口指定 shell 讓別人來連。但出於防火牆原因,一般都連不上。這時需要用反向 shell,讓目標服務器指定 shell 後來連接自己。

0x09:ncat

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

ncat 則彌補了這些缺點,ncat 不是 linux 系統自帶的命令,而是 nmap 中的。ncat 中很多參數和 nc 一樣,其中可以通過 --alow 參數來指定允許連接的機器,通過 --ssl 進行數據的加密,如下圖(左邊是服務器,右邊是客戶端):

Netcat詳解


通過 allow 參數即可指定允許連接的機器,這時如果其他人即使掃描到了這個端口也無法進行連接,如下圖:

Netcat詳解


客戶端 ip 是 128,當服務器只允許 111 時,再連接就會提示失敗。

0x10:總結

nc 小巧功能強大,所以被成為瑞士軍刀,不足之處是明文傳輸,也沒有相關的身份驗證,而 ncat 在 nc 基礎上彌補了其不足,nc 可以做的 ncat 也可以做到,所以 ncat 被成為 21 世紀的瑞士軍刀。


分享到:


相關文章: