Linux Ncat 无用小功能

简介: Linux Ncat 无用小功能

此前文章已经介绍了什么是Ncat、如果安装Ncat以及使用该工具探测TCP/UDP端口是否正常,如果你还没有看过该文章,这里推荐先查看该文章以便做到无缝连接。


Linux Ncat 探测tcp/udp端口:juejin.cn/post/724111…

本篇文章将继续介绍Ncat小工具,大概会以如下段落进行讲解:


  • 使用Ncat创建聊天室。
  • 为聊天室增加SSL认证。
  • 使用Ncat传输文件。
  • 使用Ncat劫持shell



使用Ncat创建聊天室


还记得刚参加工作的时候,经常和小伙伴通过对tty进行重定向来向对方发送消息,吐槽工作中的不快,转眼一瞧,以前和兄弟们并肩作战日子已经一去不复返了,本段落将重拾乐趣,使用Ncat创建一个聊天室,打造一个属于运维的小乐趣。


Ncat中,使用--chat可以开启一个聊天服务器,它必须和-l配合使用

nc --chat -vl 0.0.0.0 8080

上述命令开启一个聊天室,端口号为8080,监听网卡为全部网卡,且显示详细的日志。


如上命令执行后,日志会显示如下:

image.png


如上命令则证明服务器聊天室服务器开启完毕。

而后仅需在客户端连接该聊天室即可,例如:

nc -v 127.0.0.1 8080

如上,连接成功后,会为该链接分配一个用户Id,例如:

image.png

当多个客户端都连接上该服务器时候,就可以进行聊天了,例如:

image.png


由此可见,聊天室就已经建立成功了,是不是很有意思呢?快和小伙伴一起去试试吧。



为聊天室增加SSL通道


默认情况下,Ncat是通过明文进行数据发送的,这点可以通过抓包来分析,比如,使用tcpdump抓取下本地回环地址8080端口的数据包,命令为:

tcpdump -i lo -S -s 0 -A


其中上述命令,-i指定监听的网卡,这里为lo本地会换地址。-S表示将报文交互信息完整打印出来,不进行折叠,-s 0表示不进行数据分段,-A表示以ascii的形式显示数据。


这里可以先暂时关闭一个client窗口,用以启动tcpdump监听该端口。


这里来展示一下,tcpdump是如何抓取Ncat数据包的:

image.png



在最后,我们输入hello world时候,我们确实可以在tcpdump窗口看见改字符串,如:

image.png

由此可以证明,直接使用Ncat进行数据发送,走的是明文传输。如果此时恰好某位领导正在使用tcpdump监视你们的记录,那就太糟糕了。


介于此,Ncat为我们提供了ssl支持,仅需在启动服务 和 连接服务器 的时候指定--ssl即可。例如,我们启动8080,并且为此使用ssl仅需传输,可以使用如下命令来开启服务器:


nc --chat -vl 0.0.0.0 8080 --ssl

如上命令在启动服务的基础上,使用--ssl来让该链接使用ssl证书。


该命令执行成功后,会输出如下结果:

image.png

上述结果是Ncat自动生成的2048位的RSA秘钥。

作为客户端,也必须指定--ssl才能正常连接服务器,例如:

nc -v 127.0.0.1 8080 --ssl


执行结果如下:

image.png



上述命令会先进行证书秘钥交换、对称密码校验,校验成功后才能顺利连接上服务器。

如此这般,该通信通道便使用的是ssl加密的了,可以在此使用tcpdump来抓下包:

image.png

在进行ssl加密传输通道后,使用tcpdump抓包,就只能抓到加密后的消息,例如:

image.png


使用Ncat传输文件


在目前的网络环境中,我们有非常多的传输工具,例如:FTPSCPSYNC等等。所以,小弟在实际工作中,也从来没有使用Ncat传输过文件,这里仅作为演示使用。


这里准备了一个main.py文件,我们将此文件传输到客户端上。


我们首先需要确保当前路径下存在该文件,可以使用ls -l来打印一下文件信息:


ls -l main.py

image.png


而后我们将需要发送的文件的机器,使用Ncat开启一个服务器。

nc -v -l --send-only 0.0.0.0 8080 < main.py

上述命令表示开启一个tcp8080,当客户端连接上qw来后,就将main.py内容发送给客户端。使用--send-only的意思是只用发送数据,忽略接收,且以EOF结束。

执行后,结果如下:

image.png


作为接收方,我们连接到该Ncat服务器后,将数据包中的数据重定向本地即可,例如:

nc -v 127.0.0.1 8080 > new_python_files

执行结果为:

image.png

上述结果可见文件已经同步过来了。

如上操作使用的比较少,还有一种操作使用的比较多,就是利用压缩软件,进行发送多个文件,这个命令非常有用,且涉及篇幅较长,所以先留一个坑,后续做补充。



使用Ncat劫持shell


Ncat作为运维最常用的软件之一,其功能强大,有利也有弊,本段落将介绍一下Ncat如何略过ssh认证,将终端给映射出去的。


这里做个小实验,将/bin/bash命令通过udp22端口给映射出去,而后再使用Ncat客户端连接该udp端口,实现略过linux认证拿到权限。


映射命令:

nc -e "/bin/bash" -u -l 0.0.0.0 22 -k -v

如上命令,将对所有网卡开启一个udp22端口,当有客户端连接上来后,会执行/bin/bash,该命令是centos的默认shell


连接服务器:

作为客户端,像使用其他nc一样,连接该服务器udp端口为22套接字就好。

nc -uv 127.0.0.1 22

连接上服务器后,就可以操作任何事情了,例如:

image.png


如上,我们将/bin/bash给劫持出去后,通过客户端直接可以连接上来,无需身份认证,我们分别执行了查询当前服务器22端口使用情况以及打印一下进程信息,只取前10个。


非常可怕对吧,那么作为普通程序员,如何避免此类情况发生呢,其实只要牢记运维三板斧就可以了,分别是 设置高强度密码 、最小化进程权限、最小化防火墙 就可以了。


所谓的三板斧,到底是什么意思呢:

  • 高强度密码是为了避免服务被爆破。
  • 最小化进程权限是为了避免黑客通过开源软件(例如redis)漏洞进入服务器后大肆破坏,所以可以新建一个用户,专门用以启动该服务,及时被攻击了,这样损失也是最少的。
  • 最小化防火墙则是避免不必要的端口开出去以便给黑客提供可乘之机,例如,ssh服务仅需开放tcp22就可以了,没必要将tcp/udp都打开。



总结


该篇文章介绍了Ncat这些小功能,简单介绍了使用Ncat创建聊天室并且为其创建SSL通道,使用Ncat传输文件,最后介绍了使用Ncat劫持shell终端。Ncat是非常好的工具,运维人员熟练使用它,知道其利弊,才可以让手上的工作得心应手。


相关文章
|
6月前
|
域名解析 Linux Apache
Linux Apache服务详解——虚拟网站主机功能实战
Linux Apache服务详解——虚拟网站主机功能实战
150 5
|
6月前
|
存储 监控 Shell
【Shell 命令集合 磁盘管理 】Linux 关闭磁盘配额功能 quotaoff命令使用教程
【Shell 命令集合 磁盘管理 】Linux 关闭磁盘配额功能 quotaoff命令使用教程
82 1
|
6月前
|
存储 Shell Linux
【Shell 命令集合 磁盘管理 】Linux 启用指定文件系统上的磁盘配额功能 quotaon 命令使用教程
【Shell 命令集合 磁盘管理 】Linux 启用指定文件系统上的磁盘配额功能 quotaon 命令使用教程
76 1
|
4月前
|
存储 网络协议 Ubuntu
【Linux开发实战指南】基于UDP协议的即时聊天室:快速构建登陆、聊天与退出功能
UDP 是一种无连接的、不可靠的传输层协议,位于IP协议之上。它提供了最基本的数据传输服务,不保证数据包的顺序、可靠到达或无重复。与TCP(传输控制协议)相比,UDP具有较低的传输延迟,因为省去了建立连接和确认接收等过程,适用于对实时性要求较高、但能容忍一定数据丢失的场景,如在线视频、语音通话、DNS查询等。 链表 链表是一种动态数据结构,用于存储一系列元素(节点),每个节点包含数据字段和指向下一个节点的引用(指针)。链表分为单向链表、双向链表和循环链表等类型。与数组相比,链表在插入和删除操作上更为高效,因为它不需要移动元素,只需修改节点间的指针即可。但访问链表中的元素不如数组直接,通常需要从
267 2
|
6月前
|
存储 运维 关系型数据库
2024年最全ceph的功能组件和架构概述(2),Linux运维工程面试问题
2024年最全ceph的功能组件和架构概述(2),Linux运维工程面试问题
2024年最全ceph的功能组件和架构概述(2),Linux运维工程面试问题
|
4月前
|
Linux 数据可视化 开发者
|
2月前
|
存储 缓存 Linux
Linux文件系统的功能规划
【9月更文挑战第12天】本文通过类比图书馆,形象地解释了文件系统的组织形式和管理方法。首先,文件系统需按块存储文件,并设有索引区方便查找。其次,热点文件应有缓存层提高效率,文件需分类存储以便管理。最后,Linux内核需记录文件使用情况,通过文件描述符区分不同文件,确保文件操作准确无误。
|
3月前
|
Linux C++ Docker
【Azure 应用服务】App Service for Linux 中实现 WebSocket 功能 (Python SocketIO)
【Azure 应用服务】App Service for Linux 中实现 WebSocket 功能 (Python SocketIO)
|
3月前
|
网络协议 安全 Linux
在Linux中,内核主要功能及作用是什么?
在Linux中,内核主要功能及作用是什么?
|
4月前
|
SQL 自然语言处理 网络协议
【Linux开发实战指南】基于TCP、进程数据结构与SQL数据库:构建在线云词典系统(含注册、登录、查询、历史记录管理功能及源码分享)
TCP(Transmission Control Protocol)连接是互联网上最常用的一种面向连接、可靠的、基于字节流的传输层通信协议。建立TCP连接需要经过著名的“三次握手”过程: 1. SYN(同步序列编号):客户端发送一个SYN包给服务器,并进入SYN_SEND状态,等待服务器确认。 2. SYN-ACK:服务器收到SYN包后,回应一个SYN-ACK(SYN+ACKnowledgment)包,告诉客户端其接收到了请求,并同意建立连接,此时服务器进入SYN_RECV状态。 3. ACK(确认字符):客户端收到服务器的SYN-ACK包后,发送一个ACK包给服务器,确认收到了服务器的确
193 1