Ncat 小技巧
在一些条件比较苛刻的环境下(比如系统中没有 SSH 服务等等),只要系统有个 nc 命令或许会逆转形式。nc 既可发送数据,也能接受数据。
几个比较常用的参数:
参数名 | 用途 |
---|---|
-l | 监听 |
-k | 长连接,不会因为客户端断开而退出 |
-e | 将输入、输出内容重定向到指定程序 |
端口探测
直接运行:
nc host port
如果端口没开放会提示:
Ncat: Connection refused.
或者添加参数 -z 使用 Zero-I/O 模式,如果端口连接成功就立即断开:
nc -zv host port
远程 shell
服务端运行:
nc -l 8888 -e /bin/bash
客户端执行:
nc [host] 8888
发送 HTTP 请求
如果系统没有 curl、wget,可以试试:
$ nc www.shellcodes.org 80 GET / HTTP/1.1 [回车]
如果要测试一条完整的 HTTP 请求,可以把 HTTP 请求头写到一个文件中,然后用标准输入:
nc www.shellcodes.org 80 < http_request_header.txt
传文件
这个场景适合一些嵌入式设备,想从设备上 copy 一些文件出来,但又无法用 scp 的场景下。
文件接受端执行:
nc -l 8888 > filename
服务端运行:
nc host 8888 < filename
如果要复制一个目录,可以结合 tar 命令,将 tar 压缩后的内容输出到标准输出中:
tar cf - 目录 | nc host 8888
参数 f 如果提供的是“-”表示将打包的内容输出到标准输出中。
甚至可以将一个分区的数据都 copy 下来:
nc localhost 8888 < /dev/sda