Как мне хешировать пароль для использования с HttpNtlmAuth - PullRequest
0 голосов
/ 10 октября 2019

Я могу получить доступ к веб-приложению в своей организации, используя запрос к HttpNtlmAuth с моим именем и паролем в виде открытого текста, но Я бы не хотел хранить свой пароль в виде открытого текста в моем коде . В следующих других SO-ответах я прочитал, что вы можете передать хэш пароля вместо открытого текста, но я не уверен, как это сделать:

  1. Выбранный ответ на этот вопрос упомянул "предоставление вашего пароля или хэш вашего пароля в HttpNtlmAuth", но не уточнил.
  2. Комментарий этой темы упомянул хэширование пароляно не было ответа, какой алгоритм использовать.

Я пытался использовать MD4 / UTF-16 для этой ссылки , а также пробовал MD5 в соответствии с этой ссылкой , но оба из них вернули 401 (несанкционированный) ответ. Следующий код возвращает ответ 200 (успех) с моим незашифрованным паролем.

Я использую неправильный алгоритм хеширования или я пропускаю что-то еще фундаментальное?

import hashlib
import requests
from requests_ntlm import HttpNtlmAuth

# these are not the actual values
USERNAME = 'domain\\username'
PASSWORD = 'password'
URL = 'https://internal_web_app/url.aspx?Parameters=values'

hashes = [
    PASSWORD,                                                    # No hash
    hashlib.new('md4', PASSWORD.encode('utf-16le')).hexdigest(), # NTLM
    hashlib.md5(PASSWORD.encode('utf-8')).hexdigest()            # MD5
]

for hash in hashes:
    # create a session
    session = requests.Session()
    # set up the authentication object with the respective string
    session.auth = HttpNtlmAuth(USERNAME, hash)
    # send a GET request (verify=False because the SSL cert is crappy)
    response = session.get(URL, verify=False)
    # expecting 200 for success and 401 for authentication failure
    print(response.status_code)

Вывод:

200
401
401

1 Ответ

0 голосов
/ 27 октября 2019

Моей целью было избежать сохранения моего пароля в записной книжке. Я понял, что обходной путь состоит в том, чтобы заставить пользователя ввести пароль при запуске сценария, используя

import getpass
password = getpass.getpass()

. Я обошел мою непосредственную проблему, но мне все еще интересно узнать о хешировании (длявключите этот скрипт, если это возможно, без присмотра), поэтому, если кто-то это выяснит, отправьте ответ.

...