我如何哈希用于HttpNtlmAuth的密码

问题描述 投票:0回答:1

我可以使用带有我的纯文本用户名和密码的HttpNtlmAuth请求,使用我的组织中的Web应用程序,但我宁愿不将密码以纯文本格式存储在我的代码中。我已经阅读了以下其他答案,您可以传递密码的哈希而不是纯文本,但是我不确定该怎么做:

  1. this question的选择答案提到“向HttpNtlmAuth提供密码或密码的哈希,但没有详细说明。
  2. this thread的评论提到对哈希进行哈希处理,但是对使用哪种算法没有响应。

[我尝试过按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
python-3.x hash python-requests ntlm-authentication
1个回答
0
投票

我的目标是避免将密码存储在笔记本中。我意识到一种解决方法是使用户使用[

输入运行脚本的密码
import getpass
password = getpass.getpass()

我已经解决了我眼前的问题,但是我仍然对哈希很好奇(如果可能的话,可以使该脚本在无人看管的情况下运行,因此如果有人发现了该错误,请提交响应。)>

© www.soinside.com 2019 - 2024. All rights reserved.