本文是学习笔记,不足之处很多,望各位指点指点~
作为Kali中的一款基本的工具,我们需要学会对NC的掌握。下面主要从NC的功能方面展开讲。
NC的功能:
NC可以完成Telnet的所有功能,而且比Telnet更好(telnet/banner):通过-h参数查看参数信息:
nc -h
通过-n参数后面输入IP地址而不是DNS域名,-v参数显示详细的信息,下面直接nc Metasploitable这台web服务器,已知其80端口是开启的:
nc -nv 10.10.10.137 80
在其中输入:head/
传输文本信息:
以两台机器进行聊天为背景,其中一台主机需要开启一个端口用于与另一台主机的连接并等待另一主机连接上该端口,下面以Kali和Ubuntu为例进行文本信息的传输,在Ubuntu中打开并监听4444端口,其中-l参数为listen,即侦听;-p参数为port,即指定一个端口:nc -l -p 4444
再通过一下命令查看该4444端口的状态确认已在侦听:
netstat -pantu | grep 4444
在Kali中连接上Ubuntu的4444端口进行通信:
nc -nv 10.10.10.134 4444
连接上之后就可直接在上面通信:
通过control C即可同时终止连接。
可结合管道符,将前面命令的执行结果传输到另一台机器中。下面以Kali中一句话木马传输到Ubuntu为例,在Ubuntu中先开启监听4444端口,并加上“>”号将传输的信息保存到kali.txt文件中:
nc -l -p 4444 > kali.txt
在Kali中,nc加上-q参数表示若连接成功后在指定的时间内断开连接:
cat 1.php | nc -nv 10.10.10.134 4444 -q 1
执行结果可见Kali中1.php的内容已经传输到Ubuntu的kali.txt文件中:
可应用于电子取证。可以将使用管道通过nc将ps aux或lsof命令执行后的系统信息传输过去。
传输文件以及加密传输文件:
文件传输:
以把Kali中的1.jpg图片文件传输给Ubuntu为例,在Ubuntu中nc启动监听4444端口并将内容保存为1.png文件:
nc -lp 4444 > 1.png
在Kali中进入1.jpg文件所在目录,之后nc连接Ubuntu的4444端口并通过“<”将1.jpg文件导入nc命令中:
nc -nv 10.10.10.134 4444 -q 1 < 1.jpg
在Ubuntu接受到了:
加密文件传输:
基本方法就是先将文件进行加密然后再通过管道用nc传输过去,在另一端就用nc接收并通过管道将加密的文件进行解密。加密的命令并不是nc本身所包含的,这里我们使用mcrpty命令进行加密,但Kali中没有默认安装mcrpty命令,所以先进行该命令的下载安装:
apt-get intall mcrypt
通过--help参数查看相关的参数信息:
mcrypt --help
Kali:
mcrypt --flush -Fbq -a rijndael-256 -m ecb < 1.php | nc -nv 10.10.10.134 4444 -q 1
Ubuntu:
nc -lp 4444 | mcrypt --flush -Fbqd -a rijndael-256 -m ecb > 1.php
通过利用系统mcrypt命令进行,算法都是rijndael-256,参数一个是Fbq加密、一个是Fbqd解密,--flush参数表示立即冲刷输出。
成功后会提示输入相应的密钥,在发送方和接收方都输入一样的即可完成传输。
传输目录:
和加密传输文件相似,先将目录打包然后再通过管道用nc传输过去,在另一端就用nc接收并通过管道将打包的目录进行解包。以下实例将Kali中的table目录传输到Ubuntu中。将Kali作为监听端:
tar -cvf - table/ | nc -lp 4444 -q 1
在Ubuntu中连接该端口:
nc -nv 10.10.10.146 4444 | tar -xvf -
远程控制:
可以实现双向的控制。示例中为正向,即监听端口的主机将shell传给连接该端口的主机;反向就是将连接端口的主机的shell传给监听端口的主机。(如果在Windows上使用,则需要把bash换成cmd)Kali:
nc -lp 4444 -c bash
Ubuntu:
nc -10.10.10.146 4444
连接成功后再发起连接的主机中输入相应的命令即可。
流媒体服务器:
以mplayer作为流播放器的命令为例,其在Kali中并没有默认存在,需要下载安装。注意一点的是,流媒体播放并不会在播放本地将视频文件保存为一个文件而只是按流传输多少就播放多少。以下简单列出命令:Kali:
cat 1.mp4 | nc -lp 4444
Ubuntu:
nc -nv 10.10.10.146 4444 | mplayer -vo xll -cache 3000 -
端口扫描:
通过-h参数查看相应参数的功能。-z参数只进行端口扫描,当扫描到端口开放或关闭时就转而扫描下一个端口而不做深入的扫描。默认是探测TCP端口,若想探测UDP端口则添加-u参数。
默认TCP端口扫描:
nc -nvz 10.10.10.137 1-65535
UDP端口扫描:
nc -nvzu 10.10.10.137 1-1024
远程克隆硬盘:
Kali:nc -lp 4444 | dd of=/dev/sda
Ubuntu:
dd if=/dev/sda | nc -nv 10.10.10.134 4444 -q 1
将Ubuntu中/dev/sda的硬盘信息通过dd命令将其用nc传输到Kali中。
NC的缺点:
1、不同系统、平台的nc参数功能并不完全一致
2、没有加密和身份验证的机制
Ncat可弥补NC的这个缺点,不是Linux自带的命令,包含于nmap工具包中。下面只演示加密传输的功能,其他功能和NC差不多。BT5:--allow参数指示哪个IP地址可以连接本机;--ssl即使用加密
ncat -c bash --allow 10.10.10.134 -vnl 4444 --ssl
Kali:
ncat -nv 10.10.10.128 4444 --ssl
可以看到连接会存在一个指纹信息。