Los sistemas operativos
Windows están creados con un
conjunto de clases e instancias de estas en objetos que permiten
controlar las funciones de toda la plataforma. Este tipo de componentes
tienen una interfaz de operación implementada siguiendo los estándares
de
Web-Based Enterprise Management y
Common Information Model y se los conoce como
WMI - Windows Management Instrumentation -. Todo esto lo que abre es la puerta para que los objetos que dan vida a los sistemas operativos de
Microsoft Windows puedan ser utilizados mediante este inferfaz
WMI desde aplicaciones hechas a mano o herramientas del sistema que lo utilicen.
|
Figura 1: Atacar un servidor Windows usando llamadas WMI |
Esto no es nada nuevo, pero en un entorno
Citrix o
Terminal Services, en el que se quieren ejecutar comandos fuera de la aplicación publicada en un
Windows Server - es decir,
hacer un jailbreak a la publicación -, el poder hacer uso de los componentes
WMI
puede resolver el problema ya que se tendría acceso a todo lo que ese
usuario pudiera hacer en ese sistema operativo en concreto.
|
Figura 2: Herramienta WBEMTEST |
Para conseguir este objetivo, hay una aplicación de test que permite hacer uso del interfaz WMI de los objetos del sistema operativo manualmente y que está en todos los sistemas operativos Windows. Se llama WBEMTEST (Web-Based Enterprise Management Test) y se encuentra en la ruta %WINDIR%/System32/wbem/wbemtest.exe.
Desde esta herramienta se pueden cargar todos los interfaces de todos
los objetos creados en este contexto en el que se está trabajando,
configurar los parámetros y hacer las llamadas de los métodos.
|
Figura 3: Conexión a un contexto de trabajo. root/cimv2 es en el que se encuentran la mayoría de los objetos del sistema (El contexto de los objetos está en la documentación) |
Si se consigue acceder a esta herramienta, se puede convertir en una de esas consolas extras que un administrador de un entorno Citrix o Terminal Services
debería prohibir, pues como vamos a ver ahora, si un atacante consigue
llegar a ella, podrá ejecutar cualquier comando en el sistema operativo.
Para ello, el atacante debe conectase a un contexto de trabajo con el
usuario que esté conectado actualmente.
|
Figura 4: Por cada clase del sistema se documenta el contexto |
Una vez conectado al contexto podrá conseguir hacer uso de las funciones
de los componentes del sistema operativo llamando a los métodos que
tienen todos los objetos.
La lista completo de clases y métodos está documenta en MSDN,
y como se puede ver, por cada clase tendremos información del contexto
en el que se encuentra, las versiones de los sistemas operativos en que
se encuentra implementada y la lista de métodos que se pueden invocar.
|
Figura 5: Métodos de la clase Win32_OperatingSystem |
Con cada clase podremos hacer uso del interfaz WMI para
obtener una lista concreta de funciones, que están descritas en la
documentación. Por ejemplo, si se desea reiniciar o apagar un servidor
se puede hacer mediante la clase Win32_OperatingSystem que oferta estos métodos.
|
Figura 6: Configurando una llamada a un método de Win32_Process |
En nuestro caso concreto vamos a hacer uso de la clase Win32_Process
que entre otros métodos permite crear o matar procesos para conseguir
la creación de uno nuevo a partir la ejecución de un comando en el
sistema. Es decir, el objetivo será abrir una cmd.exe a usando el método create del objeto Win32_Process haciendo uso del inferfaz de llamadas WMI.
|
Figura 7: Configuración de la llamada al método create del objeto Win32_Process |
Cuando se selecciona el método create, ya tenemos acceso a la lista de parámetros a configurar, en este ejemplo vamos a usar el parámetro de llamada CommandLine.
|
Figura 8: Configuración de una llamada al método create |
Se configura el valor cmd.exe en él, para que se cree un proceso con la
ejecución de ese comando y le damos al botón de ejecutar.
|
Figura 9: Configuración del parámetro CommandLine con el nombre del programa a ejecutar |
Como se puede ver, al final se consigue la ejecución de la consola en el sistema operativo.
|
Figura 10: Se ejecuta la llamada VMI al método create del objeto Win32_Process para conseguir la ejecución de cmd.exe |
Es un ejemplo sencillo, pero haciendo uso de este interfaz
WMI
se podría sacar información acerca de todo el sistema operativo, el
dominio en el que se encuentra, listas de permisos, carpetas
compartidas, etcétera, y será especialmente útil cuando estemos haciendo
auditorías de seguridad en un entorno
Citrix o
Terminal Services con un sistema operativo
Windows Fortificado en el que las consolas habituales como
cmd,
PowerShell,
wmic, etcétera estén capadas, ya que se seguirá teniendo acceso a todo el sistema operativo.
Fuente http://www.elladodelmal.com/2014/12/atacar-un-servidor-windows-usando.html