netcat 命令詳解

簡(jiǎn)介

轉(zhuǎn)載注明出處绝骚,原文在此 https://segmentfault.com/a/1190000016626298
netcat 是一款調(diào)試 TCP/UDP 網(wǎng)絡(luò)連接的利器,常被稱(chēng)作網(wǎng)絡(luò)調(diào)試的瑞士軍刀籍胯,可見(jiàn)其功能強(qiáng)大。
netcat 在 Linux, Windows 等各大操作系統(tǒng)上都有對(duì)應(yīng)等發(fā)行版,以下以 Linux(Ubuntu 16.04) 為例介紹其幾個(gè)強(qiáng)大的用法点晴。

netcat 在 Linux 中一般通過(guò)命令 nc 調(diào)用霍掺。我們先來(lái)看下它的幫助文檔

# nc -h
OpenBSD netcat (Debian patchlevel 1.105-7ubuntu1)
This is nc from the netcat-openbsd package. An alternative nc is available
in the netcat-traditional package.
usage: nc [-46bCDdhjklnrStUuvZz] [-I length] [-i interval] [-O length]
      [-P proxy_username] [-p source_port] [-q seconds] [-s source]
      [-T toskeyword] [-V rtable] [-w timeout] [-X proxy_protocol]
      [-x proxy_address[:port]] [destination] [port]
    Command Summary:
        -4      Use IPv4
        -6      Use IPv6
        -b      Allow broadcast
        -C      Send CRLF as line-ending
        -D      Enable the debug socket option
        -d      Detach from stdin
        -h      This help text
        -I length   TCP receive buffer length
        -i secs     Delay interval for lines sent, ports scanned
        -j      Use jumbo frame
        -k      Keep inbound sockets open for multiple connects
        -l      Listen mode, for inbound connects
        -n      Suppress name/port resolutions
        -O length   TCP send buffer length
        -P proxyuser    Username for proxy authentication
        -p port     Specify local port for remote connects
            -q secs     quit after EOF on stdin and delay of secs
        -r      Randomize remote ports
        -S      Enable the TCP MD5 signature option
        -s addr     Local source address
        -T toskeyword   Set IP Type of Service
        -t      Answer TELNET negotiation
        -U      Use UNIX domain socket
        -u      UDP mode
        -V rtable   Specify alternate routing table
        -v      Verbose
        -w secs     Timeout for connects and final net reads
        -X proto    Proxy protocol: "4", "5" (SOCKS) or "connect"
        -x addr[:port]  Specify proxy address and port
        -Z      DCCP mode
        -z      Zero-I/O mode [used for scanning]
    Port numbers can be individual or ranges: lo-hi [inclusive]

可以看到我們使用的是 netcat-openbsd 這個(gè)發(fā)行版的 netcat, 除此之外匾荆,還有 netcat-traditional 等發(fā)行版拌蜘。不同發(fā)行版的基本功能相同,只是有細(xì)微的差別牙丽。

簡(jiǎn)單來(lái)說(shuō)简卧, nc 有以下功能:

  • 模擬 TCP 服務(wù)端
  • 模擬 TCP 客戶(hù)端
  • 模擬 UDP 服務(wù)端
  • 模擬 UDP 客戶(hù)端
  • 模擬 UNIX socket 服務(wù)端
  • 模擬 UNIX socket 客戶(hù)端
  • 端口掃描
  • 傳輸文件
  • 將服務(wù)器 bash 暴露給遠(yuǎn)程客戶(hù)端
  • 內(nèi)網(wǎng)穿透,反向獲取防火墻后的機(jī)器的 bash

以下分別舉例說(shuō)明烤芦。

實(shí)例

環(huán)境設(shè)定

假設(shè)

  • 服務(wù)器 A 有外網(wǎng) IP 202.118.69.40
  • 服務(wù)器 B 沒(méi)有外網(wǎng) IP
  • 客戶(hù)端 C 有外網(wǎng) IP 202.119.70.41

三臺(tái)主機(jī)上均為 Ubuntu 16.04 操作系統(tǒng)举娩。

TODO 網(wǎng)絡(luò)拓?fù)鋱D

1 模擬 TCP 服務(wù)端

nc -lk 9090

在服務(wù)器 A 執(zhí)行以上命令,將會(huì)把 nc 綁定到 9090 端口构罗,并開(kāi)始監(jiān)聽(tīng)請(qǐng)求铜涉。
-l 代表 netcat 將以監(jiān)聽(tīng)模式運(yùn)行;
-k 表示 nc 在接收完一個(gè)請(qǐng)求后不會(huì)立即退出遂唧,而是會(huì)繼續(xù)監(jiān)聽(tīng)其他請(qǐng)求芙代。
這時(shí)就可以請(qǐng)求該接口了, nc 會(huì)把請(qǐng)求報(bào)文輸出到標(biāo)準(zhǔn)輸出盖彭。

例如在客戶(hù)端 C 執(zhí)行 curl 202.118.69.40
nc 將會(huì)將 HTTP 請(qǐng)求的報(bào)文輸出到標(biāo)準(zhǔn)輸出

GET / HTTP/1.1
Host: 192.168.0.71:9090
User-Agent: curl/7.54.0
Accept: */*

2 模擬 TCP 客戶(hù)端

printf "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n" | nc example.com 80

在客戶(hù)端 C 執(zhí)行上述代碼,
C 的輸出如下

Connection to example.com port 80 [tcp/http] succeeded!
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: max-age=604800
Content-Type: text/html; charset=UTF-8
Date: Tue, 09 Oct 2018 07:08:38 GMT
Etag: "1541025663+gzip"
Expires: Tue, 16 Oct 2018 07:08:38 GMT
Last-Modified: Fri, 09 Aug 2013 23:54:35 GMT
Server: ECS (sjc/4E52)
Vary: Accept-Encoding
X-Cache: HIT
Content-Length: 1270

<!doctype html>
<html>
<head>
    <title>Example Domain</title>

    <meta charset="utf-8" />
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <style type="text/css">
   ...
</head>

<body>
<div>
    <h1>Example Domain</h1>
    <p>This domain is established to be used for illustrative examples in documents. You may use this
    domain in examples without prior coordination or asking for permission.</p>
    <p><a >More information...</a></p>
</div>
</body>
</html>

證明客戶(hù)端模擬成功纹烹,給 example.com 發(fā)送了 HTTP Method 為 GET 的 HTTP 請(qǐng)求。

3 模擬 UDP 服務(wù)端

在 A 執(zhí)行

nc -lk -u 9090

4 模擬 UDP 客戶(hù)端

在 C 執(zhí)行

nc -u 202.118.69.40 9090

此時(shí)在客戶(hù)端終端中輸入任意字符召边,將在 A 的終端中輸出同樣的字符铺呵,證明 UDP 服務(wù)端和客戶(hù)端模擬成功。

5 模擬 UNIX socket 服務(wù)端

在 A 執(zhí)行

nc -Ul /tmp/mync.sock

6 模擬 UNIX socket 客戶(hù)端

在 A 執(zhí)行(UNIX 默認(rèn)不能跨服務(wù)器)

nc -U /tmp/mync.sock

此時(shí)在該終端中輸入任意字符隧熙,將在第5步的終端中輸出同樣的字符片挂,證明 Unix socket 服務(wù)端和客戶(hù)端模擬成功。

7 端口掃描

nc -vz 202.118.69.40 1-81 2>&1|grep succeed

-z 指 Zero-I/O mode贱鼻,即連接的過(guò)程中禁用輸入輸出宴卖,僅用與端口掃描。
2>&1|grep succeed 默認(rèn)情況下掃描過(guò)程中邻悬,不論成功與失敗症昏,掃描結(jié)果都被輸出到了“標(biāo)準(zhǔn)錯(cuò)誤輸出”,該命令用來(lái)過(guò)濾父丰,僅顯示出打開(kāi)到端口肝谭。

上述指令輸出結(jié)果如下:

Connection to 202.118.69.40 22 port [tcp/ssh] succeeded!
Connection to 202.118.69.40 53 port [tcp/domain] succeeded!
Connection to 202.118.69.40 80 port [tcp/http] succeeded!

8 傳輸文件

8.1 向服務(wù)器上傳圖片

服務(wù)器 A 監(jiān)聽(tīng) 9090 端口

nc -l 9090 | base64 -d > WechatIMG88.jpeg

客戶(hù)端上傳圖片

base64 WechatIMG88.jpeg | nc 202.118.69.40 9090

注:因?yàn)樾枰獋鬏攬D片,所以先 base64 編碼蛾扇,然后下載完再解碼避免終端錯(cuò)亂攘烛。

8.2 從服務(wù)器下載圖片

服務(wù)器 A 監(jiān)聽(tīng) 9090 端口,并將要下載的圖片輸出到 nc

base64 WechatIMG88.jpeg | nc -l 9090

客戶(hù)端下載

nc -t 202.118.69.40 9090|base64 -D > w.jpeg

9 將服務(wù)器 bash 暴露給遠(yuǎn)程客戶(hù)端

與 7 類(lèi)似镀首,只不過(guò)服務(wù)端將接收到到內(nèi)容管道給 /bin/bash
然后在客戶(hù)端輸入要敲的命令

nc -l 9090 | /bin/bash

10 內(nèi)網(wǎng)穿透坟漱,反向獲取防火墻后的機(jī)器的 bash

與 8 類(lèi)似,只不過(guò)服務(wù)器 B 將內(nèi)容管道給 /bin/bash
在客戶(hù)端 A 打開(kāi)監(jiān)聽(tīng)

nc -l 9090

在服務(wù)器 C 上執(zhí)行以下代碼反向接受命令

nc -t 202.119.70.41 9090 | /bin/bash

然后在客戶(hù)端 A 輸入要執(zhí)行的命令即可更哄。

需要注意的是芋齿,使用上述命令遠(yuǎn)程執(zhí)行命令時(shí)在客戶(hù)端無(wú)法看到命令的返回結(jié)果腥寇。
通過(guò)創(chuàng)建命名管道的方式,可將 bash 執(zhí)行的結(jié)果回傳給 netcat,
具體命令如下(在服務(wù)器 C 執(zhí)行代碼):

mkfifo ncpipe
nc -t 202.119.70.41 9090 0<ncpipe| /bin/bash 1>ncpipe
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末觅捆,一起剝皮案震驚了整個(gè)濱河市赦役,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌栅炒,老刑警劉巖掂摔,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異赢赊,居然都是意外死亡乙漓,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)域携,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)簇秒,“玉大人鱼喉,你說(shuō)我怎么就攤上這事秀鞭。” “怎么了扛禽?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵锋边,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我编曼,道長(zhǎng)豆巨,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任掐场,我火速辦了婚禮往扔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘熊户。我一直安慰自己萍膛,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布嚷堡。 她就那樣靜靜地躺著蝗罗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蝌戒。 梳的紋絲不亂的頭發(fā)上串塑,一...
    開(kāi)封第一講書(shū)人閱讀 51,718評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音北苟,去河邊找鬼桩匪。 笑死,一個(gè)胖子當(dāng)著我的面吹牛友鼻,可吹牛的內(nèi)容都是我干的傻昙。 我是一名探鬼主播瑟慈,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼屋匕!你這毒婦竟也來(lái)了葛碧?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤过吻,失蹤者是張志新(化名)和其女友劉穎进泼,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體纤虽,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡乳绕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了逼纸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片洋措。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖杰刽,靈堂內(nèi)的尸體忽然破棺而出菠发,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站卦绣,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏糜俗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一曲饱、第九天 我趴在偏房一處隱蔽的房頂上張望悠抹。 院中可真熱鬧,春花似錦扩淀、人聲如沸楔敌。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)梁丘。三九已至,卻和暖如春旺韭,著一層夾襖步出監(jiān)牢的瞬間氛谜,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工区端, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留值漫,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓织盼,卻偏偏與公主長(zhǎng)得像杨何,于是被迫代替她去往敵國(guó)和親酱塔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355