Cómo enumerar información del Active Directory sin dejar "huella" en el logging de un CMD
En muchas ocasiones no le dedicamos el tiempo adecuado a la enumeración de objetos, usuarios, características, propiedades, etcétera. Esto es algo importante en un ejercicio de Red Team o en un proyecto de Ethical Hacking. La posibilidad de interactuar a través de RPC con el dominio es siempre interesante, para ello haremos uso de una herramienta llamada rpcclient y que disponemos en Kali Linux.
En el artículo de hoy vamos a suponer un par de casos: el primero es un caso en el que la configuración de seguridad de Windows Server 2016 no autentica las llamadas RPC, por lo que nos podemos conectar al servidor y empezar a trabajar. Esto puede ocurrir y es una cosa a validar en un Ethical Hacking, sin lugar a la duda.
Figura 1; Cómo enumerar información del Active Directory sin dejar "huella" en el logging de un CMD |
En el artículo de hoy vamos a suponer un par de casos: el primero es un caso en el que la configuración de seguridad de Windows Server 2016 no autentica las llamadas RPC, por lo que nos podemos conectar al servidor y empezar a trabajar. Esto puede ocurrir y es una cosa a validar en un Ethical Hacking, sin lugar a la duda.
Figura 2: Libro Windows Server 2016: Administración, Seguridad y Operaciones de Ángel A. Nuñez en 0xWord |
¿Cómo verifico esto? Es fácil, utilizando la siguiente instrucción: rpcclient -U “” -N [dirección IP]. El parámetro -U indica el usuario con el que vamos autenticar, en este caso ninguno. El parámetro -N indica que la autenticación es nula. El segundo caso, es compatible con el primero, y es disponer de la autenticación de un usuario y podernos conectarnos por RPC. Esto nos puede permitir hacer consultas y hacer un bypass del registro de acciones de un CMD o una Powershell. Esto es interesante.
Windows Server 2016
¿Dónde se puede ver los valores y las configuraciones? Se pueden visualizar en las políticas del dominio a través del mmc.exe:
- Computer Configuration \ Administrative Templaes \ System \ Remote Procedure Call.
- Aquí encontramos dos políticas interesantes: Restrictions for unauthenticated RPC clients y RPC endpoint mapper client authentication.
En el registro de Windows también se puede consultar en qué estado se encuentran estas políticas:
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Rpc.
Aquí se puede encontrar, si existe la clave, los valores:
- RestrictRemoteClients
- EnableAuthEpResolution
Comprobando que se permiten los clientes no autenticados. Escenario 1
En algunas ocasiones, por compatibilidades, aplicaciones propias que hacen uso de esta tecnología o por cualquier otra razón, se configura de forma insegura un servidor. No es algo crítico el hecho de tener esto activo sin autenticación, pero no es recomendado. Cuando un pentester puede conectarse al Domain Controller o DC para hacer uso de las RPC y puede lanzar consultas, la enumeración está servida.
Figura 3: Pentesting con Powershell 2ª Edición |
Una vez conectados con rpcclient podemos hacer uso de un comando denominado “enumdomusers” con el que podemos listar los usuarios de dominio. El comando nos devuelve el nombre de usuario y el RID. Hay que fijarse en el usuario con el RID 0x1f4 o, lo que es lo mismo, el ID 500. Ese usuario es el administrador. El RID de usuarios de dominio como “pablo”, “alvaro” o “fran” se puede ver también con este comando.
Con el comando queryuser podemos pedir información del usuario, tal y como haríamos en un CMD con net user, por ejemplo. Lo interesante es el registro de acciones que evitamos con el uso de este tipo de cliente.
Otro ejemplo del comando queryuser es hacer la consulta a través del RID. Esto puede ser útil cuando accedemos a un AD donde hay una gran cantidad de usuarios y queremos buscar alguno en concreto, por ejemplo, el administrador siempre tiene el mismo RID. La información que devuelve este comando es muy amplia, así como interesante.
Ahora vamos a pedir información de todos los usuarios o todas las cuentas, fijándonos en el campo “description”. Si nos fijamos en la cuenta de "Álvaro", vemos un texto que pone “123abc. Pass default changeme!”. El típico comentario que puede poner un administrador al crear la cuenta. Parece una contraseña por defecto. El comando ejecutado para obtener toda esta información es “querydispinfo”.
Si recordamos recientemente hemos hecho un artículo sobre Crackmapexec, una herramienta que permite, entre otras cosas, poder ir probando credenciales a través de SMB y ver cuál hace login. Además, permitía hacer uso del hash y no de la credencial.
En este caso, tenemos la credencial en plano o potencialmente, una de ellas. Vamos a probar a ver qué ocurre sobre el usuario que se ha encontrado. Vemos que no hay acceso correcto, por lo que el usuario “Álvaro” hizo bien su trabajo y cambio la credencial al utilizar la cuenta por primera vez.
También recientemente, hemos hablado de la técnica Password Spraying, la cual viene perfecta en un entorno como el AD. ¿Por qué es perfecta? Si tenemos la idea de que alguien en el dominio tiene una credencial podemos buscarle gracias a la enumeración de usuarios y al uso de una credencial contra todas las cuentas. La herramienta crackmapexec nos permitirá hacerlo de forma sencilla. Para el ejemplo, podemos hacerlo manual, pero si hubiera un número notable de usuarios los meteríamos en un fichero, un usuario por línea, y utilizaríamos el nombre del fichero en el parámetro -u.
Aquí vemos que hemos encontrado la cuenta de un usuario llamado “pablo” que tiene la credencial activa. Este usuario no cambió la credencial por defecto y ha sido “cazado”. De ahí a tener una shell ya hay un paso muy pequeño, pero eso será en otro artículo.
Cuando RPC va autenticado. Escenario 2
En este pequeño escenario, la diferencia está en cómo accedemos al AD. En el caso anterior, se podía con autenticación nula, pero en este caso, la idea es que se ha conseguido la credencial de una forma previa al poder hacer uso de la herramienta rpcclient.
Figura 4: enumdomusers |
Con el comando queryuser podemos pedir información del usuario, tal y como haríamos en un CMD con net user, por ejemplo. Lo interesante es el registro de acciones que evitamos con el uso de este tipo de cliente.
Figura 5: queryuser "pablo" |
Otro ejemplo del comando queryuser es hacer la consulta a través del RID. Esto puede ser útil cuando accedemos a un AD donde hay una gran cantidad de usuarios y queremos buscar alguno en concreto, por ejemplo, el administrador siempre tiene el mismo RID. La información que devuelve este comando es muy amplia, así como interesante.
Figura 6: queryuser al "administrador" con el ID 500 |
Ahora vamos a pedir información de todos los usuarios o todas las cuentas, fijándonos en el campo “description”. Si nos fijamos en la cuenta de "Álvaro", vemos un texto que pone “123abc. Pass default changeme!”. El típico comentario que puede poner un administrador al crear la cuenta. Parece una contraseña por defecto. El comando ejecutado para obtener toda esta información es “querydispinfo”.
Figura 7: querydispinfo |
Si recordamos recientemente hemos hecho un artículo sobre Crackmapexec, una herramienta que permite, entre otras cosas, poder ir probando credenciales a través de SMB y ver cuál hace login. Además, permitía hacer uso del hash y no de la credencial.
Figura 8: Libro de Hacking Windows |
En este caso, tenemos la credencial en plano o potencialmente, una de ellas. Vamos a probar a ver qué ocurre sobre el usuario que se ha encontrado. Vemos que no hay acceso correcto, por lo que el usuario “Álvaro” hizo bien su trabajo y cambio la credencial al utilizar la cuenta por primera vez.
Figura 9: CME SMB |
También recientemente, hemos hablado de la técnica Password Spraying, la cual viene perfecta en un entorno como el AD. ¿Por qué es perfecta? Si tenemos la idea de que alguien en el dominio tiene una credencial podemos buscarle gracias a la enumeración de usuarios y al uso de una credencial contra todas las cuentas. La herramienta crackmapexec nos permitirá hacerlo de forma sencilla. Para el ejemplo, podemos hacerlo manual, pero si hubiera un número notable de usuarios los meteríamos en un fichero, un usuario por línea, y utilizaríamos el nombre del fichero en el parámetro -u.
Figura 10: CMB SMB probando password |
Aquí vemos que hemos encontrado la cuenta de un usuario llamado “pablo” que tiene la credencial activa. Este usuario no cambió la credencial por defecto y ha sido “cazado”. De ahí a tener una shell ya hay un paso muy pequeño, pero eso será en otro artículo.
Cuando RPC va autenticado. Escenario 2
En este pequeño escenario, la diferencia está en cómo accedemos al AD. En el caso anterior, se podía con autenticación nula, pero en este caso, la idea es que se ha conseguido la credencial de una forma previa al poder hacer uso de la herramienta rpcclient.
Figura 11: enumprivs |
Tras conectar e introducir la credencial correcta, conectamos de igual manera contra el AD. Para poner un ejemplo de los privilegios que tiene el usuario con el que hemos conectado, se puede hacer uso del comando enumprivs, tal y como se muestra en la imagen.
Más herramientas para el pentester
Una herramienta que no genera mucho ruido y que permite realizar consultas contra el AD de forma “discreta”. Si crees que pueden estar registrando las acciones que se hacen sobre una CMD o sobre una Powershell como, por ejemplo, con Powershell Transcription, puedes utilizar este tipo de enumeración a través de las RPC.
Más herramientas para el pentester
Una herramienta que no genera mucho ruido y que permite realizar consultas contra el AD de forma “discreta”. Si crees que pueden estar registrando las acciones que se hacen sobre una CMD o sobre una Powershell como, por ejemplo, con Powershell Transcription, puedes utilizar este tipo de enumeración a través de las RPC.
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 12: Contactar con Pablo González |
No hay comentarios:
Publicar un comentario