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