我可以使用带有我的纯文本用户名和密码的HttpNtlmAuth请求,使用我的组织中的Web应用程序,但我宁愿不将密码以纯文本格式存储在我的代码中。我已经阅读了以下其他答案,您可以传递密码的哈希而不是纯文本,但是我不确定该怎么做:
[我尝试过按this link使用MD4 / UTF-16,还尝试根据this link尝试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
我的目标是避免将密码存储在笔记本中。我意识到一种解决方法是使用户使用[
输入运行脚本的密码import getpass
password = getpass.getpass()
我已经解决了我眼前的问题,但是我仍然对哈希很好奇(如果可能的话,可以使该脚本在无人看管的情况下运行,因此如果有人发现了该错误,请提交响应。)>