Control Panel Item Code Execution en un pentesting a Windows
Muchas son las técnicas que pueden ser utilizadas en un pentesting, en un proyecto de Ethical Hacking o en un ejercicio de Red Team. Durante estos días en casa, en los ratos libres, me da por seguir mirando más y más técnicas. Aunque la que hoy comento, la conocía, me parece una de esos "tricks" que siempre suponen interés para un pentester. La idea de hoy es enseñar una técnica, catalogada en la matriz ATT&CK del MITRE con el identificador 1196, ya sabéis que andamos con proyectos de estos por este artículo donde hablé de ello.
Los ítems del panel de control son opciones que permiten mostrar unas configuraciones concretas del panel de control. Los ítem del panel de control son registrados como ficheros EXE o ficheros CPL. Un fichero CPL no es más que un fichero DLL renombrado, el cual exporta una función CPIApplet.
¿Cómo se puede ejecutar un ítem del panel de control? Fácil, desde una línea de comandos, a través de otro código llamándolo vía API o, sencillamente, con doble clic en el fichero. Cada ítem de panel de control, normalmente, incluye menús gráficos. Hoy no es el caso. Sea como sea, aquí ya se puede ver por dónde van los tiros. Si un fichero CPL no es más que una DLL encubierta, se puede hacer uso de ello para ejecutar código y poder evitar algunas protecciones.
En primer lugar, estuve revisando el proyecto Atomic Red Team, del cual tengo pendiente hablar, ya que siempre me ha parecido interesante. Este proyecto tiene un apartado que son los “atomics”, en este apartado se pueden encontrar implementaciones de diferentes técnicas identificadas en la matriz de MITRE ATT&CK. En el caso que cuento, identifiqué la T1196 como la técnica de ejecución basada en los ítem de panel de control.
Se puede ver en la imagen cómo ese “atomic” tiene una carpeta bin y una carpeta src. En el caso de la carpeta bin nos encontramos el CPL resultante, es decir, ya compilado. En este caso, el CPL no hará lo que queramos, simplemente es una DLL que ejecuta una calculadora.
Por otro lado, nos proporcionan el código CPP por si queremos modificarlo y generar nuestra DLL. El código es muy sencillo como se puede ver en la imagen siguiente. El ejemplo es sencillo para poder trabajarlo.
Ahora toca poner en práctica la teoría. Utilizando el CPL que hemos descargado de Atomic Red Team se puede ejecutar de una manera sencilla. Ejecutamos la instrucción siguiente:
El problema que podemos encontrar en estas pruebas es que el fichero con extensión CPL sea detectado como un software malicioso en un Ethical Hacking. Pero esto no es nada nuevo en tu vida como pentester, y para eso ya tenemos otros tricsks de Hacking Windows.
Usar Meterpreter para ejecutarlo como Ítem del panel de control
Ahora todos pensamos en ejecutar un código más válido o más potente. Lo primero es poder generar una DLL con msfvenom, se puede hacer así de fácil. Se puede coger el fichero CPP anterior y meterle ahí también la ejecución de una shellcode o lo que a nosotros mejor nos venga. Además, habrá que jugar con la detección como siempre.
En este caso, quería jugar con algo que un módulo de Metasploit nos proporciona. El módulo es CVE_2017_8464_lnk_lpe. Este módulo sube a disco del sistema Windows una DLL con el payload seleccionado y la deja en C:\Users\[nombre usuario]. Como os he comentado, podíamos haberlo hecho de mil maneras, pero quería sacar este módulo de escalada de privilegios en el artículo.
Se puede ver que genera un LNK al fichero CPL. Tras la ejecución del módulo borra el contenido de la carpeta. Si paramos este proceso, podremos quedarnos con el CPL, que la DLL con el código del payload, y con el LNK ya creados. Más adelante mostraré cómo generar un LNK con Powershell. Ahora vamos a reutilizar lo que Metasploit nos ha generado, pero debe quedar claro que podemos generar la DLL de mil maneras, como se ha mencionado con anterioridad. Cada uno puede buscar su forma o vía.
En la carpeta mencionada anteriormente podemos encontrar la DLL también generada. Pero como os comenté, la DLL basta con renombrarla por CPL. Es lo mismo. Ahora nos toca mostrar la ejecución, por ejemplo, en una Powershell, para ampliar nuestro repertorio de habilidades gracias al Pentesting con PowerShell.
En un contexto normal, se puede hacer uso de un LNK que apunte a una ruta compartida donde se encuentre realmente el código a ejecutar. Esto haría que, en una intrusión real, esto pudiera o pudiese funcionar. Para el ejemplo, nos vale con ejecutar la instrucción siguiente:
El resultado es el que se puede ver en la siguiente imagen, donde se obtiene una sesión de un Meterpreter a través del módulo exploit/multi/handler. Ahora ya se tiene el control total de la máquina.
¿Cómo creamos un enlace directo o LNK a un fichero en Powershell? A continuación, se puede ver las instrucciones que debemos ejecutar para lograrlo. Como se puede ver no hay mucho que explicar. Se hace a través de un objeto COM.
Los usos de esta técnica son variados. Sin duda, una técnica muy interesante la ejecutar código en un pentest, en un Ethical Hacking o en un ejercicio de Red Team. Sea como sea, una técnica válida para la mochila del pentester.
Figura 1: Control Panel Item Code Execution en un pentesting a Windows |
Los ítems del panel de control son opciones que permiten mostrar unas configuraciones concretas del panel de control. Los ítem del panel de control son registrados como ficheros EXE o ficheros CPL. Un fichero CPL no es más que un fichero DLL renombrado, el cual exporta una función CPIApplet.
Figura 2: Ethical Hacking de Pablo González |
¿Cómo se puede ejecutar un ítem del panel de control? Fácil, desde una línea de comandos, a través de otro código llamándolo vía API o, sencillamente, con doble clic en el fichero. Cada ítem de panel de control, normalmente, incluye menús gráficos. Hoy no es el caso. Sea como sea, aquí ya se puede ver por dónde van los tiros. Si un fichero CPL no es más que una DLL encubierta, se puede hacer uso de ello para ejecutar código y poder evitar algunas protecciones.
Figura 3: Control Panel Items en MITRE ATT&CK |
En primer lugar, estuve revisando el proyecto Atomic Red Team, del cual tengo pendiente hablar, ya que siempre me ha parecido interesante. Este proyecto tiene un apartado que son los “atomics”, en este apartado se pueden encontrar implementaciones de diferentes técnicas identificadas en la matriz de MITRE ATT&CK. En el caso que cuento, identifiqué la T1196 como la técnica de ejecución basada en los ítem de panel de control.
Se puede ver en la imagen cómo ese “atomic” tiene una carpeta bin y una carpeta src. En el caso de la carpeta bin nos encontramos el CPL resultante, es decir, ya compilado. En este caso, el CPL no hará lo que queramos, simplemente es una DLL que ejecuta una calculadora.
Figura 4: Atomics T1196 |
Por otro lado, nos proporcionan el código CPP por si queremos modificarlo y generar nuestra DLL. El código es muy sencillo como se puede ver en la imagen siguiente. El ejemplo es sencillo para poder trabajarlo.
Figura 5: Código CPP |
Ahora toca poner en práctica la teoría. Utilizando el CPL que hemos descargado de Atomic Red Team se puede ejecutar de una manera sencilla. Ejecutamos la instrucción siguiente:
control.exe [nombre o ruta del CPL]Como se puede ver en la siguiente imagen de la Figura 6, el resultado es, como esperábamos, la ejecución de una calculadora. Esto ocurriría exactamente igual en sistemas Microsoft Windows 10 o similares.
Figura 6: Calculadora en ejecución. |
El problema que podemos encontrar en estas pruebas es que el fichero con extensión CPL sea detectado como un software malicioso en un Ethical Hacking. Pero esto no es nada nuevo en tu vida como pentester, y para eso ya tenemos otros tricsks de Hacking Windows.
Usar Meterpreter para ejecutarlo como Ítem del panel de control
Ahora todos pensamos en ejecutar un código más válido o más potente. Lo primero es poder generar una DLL con msfvenom, se puede hacer así de fácil. Se puede coger el fichero CPP anterior y meterle ahí también la ejecución de una shellcode o lo que a nosotros mejor nos venga. Además, habrá que jugar con la detección como siempre.
Figura 7: Hacking con Metasploit: Adavanced Pentesting de Pablo González |
En este caso, quería jugar con algo que un módulo de Metasploit nos proporciona. El módulo es CVE_2017_8464_lnk_lpe. Este módulo sube a disco del sistema Windows una DLL con el payload seleccionado y la deja en C:\Users\[nombre usuario]. Como os he comentado, podíamos haberlo hecho de mil maneras, pero quería sacar este módulo de escalada de privilegios en el artículo.
Figura 8: Sesión con Meterpreter en nuestro Kali Linux |
Se puede ver que genera un LNK al fichero CPL. Tras la ejecución del módulo borra el contenido de la carpeta. Si paramos este proceso, podremos quedarnos con el CPL, que la DLL con el código del payload, y con el LNK ya creados. Más adelante mostraré cómo generar un LNK con Powershell. Ahora vamos a reutilizar lo que Metasploit nos ha generado, pero debe quedar claro que podemos generar la DLL de mil maneras, como se ha mencionado con anterioridad. Cada uno puede buscar su forma o vía.
Figura 9: Lista de DLLS |
En la carpeta mencionada anteriormente podemos encontrar la DLL también generada. Pero como os comenté, la DLL basta con renombrarla por CPL. Es lo mismo. Ahora nos toca mostrar la ejecución, por ejemplo, en una Powershell, para ampliar nuestro repertorio de habilidades gracias al Pentesting con PowerShell.
Figura 10: Pentesting con PowerShell 2ª Edición |
En un contexto normal, se puede hacer uso de un LNK que apunte a una ruta compartida donde se encuentre realmente el código a ejecutar. Esto haría que, en una intrusión real, esto pudiera o pudiese funcionar. Para el ejemplo, nos vale con ejecutar la instrucción siguiente:
Figura 11: control.exe [ruta CPL] |
El resultado es el que se puede ver en la siguiente imagen, donde se obtiene una sesión de un Meterpreter a través del módulo exploit/multi/handler. Ahora ya se tiene el control total de la máquina.
Figura 12: Sesión obtenida en Meterpreter |
¿Cómo creamos un enlace directo o LNK a un fichero en Powershell? A continuación, se puede ver las instrucciones que debemos ejecutar para lograrlo. Como se puede ver no hay mucho que explicar. Se hace a través de un objeto COM.
Figura 13: creación de un LNK en PowerShell |
Los usos de esta técnica son variados. Sin duda, una técnica muy interesante la ejecutar código en un pentest, en un Ethical Hacking o en un ejercicio de Red Team. Sea como sea, una técnica válida para la mochila del pentester.
Saludos,
Autor: Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Hacking con Metasploit: Advanced Pentesting" "Hacking Windows", "Ethical Hacking", "Got Root", “Pentesting con Powershell” y de "Empire: Hacking Avanzado en el Red Team", Microsoft MVP en Seguridad y Security Researcher en el equipo de "Ideas Locas" de la unidad CDCO de Telefónica. Para consultas puedes usar el Buzón Público para contactar con Pablo González
Figura 14: Contactar con Pablo González |
No hay comentarios:
Publicar un comentario