使用 Python 快速离线审计 Active Directory 密码。
Lil Pwny 是一个 Python 应用程序,用于对从 Active Directory 恢复的用户密码的 NTLM 哈希进行离线审计,并与 Have I Been Pwned 中已知的被泄露密码进行比对。结果将以 JSON 格式输出,包含用户名、匹配的哈希(可混淆)以及该密码在 HIBP 中被发现的次数。
更多关于 Lil Pwny 的信息,请访问我的博客
Lil Pwny 提供了通过添加常用变体来增强自定义密码列表的功能。这些变体包括:
P@ssw0rd)PASSWORD, Password)password!, !password)password123!, !passwordabc, passwordpassword)
password1950, password2034)一个包含 100 个明文密码的自定义密码列表会生成 49848660 个变体。
Lil Pwny 会查找使用其用户名变体作为密码的用户。
它会将用户的用户名转换为以下格式:
然后将这些转换为 NTLM 哈希,并与 AD 哈希进行审计。
此应用程序旨在充分利用 Python 的多进程处理能力,以便在消费级硬件上尽可能快地运行。
由于使用了多进程,您拥有的核心数越多,Lil Pwny 的运行速度应该越快。即使在逻辑核心数较少的情况下,我也取得了非常好的效果:
Lil Pwny 会将结果输出到 stdout:
或 JSON:
{"localtime": "2021-00-00 00:00:00,000", "level": "NOTIFY", "source": "Lil Pwny", "match_type": "hibp", "detection_data": {"username": "RICKON.STARK", "hash": "32ED87BDB5FDC5E9CBA88547376818D4", "matches_in_hibp": "24230577", "obfuscated": "True"}}
您可以将 Lil Pwny 的 JSON 输出重定向到文件:
lil-pwny -ad ... > lil-pwny-results.json
这种 JSON 格式的日志可以轻松导入到 SIEM 或其他日志分析工具中,并可以提供给其他脚本或平台以进行自动化的解决操作。
通过 pip 安装
pip install lil-pwny
lil-pwny 将作为全局命令安装,使用方法如下:
usage: lil-pwny [-h] -hibp HIBP [-v] [-c CUSTOM] [-custom-enhance CUSTOM_ENHANCE] -ad AD_HASHES [-d] [-output {file,stdout,json}] [-o] [--verbose]
使用 Python 快速离线审计 Active Directory 密码
选项:
-h, --help 显示此帮助信息并退出
-hibp HIBP, --hibp HIBP
包含 HIBP NTLM 哈希的 .txt 文件
-v, --version 显示程序版本号并退出
-c CUSTOM, --custom CUSTOM
包含要检查的其他自定义密码的 .txt 文件
-custom-enhance CUSTOM_ENHANCE, --custom-enhance CUSTOM_ENHANCE
根据提供的自定义密码列表生成增强的自定义密码列表。必须与 -c/--custom 标志一起使用。增强列表将存储在内存中,不会写入磁盘。提供所需密码的最小长度。默认值为 8
-ad AD_HASHES, --ad-hashes AD_HASHES
包含 AD 用户 NTLM 哈希的 .txt 文件
-d, --duplicates 输出使用相同密码的用户列表
-output {file,stdout,json}, --output {file,stdout,json}
结果发送到何处
-o, --obfuscate 通过使用随机盐值进行哈希来混淆已发现匹配项的哈希
--verbose 打开详细日志记录
示例:
lil-pwny -hibp ~/hibp_hashes.txt -ad ~/ad_user_hashes.txt -c ~/custom_passwords.txt -output stdout -do
在域控制器上使用 ntdsutil 生成 AD 域的 IFM 转储。在提升的 PowerShell 窗口中运行以下命令:
ntdsutil
activate instance ntds
ifm
create full **output path**
要从 AD IFM 数据中恢复 NTLM 哈希,需要 PowerShell 模块 DSInternals。
安装后,使用 IFM 数据中的 SYSTEM 配置单元以 usernme:hash 格式恢复哈希,并将其保存到文件 ad_ntlm_hashes.txt 中。
$bootKey = Get-BootKey -SystemHivePath '.\registry\SYSTEM'
Get-ADDBAccount -All -DBPath '.\Active Directory\ntds.dit' -BootKey $bootKey | Format-Custom -View HashcatNT | Out-File ad_ntlm_hashes.txt -Encoding ASCII
可以使用 .NET 实用程序 从此处 从 HIBP API 下载该文件。
可以使用 scripts 目录中的 PowerShell 脚本在处理之前从 IFM 输出中删除不需要的帐户。这些包括: