如何散列密码以用于 HttpNtlmAuth
How do I hash a password for use with HttpNtlmAuth
我可以使用带有纯文本用户名和密码的 HttpNtlmAuth 请求访问我组织内的 Web 应用程序,但我不想在我的代码中以纯文本形式存储我的密码。我已经阅读了以下其他 SO 答案,您可以传递密码的哈希值而不是明文,但我不确定该怎么做:
- this question 的选择答案提到了 "supplying your password or the hash of your password to HttpNtlmAuth" 但没有详细说明。
- 关于 this thread 的评论提到了对密码进行哈希处理,但没有回应使用哪种算法。
我曾尝试使用 MD4/UTF-16 per this link and also tried MD5 according to this link 但两者都返回了 401(未经授权)响应。以下代码 returns 使用我的明文密码的 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
我的objective是为了避免将我的密码存储在笔记本中。我意识到一个解决方法是让用户在 运行 脚本中输入密码,使用
import getpass
password = getpass.getpass()
我已经解决了我眼前的问题,但我仍然对散列感到好奇(如果可能的话,让这个脚本 运行 无人值守)所以如果有人弄明白了请提交响应。
我可以使用带有纯文本用户名和密码的 HttpNtlmAuth 请求访问我组织内的 Web 应用程序,但我不想在我的代码中以纯文本形式存储我的密码。我已经阅读了以下其他 SO 答案,您可以传递密码的哈希值而不是明文,但我不确定该怎么做:
- this question 的选择答案提到了 "supplying your password or the hash of your password to HttpNtlmAuth" 但没有详细说明。
- 关于 this thread 的评论提到了对密码进行哈希处理,但没有回应使用哪种算法。
我曾尝试使用 MD4/UTF-16 per this link and also tried MD5 according to this link 但两者都返回了 401(未经授权)响应。以下代码 returns 使用我的明文密码的 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
我的objective是为了避免将我的密码存储在笔记本中。我意识到一个解决方法是让用户在 运行 脚本中输入密码,使用
import getpass
password = getpass.getpass()
我已经解决了我眼前的问题,但我仍然对散列感到好奇(如果可能的话,让这个脚本 运行 无人值守)所以如果有人弄明白了请提交响应。