Skip to content

Latest commit

 

History

History
392 lines (247 loc) · 19.7 KB

File metadata and controls

392 lines (247 loc) · 19.7 KB

第六章:SMB、活动目录、LDAP 和 Kerberos

本章将探讨如何使用 PowerShell 作为全面渗透测试的一部分,测试服务器消息块SMB)、活动目录AD)和轻量级目录访问协议LDAP)。我们将深入研究 PowerShell 在进行彻底的安全评估和识别这些企业网络关键组件潜在漏洞方面的强大能力。

作为 Microsoft 开发的脚本语言,PowerShell 提供了广泛的工具和 cmdlet,安全专家和渗透测试人员可以利用这些工具评估 SMB 共享、用户账户、组成员资格和目录服务的安全状况。通过一系列实际示例,我们将展示如何使用 PowerShell 来枚举、分析并利用这些系统中的弱点。

我们的旅程从 SMB 开始,在这里我们将展示如何使用 PowerShell 来评估 SMB 版本、枚举共享资源以及测试弱密码。接着,我们将转向活动目录,展示 PowerShell 在审核用户账户安全、识别不活跃账户和评估组成员资格方面的能力。

接下来,我们将转向 LDAP,探讨如何利用 PowerShell 来评估 LDAP 权限、测试认证以及监控 LDAP 流量。我们将通过实际示例伴随每一步的探索,帮助您有效地在自己的安全评估中应用这些技术。

到本章结束时,您将全面了解 PowerShell 如何成为渗透测试人员和安全专家工具库中一项无价的工具。它将使您具备识别漏洞、评估安全配置并最终增强 SMB、AD 和 LDAP 实施的韧性的知识和技能。

以下是我们将在本章中涵盖的主要内容:

  • PowerShell 和 SMB

  • PowerShell、AD 和 LDAP

  • PowerShell 和 Kerberos

PowerShell 和 SMB

PowerShell 可有效用于对网络服务进行安全测试,例如 SMB 协议,该协议通常用于 Windows 环境中的文件共享和资源访问。在本节中,我们将探讨如何使用 PowerShell 对 SMB 进行安全测试,识别漏洞,并加强网络防御。

SMB 协议是基于 Windows 网络的关键组成部分,支持文件和打印共享以及各种资源的访问。尽管 SMB 对无缝的数据交换至关重要,但如果配置不当,它也可能带来安全风险。这些风险包括未经授权的访问、数据泄露和勒索病毒攻击的易感性。为了确保网络的强大安全性,进行全面的 SMB 安全测试至关重要。

枚举 SMB 共享

SMB 安全测试的一个基本方面是发现远程服务器上的共享资源。PowerShell 提供了诸如Get-SmbShare的 cmdlet,允许你列举 SMB 共享:

 Get-SmbShare

此命令列出远程服务器上所有可用的共享,提供共享名称、路径和访问权限的信息。安全测试人员可以利用这些信息评估共享权限,识别配置错误,并确定哪些共享可能存在漏洞。

SMB 版本评估

为了识别与过时或不安全的 SMB 版本相关的潜在漏洞,PowerShell 可以用来检查远程系统上运行的 SMB 版本。Get-SmbConnection cmdlet 显示有关 SMB 连接的详细信息,包括方言版本:

 Get-SmbConnection

此命令提供有关正在使用的 SMB 版本的见解,帮助你评估你的网络是否运行安全且最新的 SMB 版本。

测试弱密码

弱密码或默认密码可能在 SMB 环境中构成重大安全风险。可以使用 PowerShell 执行密码审计,尝试使用常见的或已知的弱密码列表连接到 SMB 共享。以下脚本自动化此过程:

 $computers = Get-Content computers.txt
$passwords = Get-Content passwords.txt
foreach ($computer in $computers) {
    foreach ($password in $passwords) {
        $credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList ("$computer\Administrator", (ConvertTo-SecureString -String $password -AsPlainText -Force))
        try {
            Invoke-Command -ComputerName $computer -Credential $credential -ScriptBlock { Get-SmbShare }
        } catch {
            Write-Host "Failed to connect to $computer with password $password"
        }
    }
}

该脚本尝试使用一组密码连接列表中的每台计算机,并记录任何失败的尝试,帮助你识别弱密码或未更改的默认凭据。

SMB 漏洞扫描

PowerShell 可以通过第三方模块或脚本执行 SMB 漏洞扫描。像Invoke-SMBScanner这样的工具可以集成到 PowerShell 中,以识别目标系统上的 SMB 漏洞:

 Invoke-SMBScanner -Target 192.168.107.100-192.168.107.150

这样的工具会扫描常见的 SMB 漏洞,包括已知的漏洞,如 EternalBlue 或 SMBGhost,并提供潜在风险的见解。

评估 SMB 签名和加密

SMB 签名和加密对确保数据完整性和机密性至关重要。PowerShell 允许你检查远程服务器是否启用了 SMB 签名和加密。可以使用Get-SmbClientConfiguration cmdlet 获取 SMB 客户端配置,包括签名和加密设置:

 Get-SmbClientConfiguration

检查RequireSecuritySignatureEncryptData属性,以验证这些安全功能是否已启用。配置良好的 SMB 服务器应启用签名和加密功能,以增强网络安全性。

活动 SMB 会话的枚举

PowerShell 可以用来列举活动的 SMB 会话,提供关于谁当前访问共享资源的见解。Get-SmbSession cmdlet 允许你获取有关本地或远程系统上的 SMB 会话的信息:

 Get-SmbSession

通过分析会话数据,安全专家可以识别未经授权或可疑的连接。

检查访客访问

访客访问 SMB 共享可能会带来重大安全风险。PowerShell 可以用于验证远程系统是否允许访客访问。Get-SmbShare cmdlet 可以定制化检查访客访问:

 Get-SmbShare | Where-Object { $_.IsGuestOnly -eq $true }

该命令列出了只允许访客访问的共享,突出显示了潜在的安全问题。

评估共享权限

PowerShell 使安全测试人员能够评估共享权限和访问控制列表ACLs)以进行 SMB 共享的安全测试。可以使用 Get-Acl cmdlet 来检索和分析特定共享的 ACL:

 $shareName = "ShareName"
(Get-SmbShare -Name $shareName).Path | Get-Acl

该命令显示共享的安全描述符,帮助你识别权限过于宽松或配置错误的共享权限。

SMB 会话监控

PowerShell 可用于设置对 SMB 会话的持续监控。通过定期运行命令来检索活动会话,你可以在一段时间内发现任何意外或可疑的连接。考虑使用计划任务来自动化会话监控:

 $interval = 60
while ($true) {
    Get-SmbSession
    Start-Sleep -Seconds $interval
}

该脚本持续获取 SMB 会话信息,并可以作为后台任务运行,用于监控任何未经授权或可疑的访问。

自动化勒索病毒检测

PowerShell 可用于检测文件中可疑或迅速变化的内容,这可能表明勒索病毒活动。可以编写脚本来监控文件属性,如文件大小和修改时间,并在发生意外变化时发出警报:

 $filePath = "C:\Test\ImportantFile.txt"
$initialSize = (Get-Item $filePath).Length
while ($true) {
    $currentSize = (Get-Item $filePath).Length
    if ($currentSize -ne $initialSize) {
        Write-Host "File size changed. Possible ransomware activity detected."     }
    Start-Sleep -Seconds 300
}

该脚本监控特定文件的大小,并在文件大小发生意外变化时发出警报,这可能表明勒索病毒活动。

PowerShell 提供了一整套强大的工具和技术,供安全测试人员对 SMB 实现进行安全测试。通过利用这些能力,安全专家可以主动识别漏洞、评估共享权限、监控 SMB 活动并加强网络防御。进行这些测试时,必须获得适当授权,并遵守相关法律法规。定期审计 SMB 配置并积极监控可疑活动,有助于组织有效地保护其网络服务,并减轻 SMB 潜在威胁。

PowerShell、AD 和 LDAP

PowerShell 可以用于对 AD 和 LDAP 服务进行全面的安全测试。在本指南中,我们将深入探讨如何使用 PowerShell 对 AD 和 LDAP 进行安全测试,识别漏洞并加强目录服务的安全性。

AD 是 Microsoft 在 Windows 环境中用于管理用户、组、计算机和其他网络资源的目录服务。LDAP 是一种协议,用于访问和管理目录服务,包括 AD。AD 和 LDAP 都是许多企业网络的关键组成部分,保护它们对于维持安全的环境至关重要。

在深入了解安全测试的具体内容之前,我们简要了解一下 AD 和 LDAP 的核心概念。

  • AD:AD 是 Microsoft 为 Windows 域网络开发的目录服务。它存储和管理关于网络资源的信息,包括用户账户、组和计算机。AD 在 Windows 环境中的身份验证、授权和资源管理中起着核心作用。

  • LDAP:LDAP 是一种用于访问和管理目录服务的协议,包括 AD。它提供了一种标准化的方式来查询、更新和管理目录信息。LDAP 通常用于各种网络服务和应用程序中,用以访问目录数据。

枚举活动目录对象

AD 包含关于用户、组和计算机的大量信息。PowerShell 允许你枚举这些对象,从而深入了解你的 AD 结构。Get-ADObject cmdlet 是一个强大的工具,例如,要列出特定组织单位OU)中的所有用户对象:

 Get-ADObject -Filter {ObjectClass -eq 'user'} -SearchBase 'OU=Employees,DC=snowcapcyber,DC=com'

此命令检索指定 OU 中的所有用户对象,提供诸如用户名和区分名等详细信息。枚举是理解你的 AD 环境的第一步,它有助于识别那些不应被访问或不存在的对象。

评估用户账户安全性

用户账户是攻击者的主要目标。PowerShell 可用于评估用户账户的安全性,检查常见问题,如密码复杂性和过期设置。例如,可以使用以下命令列出密码永不过期的用户:

 Get-ADUser -Filter {PasswordNeverExpires -eq $true}

此命令识别那些设置为永不过期的用户账户,这可能是一个安全风险。安全测试通常涉及评估密码策略、账户锁定设置和其他与安全相关的属性。

识别非活动用户账户

非活动用户账户可能会被攻击者利用。PowerShell 可以通过检查最后一次登录日期来帮助识别和禁用或删除非活动账户。以下是查找 90 天内未登录的用户的示例:

 $90DaysAgo = (Get-Date).AddDays(-90)
Get-ADUser -Filter {LastLogonDate -lt $90DaysAgo} -Properties LastLogonDate

此脚本识别那些在指定期间内未登录的用户,允许你采取适当的措施,如禁用或删除这些账户。

审计组成员资格

组成员资格可以授予用户访问敏感资源的权限。PowerShell 可以审计组成员资格,以确保它们符合最小权限原则。例如,要列出特定组的成员,可以使用以下命令:

 Get-ADGroupMember -Identity 'ITAdmins'

此命令检索所有ITAdmins组的成员,帮助你验证只有授权的人员才有管理员权限。

识别特权账户

特权账户,如管理员账户,需要额外的审查。PowerShell 可以帮助识别和审查特权账户。要列出所有具有管理角色的用户,请使用以下命令:

 Get-ADGroupMember -Identity 'Administrators'

此命令提供了管理员组中所有用户的列表,允许你审查他们的角色和权限。

审计密码策略

密码策略对于安全至关重要。可以使用 PowerShell 检查域中的密码策略设置。例如,要检索域的密码策略,请使用以下命令:

 Get-ADDefaultDomainPasswordPolicy

此命令提供有关密码复杂度要求、长度和其他策略设置的详细信息。

评估 LDAP 权限

也可以使用 PowerShell 评估 LDAP 权限。您可以查询 AD 以确定哪些用户或组具有特定的 LDAP 权限。例如,要查找具有CN=Users容器读取权限的用户,可以使用以下命令:

 Get-ACL 'AD:\CN=Users,DC=snowcapcyber,DC=com' | Select-Object -ExpandProperty Access | Where-Object { $_.ActiveDirectoryRights -like 'ReadProperty' }

此命令识别具有读取CN=Users容器权限的用户或组。您可以根据此方法检查其他权限。

测试 LDAP 身份验证

可以使用 PowerShell 通过尝试使用不同的凭据绑定到 LDAP 目录来测试 LDAP 身份验证。这有助于识别弱或未保护的账户。以下是一个示例:

 $ldapServer = 'ldap://ldap.snowcapcyber.com'
$username = 'ajcblyth'
$password = 'MYpassword123'
try {
    $ldap = ADSI
    $ldap.Username = $username
    $ldap.Password = $password
    $ldap.AuthenticationType = [System.DirectoryServices.AuthenticationTypes]::Secure
    $ldap.Bind()
    Write-Host "LDAP auth success for $username"
} catch {
    Write-Host "LDAP auth failed for $username"
}

此脚本尝试使用指定的凭据绑定到 LDAP 目录,并报告身份验证是否成功。

识别不安全的 LDAP 端口

攻击者通常会攻击不安全的 LDAP 端口。可以使用 PowerShell 检查 LDAP 服务是否暴露在不安全的端口上。您可以使用Test-NetConnection cmdlet 来测试 LDAP 连接:

 Test-NetConnection -ComputerName ldap.snowcapcyber.com -Port 389

此命令检查 LDAP 服务是否运行在默认的不安全端口(389)上。如果是,请考虑使用 TLS 或 SSL 加密 LDAP。

监控 LDAP 流量

可以使用 PowerShell 监控 LDAP 流量中的不寻常或可疑活动。像Get-WinEvent cmdlet 这样的工具可以帮助您分析包含 LDAP 相关事件的事件日志:

 Get-WinEvent -LogName 'Security' | Where-Object { $_.Id -eq 2887 }

此命令检索包含 LDAP 通道绑定失败的安全事件日志,这可能表示未授权的访问尝试。

使用 LDAPS 测试 LDAP

基于 SSL 的 LDAPLDAPS)是安全访问目录服务的方式。可以使用 PowerShell 验证 LDAPS 是否已正确配置。以下是一个示例:

 Test-NetConnection -ComputerName ldap.snowcapcyber.com -Port 636

此命令检查 LDAPS 服务是否运行在端口636上。应使用 LDAPS 加密 LDAP 流量,以增强安全性。

使用 PowerShell 脚本识别异常

可以创建自定义的 PowerShell 脚本来识别 AD 和 LDAP 中的异常情况和潜在安全漏洞。例如,您可以创建一个脚本,定期检查不寻常的登录模式,如多次失败的登录尝试,并在检测到时发送警报:

 $threshold = 3
$logPath = "C:\Logs\FailedLogins.log"
$failedLogins = Get-WinEvent -LogName 'Security' | Where-Object { $_.Id -eq 4625 }
if ($failedLogins.Count -ge $threshold) {
    $failedLogins | Out-File -Append $logPath
    Send-MailMessage -To 'admin@snowcapcyber.com' -From 'alerts@snowcapcyber.com' -Subject 'Security Alert: Multiple Failed Logins Detected' -Body "Multiple failed login attempts detected. Check $logPath for details." }

此脚本监控安全事件日志中的多个失败的登录尝试,并在超过阈值时发送警报。

PowerShell 是进行 AD 和 LDAP 服务安全测试的宝贵工具。通过使用这些 PowerShell 命令和脚本,安全专业人员可以主动识别漏洞,评估用户账户安全,审计组成员身份,并监控目录服务活动。然而,必须在适当授权的情况下并遵守相关法律法规进行这些测试。定期审计和确保 AD 和 LDAP 配置的安全可以帮助组织加强目录服务的安全性,并防御潜在的威胁。

PowerShell 和 Kerberos

PowerShell 可以有效地用于对 Kerberos 这一广泛使用的身份验证协议进行广泛的安全测试。在本节中,我们将探讨如何使用 PowerShell 评估 Kerberos 实现的安全性,识别漏洞,并增强系统防御。

Kerberos 是一种网络身份验证协议,利用对称密钥加密对网络中的用户和服务进行身份验证。它在许多基于 Windows 的环境中应用,且以其强大的安全机制而闻名。然而,像任何技术一样,Kerberos 也可能存在被恶意行为者利用的漏洞。可以通过 PowerShell 主动发现这些漏洞。

Kerberos 票证枚举

PowerShell 提供了如 Get-KerberosTicket 这样的 cmdlet,允许安全测试人员枚举 Kerberos 票证,揭示有关活动会话和潜在攻击向量的有价值信息,例如:

 Get-KerberosTicket | Format-Table -Property UserName, ServiceName, StartTime, EndTime

此命令列出了活动的 Kerberos 票证,提供有关哪些用户和服务已通过身份验证以及这些票证何时到期的信息。

服务主体名称(SPN)枚举

PowerShell 可用于发现与服务关联的 SPN,这对于 Kerberos 身份验证至关重要。攻击者可能会针对配置错误的 SPN 进行攻击,从而获得未授权访问。使用 Get-ADServiceAccount 来列出服务账户及其 SPN:

 Get-ADServiceAccount -Filter *

这有助于识别任何不必要或配置错误的 SPN。

使用 Mimikatz 提取凭证

Mimikatz 是一个强大的后期利用工具,可以集成到 PowerShell 中,从内存中提取凭证。通过加载Mimikatz模块,您可以访问其功能来提取凭证,包括 Kerberos 票证:

 Invoke-Mimikatz -Command '"ajcblyth::tickets"'

这可能暴露存储的 Kerberos 票证和明文密码,突显出保护敏感凭证的重要性。

检测黄金票证攻击

PowerShell 可用于检测黄金票证攻击,这是一种复杂的威胁方式,攻击者伪造 Kerberos 票证授予票证TGT)。像 PowerShellMafia/PowerSploit 这样的工具提供了检查 TGT 完整性的模块,帮助识别潜在的安全妥协:

 Import-Module PowerSploit
Invoke-Kerberoast

此命令检查可以离线破解的易受攻击的 TGT,帮助识别潜在的攻击。

Kerberos 票证更新分析

Kerberos 票证通常在用户会话期间更新。PowerShell 脚本可以监控票证的续期并突出显示异常。例如,你可以使用New-TimeSpan cmdlet 来计算票证发放和续期之间的持续时间:

 $ticket = Get-KerberosTicket
$renewalDuration = (New-TimeSpan -Start $ticket.StartTime -End $ticket.EndTime).TotalMinutes
if ($renewalDuration -gt 1440) {
    Write-Host "Abnormally renewal detected." }

这有助于检测可能表明未经授权访问的长时间会话。

分析事件日志

PowerShell 可以解析 Windows 事件日志,以识别可疑的与 Kerberos 相关的事件。可以使用Get-WinEvent cmdlet 来筛选和分析安全事件日志中的特定 Kerberos 事件:

 Get-WinEvent -LogName Security | Where-Object { $_.Id -eq 4769 }

这使得安全专家能够识别失败的身份验证尝试或其他异常活动。

密码喷洒攻击

PowerShell 可以用于对 Kerberos 进行密码喷洒攻击。像Invoke-SprayKerberos这样的工具可以用来测试用户密码的强度并识别弱密码:

 Invoke-SprayKerberos -UserList users.txt -Password Summer2023 -Domain snowcapcyber.com

这有助于突出显示可能被利用的弱密码用户。

PowerShell 是一款多功能且不可或缺的工具,用于对 Kerberos 实现进行安全测试。通过利用其功能,安全专家可以主动识别漏洞、检测潜在威胁,并加强网络基础设施的安全性。然而,重要的是要注意,安全测试应始终在适当授权下进行,并遵守相关法律法规。定期审计 Kerberos 配置并监控异常,对于保护敏感的身份验证机制和防止未经授权的访问至关重要。

总结

本章探讨了 PowerShell 在 SMB、AD 和 LDAP 渗透测试中的多方面应用。通过一系列实践示例,我们揭示了 PowerShell 如何作为不可或缺的工具,在这些企业网络的关键组件中枚举、分析和利用漏洞。

在下一章中,我们将学习如何将 PowerShell 用于 SQL 数据库的漏洞评估。特别关注 Microsoft SQL、PostgreSQL 和 MySQL。