UWP NTLM аутентификация с учетными данными Windows - PullRequest
0 голосов
/ 09 января 2019

Примеров много, но все они работают с логином и паролем. Лучшее, что я мог найти с учетными данными по умолчанию:

    byte[] type1Message = new byte[40]
    {
        // 'N',  'T',  'L',  'M',  'S',  'S',  'P',  '\0'
           0x4E, 0x54, 0x4C, 0x4D, 0x53, 0x53, 0x50, 0x00,
        // Type 1 message
           0x01, 0x00, 0x00, 0x00,
        // Flags
           0x97, 0x82, 0x08, 0xe2,
        // Supplied Domain
           0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        // Supplied Workstation
           0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        // OS Version Structure
           0x0A, 0x00, 0x39, 0x38, //0x00, 0x00, 0x00, 0x00,
        // Os version uknown
           0x00, 0x00, 0x00, 0x0f
    };

    var handler = new HttpClientHandler();
    handler.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
    handler.AllowAutoRedirect = true;
    var _client = new HttpClient(handler);
    var request = new HttpRequestMessage(HttpMethod.Get, server.Url);
    request.Headers.Add("Authorization", "NTLM " + Convert.ToBase64String(type1Message));
    var message = _client.SendAsync(request);

Здесь я получаю только сообщение type1. Есть ли способ получить type2Message и type3Message или, может быть, есть готовая библиотека?

1 Ответ

0 голосов
/ 09 января 2019

Примеров много, но все они работают с логином и паролем.

Это только способ, которым NTLM будет работать, если только вы не работаете в Windows и фактически не используете собственные API-интерфейсы аутентификации Windows (InitializeSecurityContext, AcceptSecurityContext и т. Д.).

NTLM работает, вычисляя хэш пароля пользователя, вошедшего в систему, и используя его в качестве входных данных для создания ответов на запрос сервера. Для этой функции требуется открытый текстовый пароль, поэтому вы видите примеры с именем пользователя и паролем.

Так как же тогда работают учетные данные по умолчанию в Windows? Что ж, когда пользователь входит в систему, этот NTLM-хэш генерируется тогда из введенного им пароля. (Использование Windows Hello? Это круто, в этом случае хэш был сгенерирован и сохранен в безопасном контексте вашего оборудования и получен при входе в систему таким образом.)

Вы не сможете получить хеш из операционной системы, поэтому вам нужно будет либо запросить имя пользователя и пароль, и предоставить его своим не-нативным функциям NTLM, либо вызвать собственную Windows работает с FFI вашего языка (PInvoke, JNI и т. д.).

...