Red de conocimiento informático - Material del sitio web - Cómo obtener un shell en la interfaz de inicio de sesión

Cómo obtener un shell en la interfaz de inicio de sesión

Una forma sencilla de activar un shell de derechos del sistema en la pantalla de inicio de sesión de Windows es reemplazar el binario llamado por el programa winlogon.exe. La siguiente es una lista parcial de estos archivos binarios:

sethc.exe

utilman.exe

osk.exe

magnify.exe

Así que hicimos un análisis estático rápido del binario winlogon.exe para intentar descubrir cómo se inician estos programas. Encontramos una referencia a la función CreateProcess de la API de Windows:

Luego está el submarino. Desmontaje de la función Kernel32.dll _ createprocessw _ 308, busque el método de llamada del archivo binario sethc.exe. Este subprograma "Sticky Keys" se puede llamar presionando la tecla MAYÚS 5 veces:

La cadena de formato sethc.exe% LD parece interesante. Se movió a 0x100032471 de r8 y lo buscamos en el volcado del proceso winlogon.

Análisis de volcado de memoria

Buscamos esta cadena de formato al analizar el volcado de núcleo del proceso winlogon en ejecución. Al analizar Windows Server 2016, descubrimos esta cadena en el primer rango de 128 MB del volcado del proceso:

Crear un archivo de firma PCILeech

Crear una firma PCILeech es una tarea bastante sencilla. la documentación se puede encontrar en el archivo Signature_info.txt del proyecto PCILeech.

El propósito de la firma del parche es encontrar la cadena Unicode sethc.exe % LD y reemplazarla con el shell de comandos de Windows cmd.exe. Esta técnica es similar a reemplazar el archivo ejecutable sethc.exe con cmd.exe.

Sin embargo, este método cambiará la integridad del sistema y no es adecuado para entornos cifrados. Por lo tanto, nuestra firma de parche se ve así:

64002 e 06500780000.

* significa buscar en cada página de memoria.

730065007400680063[Snip]002 y 006500780065 es la cadena Unicode que se buscará después de sethc.exe en sethc.exe% LD.

"0 y -" significa que no tenemos que buscar otro código de bloque.

R0 es el desplazamiento relativo en el que se aplica el parche.

3006d 0064002 e 00650[SNIP]007800650000000 es un parche que usa cmd.exe en lugar de sethc.exe.

Modificación de memoria

Con el archivo de firma, solo necesitamos ejecutar el subcomando patch de pcileech:

Sin embargo, usando nuestro hardware (placa de desarrollo USB3380), Sólo tenemos acceso a una cantidad limitada de memoria (unos 3500 MB). En otras palabras, el parche sólo funcionará si la cadena que se busca se encuentra en esta área de almacenamiento y tiene permisos de lectura/escritura.