Obtener el nombre de usuario/contraseña del usuario que inició sesión en Windows

StackOverflow https://stackoverflow.com/questions/113592

  •  02-07-2019
  •  | 
  •  

Pregunta

¿Existe alguna API para obtener el nombre y la contraseña del usuario actualmente conectado en Windows?

Gracias de antemano.

¿Fue útil?

Solución

Contraseña:No, esto no se conserva por razones de seguridad: se usa y luego se descarta.Puede recuperar la contraseña cifrada de este usuario del registro, con los privilegios suficientes, y luego descifrarla usando algo como mesas arcoiris, pero eso requiere muchos recursos y mucho tiempo usando los métodos actuales.Es mucho mejor avisar al usuario.

Alternativamente, si desea implementar algún tipo de sistema de "inicio de sesión único" como lo hace Novell, debe hacerlo a través de GINA (pre-Vista) o un Proveedor de credenciales (Vista), lo que dará como resultado que su código reciba el nombre de usuario. y contraseña al iniciar sesión, el único momento en el que la contraseña está disponible.

Para el nombre de usuario, obtener el actual El nombre de usuario (el que ejecuta tu código) es fácil:la función GetUserName en AdvApi32.dll hace exactamente esto por usted.

Si está ejecutando como un servicio, debe recordar que no hay ningún "usuario que haya iniciado sesión":hay varias en cualquier momento, como LocalSystem, NetworkService, SYSTEM y otras cuentas, además de las personas reales. Este artículo proporciona código de muestra y documentación. por hacer eso.

Otros consejos

¡Lo consideraría una gran falla de seguridad si fuera posible!

No puede obtener la contraseña de un usuario ya que está cifrada (sin mencionar que es una práctica estándar no almacenar contraseñas en texto sin formato).

Para obtener el nombre de usuario, puede utilizar Obtener nombre de usuario o NPGetUsuario

Tenga en cuenta cómo se hace, pero la herramienta "Recuperación de contraseña de red" de http://www.nirsoft.net/utils/network_password_recovery.html Parece obtener la contraseña de algún caché.

Para los muchos comentaristas que creen que no es posible revelar la contraseña del usuario actualmente conectado, consulte Volcar contraseñas de texto sin cifrar de los usuarios que han iniciado sesión que muestra cómo utilizar mimikatz para hacer precisamente eso:

mimikatz # privilege::debug
Demande d'ACTIVATION du privilège : SeDebugPrivilege : OK

mimikatz # sekurlsa::logonPasswords full
...
Utilisateur principal       : user
Domaine d'authentification  : domain
        kerberos :
         * Utilisateur  : user
         * Domaine      : domain
         * Mot de passe : pass

GetUserName le dará el nombre, pero no podrá obtener la contraseña.Ni siquiera es algo que Windows almacena, AFAIK, solo un hash de su contraseña.

Dependiendo de lo que intente lograr (puede contarnos un poco más...), es posible hacerse pasar por un usuario que ha iniciado sesión y hacer cosas en su nombre.

Los detalles completos de la autenticación en la API de Windows se pueden encontrar en MSDN:http://msdn.microsoft.com/en-us/library/aa374735(VS.85).aspx

No conozco la contraseña de inicio de sesión de Windows...pero definitivamente puedes obtener contraseñas en texto plano desde el Administrador de credenciales.Por ejemplo, aquí hay un programa para extraer la contraseña de TFS.En la mayoría de los casos, esto es lo mismo que el inicio de sesión de Windows.

namespace ShowPassword
{
    using Microsoft.TeamFoundation.Client;
    using System;
    using System.Net;

    class Program
    {
        static void Main(string[] args)
        {
            var tpc = new TfsTeamProjectCollection(new Uri("http://mycompany.com/tfs"));
            var nc = tpc.Credentials as NetworkCredential;
            Console.WriteLine("the password is " + nc.Password);
        }
    }
}

Compilé esto como aplicación de "consola" en comparación con 2015 con el paquete Nuget TeamFoundation ExtendedClient.

Puede obtener el nombre de usuario con GetUserName(), pero no puede obtener la contraseña;esto violaría la seguridad para tontos 101.

sobre la herramienta "Recuperación de contraseña de red"
Windows (hasta XP) almacena una copia de la contraseña con un cifrado más sencillo y fácil de descifrar, para conectarse a recursos compartidos de red de Lanmanager de estilo antiguo.Las herramientas generalmente prueban todas las contraseñas posibles con esto, el uso de tablas de arcoíris (versiones cifradas precalculadas de palabras del diccionario) acelera esto.

En XPsp2/3 Vista esta característica está eliminada.El nuevo cifrado es mucho más difícil de descifrar y necesita muchas horas para probar todos los valores posibles; existen servicios en línea que lo ejecutarán en una gran cantidad de máquinas para brindarle una respuesta rápida por un precio.

Para responder al cartel original, generalmente no almacena la contraseña y la compara con lo que el usuario escribió.Cifras (en realidad hash) la contraseña ingresada y la almacenas.Para verificar una contraseña, realiza el mismo cifrado en todo lo que ingresó el usuario y lo compara.Generalmente es imposible pasar del formulario cifrado a la contraseña real.

EDITAR Sospecho que estás haciendo la pregunta equivocada: ¿por qué quieres la contraseña, qué intentas verificar y cuándo?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top