DSINTERNALS. Adquirir el listado completo de usuarios y contraseñas de Active Directory.

Estimados amigos de INSEGUROS!!!

En este post vamos a dar un pequeño truco muy útil para administradores de sistemas Windows o para auditores. Un ejemplo de como la misma herramienta puede servir para el mismo fin, o para distintos, según se mire...

Mi aproximación va a ser más orientada a la de administrador de sistemas.

Me comenta un cliente que tiene la necesidad de conectarse a los equipos para realizar tareas, con el usuario en cuestión, pero sin cambiarle la clave. Esto suele ser muy habitual en empresas pequeñas. Imagina un usuario que se va de vacaciones pero alguien el departamento necesita acceder al OWA del usuario para recuperar un correo. Imagina cualquier settings que haya que probar dentro del entorno del usuario. Aunque no es muy elegante, y tampoco se si legal, es algo habitual.



La única manera que se me ocurrió fue, extraer la lista de claves del dominio :-) Brillante idea, pero como? Me sirve el hash ntlm para hacer un pass the hash? Con el hash puedo ejecutar comando remotos, pero necesito "sentarme" delante del pc con pass the hash... Perfecto, un cliente RDP que me permite esto :-)

Lo primero es instalar un conjunto de herramientas en PowerShell muy conocidas por los auditores, DSINTERNALS.

Esta herramienta es muy potente ya que nos permite extraer la base de datos de AD con arranque portable, ejecutar ataques de diccionario, comprobar requisitos de seguridad mediante al hash, etc.

Lo que vamos a hacer es instalarlo. Lo primero que hago es bajar la última versión del Windows Management Framework con Powershell 5. Comprobamos la versión de powershell instalada con Get-host


Podemos descargar DSINTERNALS desde la web del proyecto, pero es más cómodo usar un repositorio público con proyectos en powershell muy interesantes, PowershellGallery, click click y lo tenemos.

El primer script que uso es este, que me da TODOS los hashes de todos los objetos, incluidos equipos...

Import-Module DSInternals
Get-ADReplAccount -All -NamingContext 'DC=****,DC=local' -Server ***DC01 > c:\kinomakino\todos.txt


Tenemos otra posibilidad menos ruidosa, ya que esto podría levantar sospechas ya que realmente está haciendo una replicación entre controladores de dominio... pero con un solo DC xD.

Import-Module DSInternals
$cred = Get-Credential
Get-ADReplAccount -SamAccountName **** -Domain **** -Server ****DC01 -Credential $cred -Protocol TCP > c:\kinomakino\uno.txt

De esta manera tenemos el resultado para el usuario dado, pero nos pide una clave del dominio...

Podríamos usar cualquier servicio público para averiguar contraseñas ya calculadas, o podríamos usar herramientas de cracking como hashcat o cualquier otra para sacar la contraseña en claro, pero vamos a optar por usar el Pass The Hash.


Brevemente, ¿Qué es pass the hash?. Una técnica de la prehistoria para pasar el hash de una clave a un servicio en vez de la propia clave. Hay muchas aplicaciones prácticas de esta técnica, casi siempre, acceso a carpetas SMB o ejecución remota de código.

Como indica este breve manual, podemos usar la herramienta XfreeRDP para pasar el hash al sistema en vez de la contraseña. El manual está disponible aquí.

Espero que os haya servido de ayuda esta pequeña colección de herramientas Powershell, sea para el bien o el mal, todos sabemos que la línea que lo separa es fina fina fina xD.

Gracias por leerme !!!