【发布时间】:2012-11-28 22:04:48
【问题描述】:
目前,我正在简化在安全审核中提取 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"
我只是想找出一种有效的方法来跟踪每一行并将必要的数据提取到我可以轻松跟踪的数据结构中。
如果我需要澄清任何事情,请告诉我。任何帮助表示赞赏!
【问题讨论】:
-
您能否详细说明您在使用哈希时遇到的问题?另外,您为什么要实现哈希而不是使用 stl 中的哈希?
-
好吧,我认为我一开始就错误地实施了它们。但后来我开始怀疑是否还有其他更好的方法来存储这些数据。我使用哈希的原因是因为它们是 Hashcat 和其他软件的输出,我需要它们进行比较。
标签: shell hash password-recovery