La explotación de la ruta de servicio no cotizada no funciona

1

Encontré un servicio en mi computadora con Windows 10 que usa una ruta de servicio no cotizada. Como la ruta contiene y no se citan, Windows busca el archivo .exe de la siguiente manera:

C:\Program.exe

C:\Program Files (x86)\Donald.exe

C:\Program Files (x86)\Donald Duck\Donald_Duck.exe <original path>

Mi problema actual es que si pongo otro archivo exe en C: \ Archivos de programa (x86) \ Donald.exe que quiero que ejecute el servicio, aparece este mensaje de error:

"A timeout (30000 milliseconds) was reached while waiting for a transaction response from the Donald Duck service".

El servicio que inicia este proceso durante el inicio es NT AUTHORITY \ SYSTEM y tiene acceso completo a ambos archivos. Cuando recibo este error, estoy bastante seguro de que el archivo está en la ruta correcta, pero no sé cómo aprovechar más esta vulnerabilidad, ya que el Visor de eventos no me brinda información más detallada.

¿Podría haber alguna forma de comprobación antes de la ejecución del archivo?

    
pregunta user3316995 16.12.2016 - 11:08
fuente

3 respuestas

1

Su servicio siempre debe regresar al administrador de servicios de Windows (SIM) dentro de un período de tiempo adecuado ... si su archivo .exe es una puerta trasera, obviamente no regresará al administrador de servicios de Windows ... Puede hacer su donald .exe para iniciar otro proceso y regresar de forma segura a Windows ... el otro proceso puede ser su puerta trasera. Verifique el ejemplo de creación de proceso en msn para esto.

    
respondido por el Vinod Pn 14.07.2017 - 07:54
fuente
1

Vinod tiene la información correcta, pero para ampliarla un poco:

El Administrador de control de servicios (SCM, también consulte MSDN ) es el proceso principal de todos los servicios de Windows, y también es un Servidor de llamada a procedimiento remoto (RPC). Cuando se inicia un servicio (y asumiendo que el servicio no está en un binario compartido, generalmente svchost.exe , que es una configuración utilizada principalmente para los servicios escritos por Microsoft), el SCM ejecuta el comando de servicio (en su ejemplo, C:\Program Files (x86)\Donald Duck\Donald_Duck.exe ) y luego espera a que el servicio se vuelva a conectar al SCM a través de RPC e informe que está en el inicio . Si el servicio no reporta al SCM (o informa que no pudo iniciarse por algún motivo, o no puede pasar del estado de inicio al estado de ejecución) dentro de un límite de tiempo (30000 ms o 30 segundos), entonces El SCM eliminará el proceso .

Para fines de explotación, hay tres maneras de solucionar esto.

  • Realice su trabajo dentro de la ventana de 30 segundos (lo ideal es que esté bien dentro de ella, ya que en una máquina con suficiente carga puede gastar una gran cantidad de esa ventana esperando el tiempo de CPU o E / S). Si todo lo que necesita hacer es, por ejemplo, cambiar una clave de registro o acceder a un archivo, o tal vez algo como inyectar una DLL en otro proceso privilegiado, esto generalmente está bien.
  • Inicia un proceso secundario que realiza el trabajo real. El SCM eliminará el proceso que inició, pero los hijos de ese proceso pueden continuar ejecutándose.
  • Informe al SCM que usted es, de hecho, el servicio secuestrado y que está haciendo lo correcto. Esto no es trivial, pero en realidad no es tan difícil si conoce alguna programación en C, o especialmente en Win32 (en particular, no necesita saber nada sobre RPC, ya que todo está envuelto en Win32 ServiceDoThing() APIs). Es posible que deba hacer esto si, por ejemplo, es importante para su escenario de explotación que el servicio parece estar ejecutándose (tal vez a algunos otros componentes les preocupa si el inicio del servicio tuvo éxito, o algún proceso de monitoreo se quejará a alguien si el lanzamiento falla) . La documentación para informar que usted es un programa de servicio se encuentra en MSDN .

Independientemente de todo esto, hay algo más que debes considerar. A menos que alguien haya cambiado los permisos NTFS de sus valores predeterminados, no puede crear ninguno de esos archivos sin que ya sea un Administrador. De manera predeterminada, los usuarios que no son administradores pueden crear (o edite) los directorios pero no los archivos en la raíz de una unidad, y, por supuesto, el directorio Program Files (x86) ya existe, por lo que no puede crear una nueva copia. Tampoco puede cambiarle el nombre para reemplazarlo por otro directorio que controle. Tampoco puede crear, editar o renombrar los contenidos de Program Files o Program Files (x86) en absoluto, sin privilegios de administrador.

Dado que tener privilegios de administrador es equivalente a tener privilegios de SISTEMA (es decir, un administrador puede tomar el control y editar la ACL en cualquier cosa a la que quiera acceder, incluso si normalmente es solo SISTEMA, o simplemente puede iniciar un programa como SISTEMA) Si tiene suficientes privilegios para explotar este error de codificación, ya tiene todos los privilegios que le otorgaría. En otras palabras, aquí no hay Escalation of Privilege . sigue siendo un error de codificación, y podría tener un impacto de seguridad en un sistema mal configurado, pero en ese punto el error realmente se reduce a quien haya cambiado las ACL en la raíz de la unidad o el Program Files (x86) directorio.

    
respondido por el CBHacking 12.12.2017 - 02:36
fuente
0

Es posible que una solución, como - enlace , haya sido implementado?

    
respondido por el atdre 13.02.2017 - 23:53
fuente

Lea otras preguntas en las etiquetas