Windows 基础

Winodws Shell

Windows 主机默认情况下有两种Shell可供选择

Which one is the right one to use?

答案很简单,就是能为您提供当时所需的功能的那个。请比较一下 cmd 和 PowerShell,了解它们的功能,以及何时最好选择其中一个。

CMD shell 是内置于 Windows 的原始 MS-DOS shell。它用于主机上的基本交互和 IT 操作。通过批处理文件可以实现一些简单的自动化,但仅此而已。

Powershell 的出现旨在扩展 cmd 的功能。PowerShell 可以理解 CMD 中使用的本地 MS-DOS 命令和基于 .NET 的全新命令集。新的自给自足模块也可以通过 cmdletPowerShell 中实现。

CMD 提示符处理文本输入和输出,而 Powershell 则利用 .NET 对象处理所有输入和输出。另一个重要的考虑因素是,CMD 不会记录会话期间使用的命令而 PowerShell 则会。因此,在隐蔽性方面,使用 cmd 执行命令在主机上留下的痕迹较少。其他潜在问题,如执行策略和用户账户控制(UAC),也会抑制你在主机上执行命令和脚本的能力。这些因素会影响 PowerShell,但不会影响 cmd。另一个需要考虑的大问题是主机的版本。如果您使用的是 Windows XP 或更老的主机(是的,仍然有可能......),PowerShell 将不存在,因此您唯一的选择就是 cmd。PowerShell 直到 Windows 7 才诞生。所以,总结一下吧:

使用CMD时:

  • 您所在的主机可能不包含 PowerShell。

  • 当您只需要与主机进行简单的交互/访问时。

  • 当您计划使用简单的批处理文件、网络命令或 MS-DOS 本机工具时。

  • 当您认为执行策略可能会影响您在主机上运行脚本或其他操作的能力时。

使用PowerShell时:

  • 您计划使用 cmdlet 或其他自定义脚本。

  • 当您希望与 .NET 对象交互而不是文本输出时。

  • 当隐秘性不太重要时。

  • 如果您计划与基于云的服务和主机进行交互。

  • 如果您的脚本设置并使用别名。

Bats, DLLs, & MSI Files

在为 Windows 主机创建有效负载时,我们有很多选项可供选择。DLL、批处理文件、MSI 包甚至 PowerShell 脚本都是最常用的方法。每种文件类型可以为我们完成不同的事情,但它们的共同点是它们可以在主机上执行。尝试牢记有效负载的传递机制,因为这可以确定您使用的有效负载类型。

要考虑的有效负载(Payload)类型

  • DLL动态链接库 (DLL) 是 Microsoft 操作系统中使用的库文件,用于提供可由许多不同程序同时使用的共享代码和数据。这些文件是模块化的,使我们能够拥有更加动态且更易于更新的应用程序。作为渗透测试人员,注入恶意 DLL 或劫持主机上的易受攻击的库可以将我们的权限提升到系统权限和/或绕过用户帐户控制。

  • 批处理批处理文件是基于文本的 DOS 脚本,系统管理员利用它通过命令行解释器完成多项任务。这些文件以扩展名结尾.bat。我们可以使用批处理文件以自动方式在主机上运行命令。例如,我们可以使用批处理文件打开主机上的端口,或者连接回我们的攻击盒。完成后,它就可以执行基本的枚举步骤并通过开放端口向我们反馈信息。

  • VBS VBScript 是一种基于 Microsoft Visual Basic 的轻量级脚本语言。它通常用作网络服务器中的客户端脚本语言以启用动态网页。VBS 已过时并被大多数现代 Web 浏览器禁用,但在网络钓鱼和其他攻击的背景下仍然存在,这些攻击旨在让用户执行操作,例如在 Excel 文档中加载宏或单击单元格以启动 Windows 脚本引擎执行一段代码。

  • MSI .MSI文件充当 Windows Installer 的安装数据库。尝试安装新应用程序时,安装程​​序将查找 .msi 文件以了解所需的所有组件以及如何找到它们。我们可以通过将有效负载制作为 .msi 文件来使用 Windows Installer。一旦我们将其放在主机上,我们就可以运行msiexec来执行我们的文件,这将为我们提供进一步的访问权限,例如提升的反向 shell。

  • Powershell Powershell 既是一种 shell 环境,也是一种脚本语言。它充当 Microsoft 操作系统中的现代 shell 环境。作为一种脚本语言,它是一种基于 .NET 公共语言运行时的动态语言,与其 shell 组件一样,将输入和输出视为 .NET 对象。在获取 shell 并在主机上执行以及渗透测试过程中的许多其他步骤时,PowerShell 可以为我们提供大量选项。

适用于 Linux 的 WSL 和 PowerShell

Windows Subsystem for Linux Windows 主机引入的一个强大的新工具,可为主机提供一个内置的虚拟 Linux 环境。我们之所以提到这一点,是因为瞬息万变的操作系统环境很可能允许以新颖的方式访问主机。在编写本模块时,有几个恶意软件示例正试图利用 Python3Linux 二进制程序通过 WSLPayload下载并安装到 Windows 主机上。与这篇文章中的情况一样,攻击者也在使用 WindowsLinux 本机的内置 Python 库以及 PowerShell 在主机上执行其他操作。还有一点需要注意的是,目前 Windows 防火墙和 Windows Defender 无法解析任何向 WSL 实例或从 WSL 实例执行的网络请求或函数,这使其成为主机上的一个盲点。

目前,通过 PowerShell Core也可以发现同样的问题,PowerShell Core 可以安装在 Linux 操作系统上,并继承了许多正常的 PowerShell 功能。这两个概念异常狡猾,因为迄今为止,人们对攻击载体或防范方法知之甚少。但是,针对这些功能的攻击已经可以避开 AVEDR 检测机制。这些概念有点高深。

最后更新于

这有帮助吗?