请收好Netcat网络工具中的瑞士军刀,从此故障诊断不用愁!( 三 )


系统后门
假设你用串口登录到 A 主机 , 上面十分原始 , 包管理系统都没有 , sshd/telnetd 都跑不起来 , 这时候你想用 B 主机通过网络登录 A 主机有没有办法?
GNU 版本的 netcat 有一个 -e 参数 , 可以在连接建立的时候执行一个程序 , 并把它的标准输入输出重定向到网络连接上来 , 于是我们可以在 A 主机上 -e 一下 bash:
/bin/nc.traditional -l -p 8080 -e /bin/bash
按回车打开系统后门 , 然后再 B 主机那里照常:
【请收好Netcat网络工具中的瑞士军刀,从此故障诊断不用愁!】nc 192.168.1.2 8080
你就可以在 B 主机上登录 A 主机的 shell 了 , 操作完成 CTRL+C 结束 。
对于 openbsd 版本的 netcat , -e 命令被删除了 , 没关系 , 我们可以用管道来完成 , 和刚才一样 , 在 A 主机上:
mkfifo /tmp/f
cat /tmp/f | /bin/bash 2>&1 | /bin/nc.openbsd -l -p 8080 > /tmp/f
然后 B 主机和刚才一样:
nc 192.168.1.2 8080
即可访问 , 用完注意将 /tmp/f 这个 fifo 文件删除 。
结束
netcat 就是可以在命令行直接的方式操作 tcp/udp 进行原始的:监听 , 连接 , 数据传输等工作 。然后搭配管道 , 实现灵活多样的功能 , 或者进行各种网络测试 。
其实上面几个例子 , 并不是说明 “netcat 可以干这些事情”而是通过举例开一下脑洞 , 看看搭配管道的 netcat 究竟有多强 。
还有很多其他用法 , 比如你可以用 netcat + shell script 写一个 http 服务器 , 使用 fifo 搭配两层 nc 可以实现 tcp 端口转发 , 搭配 openssl 命令行工具和 nc 加管道可以把 ssl 的套接字解码并映射成裸的 socket 端口供没有 ssl 功能的工具访问 。
当然你要说 , 这么多复杂的用法你记不住 , 大部分你都可以用专业软件来代替 , 那至少你可以先尝试使用 nc 来做 tcp/udp 端口测试 , 不要再用 telnet/chrome 来测试端口是否可用了 , 后者太过业余 。其他功能可作为备份手段 , 在极端恶劣的环境下使用一下 , 也许能帮助到你很多;再你有心情的情况下可以研究下如何使用管道搭配其他工具进行一些高阶操作就行 。




推荐阅读