使用 Hydra 攻击 IPv6 目标

HydraHydraBeginner
立即练习

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

简介

在这个实验中,你将学习如何使用 Hydra 攻击 IPv6 目标。本实验重点在于配置一个具有 IPv6 地址的服务器,然后使用 Hydra 攻击其 SSH 服务。

实验首先使用 ip 命令在 eth0 接口上为服务器配置 IPv6 地址 2001:db8:1::1/64。然后,你将启用该接口并验证配置。最后,你将使用带有 -6 选项的 Hydra 来攻击 IPv6 SSH 服务,并验证攻击结果。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL hydra(("Hydra")) -.-> hydra/HydraGroup(["Hydra"]) hydra/HydraGroup -.-> hydra/single_username("Single Username Attack") hydra/HydraGroup -.-> hydra/single_password("Single Password Attack") hydra/HydraGroup -.-> hydra/target_ip("Target IP Specification") hydra/HydraGroup -.-> hydra/target_service("Target Service Selection") hydra/HydraGroup -.-> hydra/ssh_attack("SSH Brute Force") hydra/HydraGroup -.-> hydra/success_detection("Login Success Detection") subgraph Lab Skills hydra/single_username -.-> lab-550759{{"使用 Hydra 攻击 IPv6 目标"}} hydra/single_password -.-> lab-550759{{"使用 Hydra 攻击 IPv6 目标"}} hydra/target_ip -.-> lab-550759{{"使用 Hydra 攻击 IPv6 目标"}} hydra/target_service -.-> lab-550759{{"使用 Hydra 攻击 IPv6 目标"}} hydra/ssh_attack -.-> lab-550759{{"使用 Hydra 攻击 IPv6 目标"}} hydra/success_detection -.-> lab-550759{{"使用 Hydra 攻击 IPv6 目标"}} end

配置具有 IPv6 地址的服务器

在这一步中,我们将为服务器配置 IPv6 地址。这是启用 IPv6 通信并为后续攻击 IPv6 SSH 服务做准备的关键步骤。

首先,让我们了解一下 IPv6 地址的基础知识。IPv6 地址是 128 位的地址,通常用十六进制表示。一个典型的 IPv6 地址如下所示:2001:0db8:85a3:0000:0000:8a2e:0370:7334

为了简化配置,我们将为服务器使用一个简单的 IPv6 地址。我们将地址 2001:db8:1::1/64 分配给 eth0 接口。

注意: eth0 接口是 Linux 系统中常见的网络接口名称。如果你的系统使用不同的接口名称(例如 ens33),请在以下命令中用正确的接口名称替换 eth0。你可以使用 ip addr 命令来查看你的网络接口。

现在,让我们来配置 IPv6 地址。我们将使用 ip 命令,它是管理网络接口的强大工具。

  1. 将 IPv6 地址添加到 eth0 接口:

    在 LabEx 虚拟机中打开一个终端。执行以下命令:

    sudo ip addr add 2001:db8:1::1/64 dev eth0

    此命令将 IPv6 地址 2001:db8:1::1/64 添加到 eth0 接口。/64 指定了网络前缀长度,它决定了 IPv6 子网的大小。

  2. 启用 eth0 接口:

    sudo ip link set dev eth0 up

    此命令将 eth0 接口启用,使其能够发送和接收网络流量。

  3. 验证 IPv6 地址配置:

    要验证 IPv6 地址是否已正确配置,请再次使用 ip addr 命令:

    ip addr show eth0

    输出应在 inet6 部分包含 IPv6 地址 2001:db8:1::1/64。你应该会看到类似于以下内容的输出:

    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:xx:xx:xx brd ff:ff:ff:ff:ff:ff
        inet 192.168.xx.xx/24 brd 192.168.xx.255 scope global dynamic eth0
           valid_lft 85781sec preferred_lft 85781sec
        inet6 2001:db8:1::1/64 scope global
           valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:fexx:xxxx/64 scope link
           valid_lft forever preferred_lft forever

    inet6 2001:db8:1::1/64 scope global 确认 IPv6 地址已成功配置。

  4. 添加默认 IPv6 网关(可选,但建议用于实现完整的 IPv6 连接):

    如果你希望你的服务器能够与其他 IPv6 网络通信,则需要配置一个默认 IPv6 网关。此步骤假设你的网络中有一个提供 IPv6 连接的路由器。请将 2001:db8:1::254 替换为你路由器的实际 IPv6 地址。

    sudo ip -6 route add default via 2001:db8:1::254

    要验证默认 IPv6 网关,请使用 ip -6 route 命令:

    ip -6 route

    输出应包含类似于以下的行:

    default via 2001:db8:1::254 dev eth0 metric 1024 pref medium

    重要提示: 上述配置在重启后不会保留。要使 IPv6 地址配置持久化,通常需要修改网络配置文件(例如,基于 Debian 的系统上的 /etc/network/interfaces 或基于 Red Hat 的系统上的 /etc/sysconfig/network-scripts/ifcfg-eth0)。但是,由于 LabEx 虚拟机环境的限制(具体来说,无法使用 systemctl 以及容器的临时性质),我们将跳过使配置持久化的步骤。就本实验而言,IPv6 地址仅在当前会话中配置。

使用 -6 选项优先使用 IPv6

在这一步中,我们将通过理解并使用网络工具的 -6 选项,为攻击 IPv6 SSH 服务做准备。-6 选项常用于在与网络服务交互时指定优先使用 IPv6。这很重要,因为在默认情况下,如果同时存在 IPv4 和 IPv6 地址,某些工具可能会优先使用 IPv4。

为确保我们针对的是上一步中配置的 IPv6 地址,我们将使用带有 -6 选项的 ping 命令。这将验证我们是否可以通过其 IPv6 地址访问服务器。

  1. ping IPv6 地址:

    在 LabEx 虚拟机中打开一个终端。执行以下命令:

    ping -6 2001:db8:1::1

    此命令会向 IPv6 地址 2001:db8:1::1 发送 ICMP Echo 请求数据包。如果可以通过 IPv6 访问该服务器,你应该会看到来自服务器的回复。输出应类似于以下内容:

    PING 2001:db8:1::1(2001:db8:1::1) 56 data bytes
    64 bytes from 2001:db8:1::1: icmp_seq=1 ttl=64 time=0.020 ms
    64 bytes from 2001:db8:1::1: icmp_seq=2 ttl=64 time=0.018 ms
    64 bytes from 2001:db8:1::1: icmp_seq=3 ttl=64 time=0.019 ms
    ...

    如果你没有看到任何回复,请仔细检查上一步中的 IPv6 地址配置,并确保 eth0 接口已启用。此外,还要验证是否存在阻止 ICMPv6 流量的防火墙规则。

  2. 理解 -6 选项:

    -6 选项告诉 ping 命令使用 IPv6。许多其他网络工具,如 sshcurlwget 也支持 -6 选项。使用此选项可确保工具尝试使用 IPv6 连接到目标主机。

    在下一个步骤中,我们将使用 Hydra 攻击 SSH 服务。我们将在 Hydra 中使用 -6 选项,专门针对 SSH 服务器的 IPv6 地址进行攻击。这可以确保我们测试的是 IPv6 SSH 配置的安全性。

  3. 使用 -6 选项测试 SSH 连接(可选):

    尽管我们将在下一个步骤中攻击 SSH 服务,但使用 -6 标志测试基本的 SSH 连接是一个好习惯,以确保 SSH 在 IPv6 地址上监听。假设目标上运行着一个 SSH 服务器,并且有一个名为 testuser、密码为 password 的用户账户,你可以使用以下命令测试连接:

    ssh -6 testuser@2001:db8:1::1

    你可能会被提示接受 SSH 密钥指纹。输入 yes 并按回车键。然后,在提示时输入密码 password。如果成功,你将登录到 SSH 服务器。输入 exit 以断开连接。

    注意: 此步骤是可选的,因为我们将在下一个步骤中攻击 SSH 服务,这实际上也会测试 SSH 连接。不过,在发起攻击之前,这是验证 SSH 是否在 IPv6 地址上监听的好方法。如果你没有运行 SSH 服务器或没有测试用户账户,可以跳过此步骤。

攻击 IPv6 SSH 服务

在这一步中,我们将使用 Hydra 对之前配置的 IPv6 地址上运行的 SSH 服务进行暴力破解攻击。Hydra 是一款强大的密码破解工具,支持包括 SSH 在内的多种协议。

在开始之前,让我们创建一个简单的密码列表。这个列表将包含 Hydra 尝试用于 SSH 服务认证的密码。

  1. 创建密码列表:

    在 LabEx 虚拟机中打开一个终端。使用 nano 编辑器在 ~/project 目录下创建一个名为 passwords.txt 的文件:

    nano ~/project/passwords.txt

    将以下密码添加到文件中,每行一个密码:

    password
    123456
    qwerty
    admin
    secret

    保存文件并退出 nano(按 Ctrl+X,然后按 Y,再按回车键)。

  2. 运行 Hydra 攻击 IPv6 SSH 服务:

    现在,我们将使用 Hydra 攻击 SSH 服务。我们将使用 -6 选项指定要针对 IPv6 地址进行攻击。我们还将指定要攻击的用户名(例如 root)、我们创建的密码列表(passwords.txt)以及 SSH 服务器的 IPv6 地址(2001:db8:1::1)。

    执行以下命令:

    hydra -6 -l root -P ~/project/passwords.txt ssh://2001:db8:1::1

    让我们来分解一下这个命令:

    • hydra:运行 Hydra 工具的命令。
    • -6:指定使用 IPv6。
    • -l root:指定要攻击的用户名。在这种情况下,我们攻击的是 root 用户。
    • -P ~/project/passwords.txt:指定要使用的密码列表。在这种情况下,我们使用的是在 ~/project 目录下创建的 passwords.txt 文件。
    • ssh://2001:db8:1::1:指定目标 SSH 服务。ssh:// 前缀表示我们正在攻击 SSH 服务,2001:db8:1::1 是服务器的 IPv6 地址。

    Hydra 现在将开始使用 passwords.txt 文件中的密码对 SSH 服务进行尝试。如果 Hydra 找到有效的密码,它将显示凭证。输出应类似于以下内容:

    Hydra v9.1 (c) 2020 by van Hauser/THC - Use freely but only for legal purposes.
    
    Hydra starting at 2023-10-27 10:00:00
    [DATA] 1 task, 5 hosts, 5 tries per host
    [DATA] attacking ssh://2001:db8:1::1:22
    [22][ssh] host: 2001:db8:1::1   login: root   password: password
    Hydra finished.

    此输出表明 Hydra 成功破解了 root 用户的密码,密码为 password

    重要提示: 在未经授权的情况下对系统进行密码暴力破解是非法且不道德的。本实验仅用于教育目的,你应该只在自己拥有或获得明确测试许可的系统上使用这些技术。

验证 IPv6 攻击结果

在这一步中,我们将验证 Hydra 对 IPv6 SSH 服务攻击的结果。我们会检查 Hydra 是否成功破解了密码,如果破解成功,将尝试使用破解得到的凭证登录 SSH 服务。

  1. 查看 Hydra 输出:

    仔细查看上一步中 Hydra 命令的输出。查找表明密码破解成功的行。输出应类似于以下内容:

    [22][ssh] host: 2001:db8:1::1   login: root   password: password

    如果你看到这一行,意味着 Hydra 成功破解了 root 用户的密码,密码为 password。如果 Hydra 没有找到有效的密码,你需要调整密码列表,或者排查 SSH 服务配置中可能存在的问题。

  2. 尝试使用破解的凭证登录 SSH 服务:

    现在我们已经有了破解的凭证,将使用 ssh 命令尝试登录 SSH 服务。我们将使用 -6 选项指定要连接到 IPv6 地址。

    执行以下命令,将 password 替换为 Hydra 破解出的实际密码:

    ssh -6 root@2001:db8:1::1

    当提示输入密码时,输入破解出的密码(例如 password)。如果登录成功,你将登录到 SSH 服务器。

    The authenticity of host '[2001:db8:1::1]:22 ([2001:db8:1::1]:22)' can't be established.
    ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
    Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
    Warning: Permanently added '[2001:db8:1::1]:22' (ECDSA) to the list of known hosts.
    root@2001:db8:1::1's password:
    Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-91-generic x86_64)
    
     * Documentation:  https://help.ubuntu.com
     * Management:     https://landscape.canonical.com
     * Support:        https://ubuntu.com/advantage
    
    ...

    如果你能够成功登录,这证实了 Hydra 攻击成功,并且 SSH 服务容易受到密码破解攻击。

  3. 安全建议:

    本实验展示了使用强密码和实施安全最佳实践来保护 SSH 服务的重要性。以下是一些建议:

    • 使用强密码: 使用至少 12 个字符长的密码,并包含大写字母、小写字母、数字和符号的组合。
    • 禁用密码认证: 考虑禁用密码认证,改用 SSH 密钥。SSH 密钥比密码更安全,因为它们更难破解。
    • 实施速率限制: 使用 fail2ban 等工具对 SSH 登录尝试实施速率限制。这将防止攻击者在短时间内尝试过多密码。
    • 保持软件更新: 确保你的 SSH 服务器软件已更新到最新的安全补丁。

总结

在本实验中,我们为服务器配置了 IPv6 地址,这是启用 IPv6 通信的关键步骤。这需要你了解 IPv6 地址的基础知识,并使用 ip 命令将地址 2001:db8:1::1/64 分配给 eth0 接口。

然后,我们启用了该接口,并使用 ip addr show eth0 验证配置,确保 IPv6 地址已正确分配。此设置为后续对 IPv6 SSH 服务的攻击做好了准备。