Linux nc命令的使用详解!

这是我参与 8 月更文挑战的第 12 天,活动详情查看: 8月更文挑战

简介

NetCat 是一款调试 TCP/UDP 网络连接的利器,常被称作网络调试的瑞士军刀,可见其功能强大。

NetCat的基本功能如下:

  • telnet 获取系统 banner 信息
  • 传输文本信息
  • 传输文件和目录
  • 加密传输文件
  • 端口扫描
  • 远程控制 / 正方向shell
  • 流媒体服务器
  • 远程克隆硬盘

使用方法

查看帮助信息:

image-20210811193123572

选项参数:

-c shell commands  shell模式
-e filename      程序重定向 [危险!!]
-b  		 允许广播
-d   		 无命令行界面,使用后台模式
-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          连接超时设置
-z               I/O 模式 [扫描时使用]
复制代码

端口扫描

nc 用来进行端口扫描的命令是 nc -nvz ip地址 端口号

-z 参数翻译过来就是不进行 i/o,用来扫描,意思就是仅仅是去ping去探测目标是否开启指定端口,不进行任何的交互。

-v 参数就是列出执行过程的详细信息,n 参数翻译过来就是只接收 ip 地址,没有 dns

-n 参数是因为使用命令的过程中只去传入 ip,减少了 nc 把域名解析为 ip 的过程,这样可以节省时间提高效率。

nc -nvz 192.168.254.4 1-100
复制代码

image-20210811181652156

wireshark可以看出,底层原理是通过发送TCP数据包去进行三次握手来判断端口是否打开,和nmapSYN扫描是一样的原理

image-20210811181552178

传输文本信息

nc 可以在两台机器之间相互传递信息,首先需要有一台机器进行监听一个端口,另一台以连接的方式去连接其指定的端口,这样两台机器之间建立了通信后,相互之间可以传输信息。

-l 参数是监听模式的意思,-p 是指定一个端口。

nc -lp 666 #监听本地的666端口
复制代码

image-20210811182721163

另外一台电脑连接开放的端口,之后就可以相互发送文本信息了

image-20210811182814835

我们可以在TCP数据包中看出传输的数据,显然数据是没有经过加密处理,所以存在一定的安全问题

image-20210811182651465

还有一个作用就是可以运行命令的结果通过`管道符( | )传输到监听主机的端口上,主要的应用就在于渗透攻击时利用这个功能区传输一些信息

image-20210811184832472

如果输出内容过多,则可以将内容定向输出到文件中

image-20210811185249760

image-20210811185317838

通过wireshark追踪流功能可以看出全部传输的数据

image-20210811185855217

image-20210811185649867

传输文件和目录

作为文件传输和目录这些功能,其实和文本信息传输类似,只不过是把文本信息换成了文件和目录。首先用一台机器监听一个端口,如果有人连接并传来信息时,则将信息使用 > 重定向到文件。另一台机器连接目标指定端口然后通过 < 输出要传送的文件即可。

image-20210811190746045

上面这个是正向传输的,同样的也有一个反向传输,这个需要理解一下,因为和经常用到的正反向 shell 原理一样。原先是我打开指定端口,等待别人连我,给我传文件。现在是我打开指定端口把文件准备好,别人连我,我传给他文件。

image-20210811191120772

远程控制 / 正反向 shell

原理和传输 信息传输文件一样,只不过传输得是 bashwindows 系统是 cmd,正向是目标机器主动指定 bash,然后通过别人连接自己的端口,别人连接自己后,执行的命令就是自己的机器,如下图

image-20210811191729777

通常情况下,一般的服务器都会有防火墙,很少会允许其他外在的机器来连接自己的某一个端口,只有某些指定端口可能会允许访问,例如 web 服务的 80 端口。这时正向的 shell 就不不起作用了,而防火墙一般都会禁止外在机器来连接自己机器的其他端口,但自己的机器访问外面的端口一般不会做限制,这时候就可以使用反向 shell,也就是攻击者指定一个端口和 bash,让目标服务器来连接自己,这样就可以写一个脚本放到目标服务器的开机启动中,只要目标服务器运行就会连接自己。

image-20210811192020322

image-20210811192532981

ncat

nc 也有不足之处,首先就是明文传输,可能会被嗅探。其次对于反向 shell,如果其他人通过网络扫描发现了这个端口,也就意味着任何人都可以去监听这个端口进行连接,缺乏身份验证功能。

ncat 则弥补了这些缺点,ncat 不是 linux 系统自带的命令,而是 nmap 中的。ncat 中很多参数和 nc 一样,其中可以通过 --alow 参数来指定允许连接的机器,通过 --ssl 进行数据的加密,如下图

image-20210811192213866

nc小巧功能强大,所以被成为瑞士军刀,不足之处是明文传输,也没有相关的身份验证,而 ncat nc 基础上弥补了其不足,nc可以做的ncat也可以做到,所以ncat 被成为 21 世纪的瑞士军刀。

NC文件加密传输

apt-get install mcrypt
A:nc -lp port|mcrypt - -flush -Fbqd -a rijndael-256 -m ecb >文件名
B:mcrypt --flush -Fbq -a rijndael-256 -m ecb <文件名|nc -nv ip port -q 1
复制代码

理解:B将文件加密发送,A接受后先解密再保存到本地,B在1s后退出。 主要是利用mcrypt进行加密

NC复制磁盘

A:nc -lp port |dd of=/dev/sda
B:dd if=/dev/sda | nc -nc ip port -q 1
复制代码

Ifinput filter

Ofoutput filter

B将数据复制到A挂载的硬盘上

推荐阅读

Linux sudo和sudoers详解!

Linux TCP内核参数设置与调优(详细)!

运维一定要知道的Linux RAID详解!

Linux服务管理(详解)!

网络安全人员一定要知道的Metasploit渗透框架!

渗透必备-Metasploit常用模块的用法

服务器硬件指南!

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享