Writable Sys Path +Dll Hijacking Privesc

Aprende a hackear AWS desde cero hasta convertirte en un experto con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Introducción

Si descubres que puedes escribir en una carpeta de Ruta del Sistema (ten en cuenta que esto no funcionará si puedes escribir en una carpeta de Ruta de Usuario), es posible que puedas escalar privilegios en el sistema.

Para lograrlo, puedes abusar de un Dll Hijacking donde vas a secuestrar una biblioteca que está siendo cargada por un servicio o proceso con más privilegios que los tuyos, y debido a que ese servicio está cargando un Dll que probablemente ni siquiera existe en todo el sistema, intentará cargarlo desde la Ruta del Sistema donde puedes escribir.

Para obtener más información sobre qué es el Dll Hijacking consulta:

pageDll Hijacking

Privilegio de Escalada con Dll Hijacking

Encontrar un Dll faltante

Lo primero que necesitas es identificar un proceso en ejecución con más privilegios que los tuyos que está intentando cargar un Dll desde la Ruta del Sistema en la que puedes escribir.

El problema en estos casos es que probablemente esos procesos ya están en ejecución. Para encontrar qué Dlls faltan en los servicios, necesitas lanzar procmon lo antes posible (antes de que se carguen los procesos). Entonces, para encontrar los .dlls faltantes haz lo siguiente:

  • Crea la carpeta C:\privesc_hijacking y agrega la ruta C:\privesc_hijacking a la variable de entorno de Ruta del Sistema. Puedes hacer esto manualmente o con PS:

# Set the folder path to create and check events for
$folderPath = "C:\privesc_hijacking"

# Create the folder if it does not exist
if (!(Test-Path $folderPath -PathType Container)) {
New-Item -ItemType Directory -Path $folderPath | Out-Null
}

# Set the folder path in the System environment variable PATH
$envPath = [Environment]::GetEnvironmentVariable("PATH", "Machine")
if ($envPath -notlike "*$folderPath*") {
$newPath = "$envPath;$folderPath"
[Environment]::SetEnvironmentVariable("PATH", $newPath, "Machine")
}
  • Inicia procmon y ve a Options --> Enable boot logging y presiona OK en el aviso.

  • Luego, reinicia. Cuando la computadora se reinicie, procmon comenzará a grabar eventos lo antes posible.

  • Una vez que Windows haya iniciado ejecuta procmon nuevamente, te dirá que ha estado ejecutándose y te preguntará si deseas almacenar los eventos en un archivo. Di y almacena los eventos en un archivo.

  • Después de que se haya generado el archivo, cierra la ventana abierta de procmon y abre el archivo de eventos.

  • Agrega estos filtros y encontrarás todas las Dlls que algún proceso intentó cargar desde la carpeta de Ruta del Sistema escribible:

Dlls Perdidas

Al ejecutar esto en una máquina virtual (vmware) de Windows 11 gratuita, obtuve estos resultados:

En este caso, los .exe son inútiles, así que ignóralos, las Dlls perdidas eran de:

ServicioDllLínea de comandos

Programador de tareas (Schedule)

WptsExtensions.dll

C:\Windows\system32\svchost.exe -k netsvcs -p -s Schedule

Servicio de directivas de diagnóstico (DPS)

Unknown.DLL

C:\Windows\System32\svchost.exe -k LocalServiceNoNetwork -p -s DPS

???

SharedRes.dll

C:\Windows\system32\svchost.exe -k UnistackSvcGroup

Después de encontrar esto, encontré esta interesante publicación en el blog que también explica cómo abuso de WptsExtensions.dll para escalada de privilegios. Lo que haremos ahora.

Explotación

Entonces, para escalar privilegios vamos a secuestrar la biblioteca WptsExtensions.dll. Teniendo la ruta y el nombre solo necesitamos generar la dll maliciosa.

Puedes intentar usar cualquiera de estos ejemplos. Podrías ejecutar payloads como: obtener un shell reverso, agregar un usuario, ejecutar un beacon...

Ten en cuenta que no todos los servicios se ejecutan con NT AUTHORITY\SYSTEM, algunos también se ejecutan con NT AUTHORITY\LOCAL SERVICE que tiene menos privilegios y no podrás crear un nuevo usuario abusando de sus permisos. Sin embargo, ese usuario tiene el privilegio seImpersonate, por lo que puedes usar la suite potato para escalar privilegios. Por lo tanto, en este caso, un shell reverso es una mejor opción que intentar crear un usuario.

En el momento de escribir esto, el servicio Programador de tareas se ejecuta con Nt AUTHORITY\SYSTEM.

Habiendo generado la Dll maliciosa (en mi caso usé un shell reverso x64 y obtuve un shell de vuelta pero Defender lo eliminó porque era de msfvenom), guárdalo en la Ruta del Sistema escribible con el nombre WptsExtensions.dll y reinicia la computadora (o reinicia el servicio o haz lo que sea necesario para volver a ejecutar el servicio/programa afectado).

Cuando se reinicie el servicio, la dll debería cargarse y ejecutarse (puedes reutilizar el truco de procmon para verificar si la biblioteca se cargó como se esperaba).

Última actualización