Netcat——你需要知道的一切

2021-07-27 23:58:02

Netcat 是一种跨网络连接读写数据的工具,使用 TCP 或 UDP 协议。 Netcat 被称为 TCP/IP/网络瑞士军刀。在本文中,我们将研究 netcat 的不同应用以及它如何在渗透测试人员、安全专家、系统管理员等的日常活动中发挥作用。想在实验室环境中测试这些命令,而无需在您自己的机器上安装它们,请使用下面的链接查看我在 CYBERRANGES 上的场景。 netcat 有多种变体,但大多数核心功能和命令行选项都非常相似。 Netcat 最初是为了在 linux 上使用而编写的,这些变体是基于 linux 的,但您仍然可以在 Windows 上使用 netcat。 Netcat Traditional 是最初的实现,由一个叫霍比特的人编写。这通常不会预先安装,除非您使用像 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 版本中不可用。这是被视为安全漏洞的功能。当我们进入 shells 部分时,会详细介绍这一点。 GNU Netcat 是对原始 netcat 的重写,以使其具有新功能并完全符合 GNU 的可移植性。这意味着它可以很容易地安装在几乎所有的 linux 发行版上。这个版本不能通过包管理器获得。它似乎也不再维护,因为它的最新版本是 2004 年的 0.7.1。要获取它,您可以从项目网站 http://netcat.sourceforge.net 下载源文件,然后编译它。您需要 gcc 和 make 才能成功安装。二进制文件将安装到 /usr/local/bin/netcat。下面是要使用的命令。 Netcat OpenBSD 版本是对原始 netcat 的重写,包括对 IPv6、代理和 unix 套接字的支持。除了这些增强功能之外,它还被编译以删除一个被认为是应用程序巨大安全漏洞的功能。这个版本是最常见的,你会发现它默认安装在 ubuntu 发行版(桌面和服务器)中。对于其他 linux 发行版,您可能必须自己安装。要安装它,您可以运行 sudo apt install netcat-openbsd。安装 netcat 后,它会符号链接到 nc 和 netcat,以便于调用命令。我们可以通过检查nc和netcat的realpath看到这一点,它们指向同一个nc.openbsd二进制文件。这可能会有所不同,具体取决于您在系统中安装的变体。

Ncat 是对 nmap 项目 netcat 的重新实现。此版本功能更加丰富和改进。我个人每天都在使用它。安装 nmap 时,您也会安装 ncat,这适用于 windows 和 linux。然后,您可以运行 ncat -h 以查看可用的命令行选项。您也可以从源代码编译安装它,可以从 nmap 网站 https://nmap.org/ncat/ 下载。现在我们了解了不同的变体,让我们看看您将使用 netcat 的最常见功能。大多数语法在不同的变体中是通用的。我们将关注两个最新的变体,netcat-openbsd 和 ncat,因为它们是最近维护和更新的。在服务器模式下,您可以使用 netcat 来侦听连接。这样做是在系统上打开一个端口(tcp 或 udp)。默认情况下,netcat 侦听 tcp。以下命令将侦听端口 8080 上的所有接口。

要指定要侦听的接口,例如 localhost,您可以对 openbsd 变体使用以下语法。有时根据情况在所有接口上收听可能不是最好的主意。在客户端模式下,您可以使用 netcat 连接到系统上的开放端口。这对于手动检查 servicebanner 或仅检查端口是否打开是有益的。对于在端口 8080 上连接到 IP 127.0.0.1 时的 tcp 连接,语法如下。需要熟悉反向 shell 和绑定 shell 的概念,因为在本节中没有详细讨论,因为我们只看 netcat 如何促进它们。这在渗透测试人员中非常流行,并且使用 netcat 使其变得容易。我将使用服务器/客户端模型进行解释。使用的命令仅适用于 ncat、netcat 传统和 gnu netcat。 Netcat OpenBSD 被编译为没有这个特性,因为它被认为是一个安全风险。对于反向 shell,我们在服务器模式下使用 netcat 来侦听连接,然后从客户端提供 shell。这将允许服务器上的会话在收到 shell 后在客户端上运行命令。从渗透测试的角度来看,服务器是攻击者机器,客户端是受害者机器。

需要注意的是,仅仅因为openbsd版本没有这个-e选项,并不意味着安装时就不可能得到reverseshell。还有一些方法可以用来实现反向shell。对于绑定 shell,服务器模式下的 netcat 侦听连接并将 shell 进程提供给任何连接的客户端。然后以客户端模式运行的 Netcat 可以连接到服务器并获得对服务器的 shell 访问并运行命令。从渗透测试的角度来看,服务器将是受害者机器,而客户端是攻击者机器。由于能够写入原始连接,我们可以通过连接将文件从一个系统传输到另一个系统而不会失真。为此,我们并不真正关心哪个是服务器,哪个是客户端,因为传输可以朝任一方向进行,但我们需要先运行侦听器。要通过端口 8080 将 server1 上的文件传输到 server2,可以按如下方式完成: 此功能未在 ncat 中实现,但在其他变体中可用。根据他们的网站,他们省略了这个功能,因为他们有一个更好的工具,那就是 nmap。因此,如果你找到一个带有 netcat-openbsd 的系统并且可以安装 nmap,你就不能运行如下的基本端口扫描。

以下面的场景为例,server1 不能直接连接到 server3,而只能通过 server2。要将流量从 server1 重定向到在 server3 (192.168.125.40) 端口 8080 上运行的 Web 应用程序,我们可以在 server2 上执行以下 ncat 命令。现在,您可以通过访问端口 8000 上的 server2 来访问 server3 上的 Web 应用程序。 从功能中可以看出安全风险,因为连接上没有加密,因为 netcat 将以最原始的形式写入连接,因此任何嗅探网络的人都可以捕获在外壳和文件传输的情况下,您的所有流量都未加密。对于绑定外壳,没有身份验证,因此任何连接到绑定外壳正在侦听的端口的人都可以在机器上运行命令。使用 ncat 时,其中一些问题得到解决,因为它允许使用 ssl 以及访问控制。对于反向 shell,我们将使用相同的命令语法,但在命令中添加 --ssl,绑定 shell 也是如此。在服务器模式下使用 netcat 时,--allow 选项可以指定允许连接到端口的主机或网络范围,这对于绑定 shell 情况很有用。同样,您可以使用 –deny 拒绝来自特定主机或网络范围的访问。

Netcat 是用于网络相关活动的非常棒的工具,我发现它在 CTF 期间非常有用,有时在渗透测试期间使用它。还有其他几个我们没有研究过的选项,可以随意探索它们,但我认为我们已经涵盖的内容应该足以满足您的大多数用例。我没有解释特定的命令行选项 - 像 -v -n 因为帮助菜单清楚地解释了它们。挑战你,玩 windows 的 netcat(特别是 ncat,因为 ssl 功能)。这是一个很好的实用程序,可以帮助您获得反向外壳并且不会被标记为病毒。