Escalado de privilegios utilizando servicios mal configurados

En numerosas ocasiones, algunos de los programas que instalamos en el ordenador requieren un servicio que se ejecute en segundo plano, ya sea de forma contínua o una única ejecución al iniciar el sistema. Estos servicios acostumbran a utilizarse para tareas de actualización, sincronización y demás utilidades que requieran un chequeo periódico. La mayoria de estos servicios se ejecutan con el usuario de sistema local (system) y ejecutan un binario que se encarga de la tarea a realizar.

Ayer veíamos con la técnica de Hot Potato como podíamos aprovechar las conexiones que intentan hacer estos servicios para llamar a ejecutables con sus privilegios, redireccionando las peticiones HTTP a SMB.

Sin embargo, hay una forma mucho más sencilla que es sustituyendo el ejecutable del servicio por otro que, por ejemplo, nos cree un usuario administrador. Evidentemente esto es posible sólo debido a una mala configuración, porque para hacerlo necesitamos que estén mal asignados los permisos. Sin embargo, aunque parezca mentira, en muchísimos servidores me he encontrado servicios que usan ejecutables con acceso total para todos o para el grupo de usuarios (sobretodo con herramientas propias o desarrollos a medida).

El escenario es el siguiente:


-    Tenemos acceso a una maquina con un usuario local, sin permisos de administrador.



-  Detectamos un binario que es llamado por un servicio y que tiene permisos totales para el grupo Usuarios (para el PoC, hemos modificado los permisos del Updater.exe de Skype):



Una vez en este punto, debemos crear un pequeño exe que se encargará de crear una cuenta de administrador y lo sustituiremos por el original, para que al reiniciar el servicio o la máquina se ejecute nuestro código:



La segunda línea se encargará de añadir el nuevo usuario al grupo administradores. Evidentemente en la vida real tendremos que poner una contraseña que cumpla los requisitos normales de complejidad y un nombre de usuario no existente para evitar duplicidades.


Como podemos observar, no podemos ejecutar el .exe sin permisos de administrador, pero el servicio se encargará de ejecturarlo por nosotros.
Reiniciamos la maquina y comprobamos los usuarios:




Y ya podemos acceder con el nuevo usuario con permisos de administrador.

Contribución gracias a Victor Campos 

2 comentarios :

  1. Muy interesante e intructivo, que con un Windows mal gestionado y un programa en c de 2 linias podamos tumbar el sistema! Te doy manita arriba.Sigue así.

    ResponderEliminar
  2. Tambien con dlls en la carpeta del servicio modificadas se puede llegar a escalar privilegios. Me recuerda al ficher passwd en linux hace muchisimos años y su filtración.

    ResponderEliminar