目前,我正在简化在安全审计中提取 Windows 密码哈希的过程。就我个人而言,我希望在进行审计时更轻松地生成已恢复用户及其密码的列表。我认为它对于尝试比较和生成大量数据的其他人也很有用。
所以这里是要点:
当我从 Windows 系统文件中提取所有数据时,我将它们简化为格式 user:hash,其中哈希是 NTLM 哈希,例如“a87f3a357d73085c45f9416be5787e86”。
然后我将使用 oclHashcat 并尝试破解哈希,无论是字典还是暴力破解,都没有关系。我生成所有恢复的哈希的输出,但是 Hashcat 以 hash:password 格式生成它们。
现在这是我的问题以及我想要输入的内容 - 我想在给定两个输入文件的情况下将输出生成为 user:password。考虑到我可以有数百个散列但只有几个恢复的密码,尝试对列表进行排序是没有用的。
我不确定哪种数据结构对我最有利。数组对于大表来说效率太低了。我研究了序列化,并且一直在探索哈希映射和哈希表的使用。鉴于散列的大小,我没有任何运气实现这些方法,或者我这样做不正确。
目前我正在像这样运行程序:
program [user:hash file] [hash:password file] -o [user:password output]
我正在有效地尝试像这样(简要地)运行程序:
Load Files
// user:hash file
For each line, split by ':' delimiter
before delimiter = table1.user
after delimiter = table1.hash
// hash:password file
For each line, split by ':' delimiter
before delimiter = table2.hash
after delimiter = table2.password
// generate user:password file
Check each entry of table1 vs table2
if table1.hash = table2.hash
table1.user = output.user
table2.password = output.password
print to output "output.user:output.password"
我只是想找出一种有效的方法来跟踪每一行并将必要的数据提取到我可以轻松跟踪的数据结构中。
如果我需要澄清任何事情,请告诉我。任何帮助表示赞赏!