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