在 Metasploit 中高效使用全局变量

Kali LinuxBeginner
立即练习

引言

在使用 Metasploit Framework 时,你经常需要为不同的模块设置各种选项,例如 LHOST(要监听的本地主机)和 LPORT(本地端口)。为每个模块重复设置这些选项会非常耗时。Metasploit 提供了一项名为全局变量的功能来解决这个问题。通过全局设置一个变量,它将自动应用于使用该选项的任何模块,从而显著提高你的工作流程效率。

在本实验中,你将学习如何在 Metasploit 控制台中设置、使用和取消设置全局变量。

使用 setg 命令设置全局 LHOST

在此步骤中,你将启动 Metasploit 控制台并为 LHOST 设置一个全局变量。setg 命令用于设置一个变量,该变量将在同一 msfconsole 会话中的不同模块之间保持不变。

首先,让我们找到你的实验环境的 IP 地址。此 IP 将用作 LHOST 的值。

hostname -I | awk '{print $1}'

你将看到类似以下的输出(你的 IP 地址会有所不同):

192.168.3.123

记住这个 IP 地址。现在,启动 Metasploit Framework 控制台。-q 标志用于“安静”模式,它会抑制启动横幅。

msfconsole -q

你的提示符将变为 msf6 >。现在,让我们全局设置 LHOST 变量。使用 setg 命令,后跟变量名和你刚刚找到的 IP 地址。

注意:请将 YOUR_IP_ADDRESS 替换为 hostname -I 命令返回的实际 IP 地址。

setg LHOST YOUR_IP_ADDRESS

你应该会看到一条确认消息:

LHOST => YOUR_IP_ADDRESS

此命令现在已将你的 IP 地址作为此会话的全局 LHOST 值存储起来。要验证这一点,你可以使用 show 命令并带上 -g 标志,它会显示所有全局设置的变量。

show -g

输出将列出所有全局变量:

Global
=======

  Name   Value
  ----   -----
  LHOST  YOUR_IP_ADDRESS

选择一个新的 exploit 模块

在此步骤中,你将选择一个 exploit 模块来查看全局变量是如何自动应用的。我们将使用通用的 payload handler exploit/multi/handler 作为我们的第一个示例。此模块通常用于监听传入连接。

msfconsole 提示符下,使用 use 命令选择模块:

use exploit/multi/handler

执行命令后,你的提示符将更改以反映当前选定的模块:

msf6 exploit(multi/handler) >

这表明你现在处于 exploit/multi/handler 模块的上下文中。你设置或显示的任何选项都将特定于此模块,但它也会继承任何相关的全局变量。

观察 LHOST 值已被填充

现在你已经加载了一个模块,让我们检查它的选项,看看我们的全局 LHOST 变量是否已应用。

在此步骤中,你将使用 show options 命令来显示当前模块的配置。

msf6 exploit(multi/handler) > 提示符下,运行以下命令:

show options

你将看到此模块的选项表。查找 LHOST 变量。你会注意到它的值已设置为你在第一步中全局配置的 IP 地址。

Module options (exploit/multi/handler):

   Name  Current Setting  Required  Description
   ----  ---------------  --------  -----------


Payload options (generic/shell_reverse_tcp):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   LHOST  YOUR_IP_ADDRESS  yes       The listen address (an interface may be specified)
   LPORT  4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Wildcard Target

如你所见,你无需为此模块使用 set LHOST 命令,因为全局值已自动继承。这就是使用全局变量的强大之处。

使用 unsetg 命令移除全局变量

在此步骤中,你将学习如何移除一个全局变量。如果你不再需要一个变量全局应用,你可以使用 unsetg 命令。当你想要恢复到为每个模块单独设置选项,或者想要清理你的会话配置时,这会很有用。

在 Metasploit 提示符下,运行 unsetg 命令,后跟你想要移除的变量名称。

unsetg LHOST

此命令将从全局范围中移除 LHOST 变量。你将看到一条确认消息:

Unsetting LHOST...

现在,如果你再次为同一个模块运行 show options,你将看到 LHOST 的值现在是空的。

show options

输出现在将显示 LHOST 没有设置值。

Module options (exploit/multi/handler):

   Name  Current Setting  Required  Description
   ----  ---------------  --------  -----------


Payload options (generic/shell_reverse_tcp):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   LHOST                   yes       The listen address (an interface may be specified)
   LPORT  4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Wildcard Target

如果你想使用它,现在需要使用 set 命令为该模块本地设置 LHOST

讨论何时使用全局选项与局部选项

在最后一步,我们将讨论设置局部变量和全局变量之间的实际区别以及何时使用它们。理解这一点将帮助你在 Metasploit 中更有效地工作。

局部变量(使用 set

  • 作用域: 使用 set 命令设置的变量(例如,set RHOSTS 10.10.10.1)仅对当前加载的模块是 局部的
  • 行为: 当你使用 use 命令切换到新模块时,此局部变量将被丢弃。新模块将为该选项拥有其自己的默认值或空值。
  • 何时使用: 对特定于单个目标或模块的选项使用 set。最常见的例子是 RHOSTS(远程主机/目标 IP),这几乎总是在你使用的每个 exploit 中都会改变。其他例子包括 TARGETURI 或特定的 USERNAME

全局变量(使用 setg

  • 作用域: 使用 setg 命令设置的变量(例如,setg LHOST 192.168.3.123)对整个 msfconsole 会话是 全局的
  • 行为: 该变量及其值将由使用该选项名称的任何模块自动继承。即使你切换模块,它也会保留。
  • 何时使用: 对在整个会话中可能保持不变的选项使用 setgLHOST 是一个完美的例子,因为你的攻击机器的 IP 地址通常不会改变。如果你始终使用相同的监听端口,LPORT 也可以作为全局变量的一个好选择。

命令总结:

  • set <VARIABLE> <VALUE>:仅为当前模块设置变量。
  • setg <VARIABLE> <VALUE>:为会话中的所有模块全局设置变量。
  • unset <VARIABLE>:清除当前模块中的局部变量。
  • unsetg <VARIABLE>:清除全局变量。

通过策略性地使用 set 来处理特定于目标的选项,并使用 setg 来处理会话范围内的选项,你可以最大限度地减少重复配置,并将更多精力集中在 exploit 过程上。

你现在可以退出 Metasploit 控制台。

exit

总结

在本实验中,你学习了如何在 Metasploit Framework 中有效地使用全局变量来简化你的工作流程。你练习了使用 setg 命令来定义全局 LHOST,观察了它如何在不同模块中自动填充,并使用了 unsetg 命令来移除它。你还学习了局部变量(set)和全局变量(setg)之间的关键区别,使你能够在渗透测试过程中做出更有效的配置选择。掌握这个简单的概念可以在复杂场景中节省大量时间并减少错误。