我可以使用带有明文用户名和密码的 HttpNtlmAuth 请求访问我组织内的 Web 应用程序,但我不想将密码以明文形式存储在我的代码中。我已阅读以下其他 SO 答案,您可以传递密码的哈希值而不是明文,但我不知道该怎么做:
我已尝试根据此链接使用 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