(CN) Reverse Shell

Reverse Shell

File Descriptor

当Linux启动的时候会默认打开三个文件描述符,具体见下图:

image-20230327183521465

需要注意的是:

  1. 后续打开的文件,描述符依次增加
  2. 对于一条简单的shell命令,都会继承其父进程的文件描述符,因此所有的shell命令,都会默认有三个文件描述符

文件所有输入输出都是由该进程所有打开的文件描述符控制

Redirection

输入重定向 <

输出重定向 >

  1. shell在执行一条指令时,首先会检查命令中是否存在重定向的符号,如果存在那么首先将文件描述符重定向,然后在把重定向去掉,执行指令
  2. 如果指令中存在多个重定向,那么不能随便改变语句顺序,因为重定向是从左向右进行解析,改变顺序可能会带来完全不同的结果
  3. < 是对标准输入 0 重定向 ,> 是对标准输出 1 重定向

STDIN Redirection

格式:[n]< word (注意[n]与<之间没有空格)

说明:将文件描述符 n 重定向到 word 指代的文件(以只读方式打开),如果n省略就是0(标准输入)

当解析到 < 以后会先处理重定向,将标准输入重定向到file,之后,cat从标准输入读取指令的时候,由于标准输入已经重定向到了file ,于是cat就从file中读取指令了。

image-20230327185505757

STDOUT Redirection

格式: [n]> word

说明: 将文件描述符n重定向到word指代的文件(以写的方式打开),如果n省略则默认就是1(标准输出)

image-20230327185747862 image-20230327185825910

STDERR & STDOUT Redirection

格式: &> word 或者 >& word

说明:将标准输出与标准错误输出都定向到word代表的文件(以写的方式打开),两种格式意义完全相同,这种格式完全等价于 > word 2>&1 其中,2>&1 是将标准错误输出复制到标准输出,&是为了区分文件1和文件描述符1

首先执行了一个错误的命令,可以看到错误提示被写入文件(正常情况下是会直接输出的),又执行了一条正确的指令,发现结果也输入到了文件,说明正确错误消息都能输出到文件。

image-20230327190448273

Copy File Descriptor

格式: [n]<&[m] 或者 [n]>&[m]

说明:

  • 以上两种写法都是将文件描述符n复制到m,两者的区别是,前者是以只读的形式打开,后者是以写的形式打开。因此 0<&10>&1 是完全等价的

  • &目的是为了区分数字名字的文件和文件描述符,如果没有&系统会认为是将文件描述符重定向到了一个数字作为文件名的文件,而不是一个文件描述符

EXEC <>

格式: [n]<>word

说明:以读写方式打开word指代的文件,并将n重定向到该文件。如果n不指定的话,默认为标准输入0

image-20230327192848027

Reverse Shell

Linux 反弹shell(二)反弹shell的本质

bash -i >& /dev/tcp/localhost/8080 0>&1 的含义

反弹shell原理与实现

反弹shell命令里的0>&1到底是个什么玩意?

About /dev/null

shell脚本中 /dev/null 的用途 - Linux开发那些事儿

Outis Yang
Outis Yang
2024 Undergraduate in Cyberspace Security

My research interests include Internet of Vehicles(IoV), Penetration Testing and Security research.