这其实本质是一个社会工程学问题
至于为什么 在文章的最后想必大家也能理解
假设现在有一个人短时间离开电脑之后并未锁屏 那么旁人就可以通过U盘拷贝重要密码文件的方式获取他的密码
密码文件获取
windows并不会直接存储你的明文密码 它存的是一串hash加密之后的乱码
当你设置密码的时候 系统会用一种hash算法将你的密码转换成一串固定长度的字符这就是NTLM哈希
当你登录的时候 系统会将你输入的密码再次哈希 两次哈希结果相同就会成功登录
那么现在我们的目标很明确了 我们需要拿到这一串哈希 而它就存在我们的系统注册表里面 具体位置就是SAM和SYSTEM这两个文件
攻击者趁攻击目标离开的间隙 插入u盘 用管理员身份运行命令行
然后输入以下命令
1 | reg save HKLM\sam ./sam.save |
reg save是Windows自带的命令行工具 用于将指定的注册表项 子项 值保存在一个文件之中HKLM\sam与HKLM\system:是指定了本地机器(HKLM)下单安全账户管理器(sam)和解密密钥(system):一个存储密码哈希值 一个存储解密的密钥
后面两个路径./sam.save与./system.save是保存路径
这样一来就可以在本目录下找到这两个文件了 我们将其拷走 
感谢ZLARYY师傅的u盘支持
在真实操作之中最好将靶机的两个生成文件删去 抹除操作痕迹 我这里就懒得删了
kali操作
将u盘之中的两个文件复制到kali之中 可以使用创建共享文件夹等方式 在这里不做展示了
接下来我们要从这两个文件里面提取hash
1 | impacket-secretsdump -sam sam.save -system system.save LOCAL |
这里我们用到impacket工具里面专门用于从windows之中提取凭据和机密信息的Python脚本-sam:指定导出的包含加密密码哈希值的sam文件-system:指定到处都 包含解密密钥的system文件LOCAl:所有文件都在本地 这样工具就会直接对本地指定的文件进行操作
这样一来就会获取这台电脑上所有用户的哈希(不放出来了 自己试)
攻击者会得到很多串字符 比如
1 | Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: |
- 第一部分:账户名
- 第二部分:相对标识符(RID)
- 第三部分:LM哈希
- 第四部分:NTLM哈希
我们需要的部分就是这个NTLM哈希 将其保存在一个文件之中 就叫hashes .txt吧
那么我们下一步还要获得密码 这里我们就使用改密码爆破的方式破解
这里我们是使用cupp这个工具来操作
这是一款基于Python编写的交互式密码字典生辰该工具 核心思想就是利用社会工程学信息 为特定目标生成高度定制化 高成功率的密码(目标要是脸滚键盘瞎设置密码 这个工具就没招了)
主要命令行选项有以下几个
1 | -h:显示帮助信息 |
使用命令cupp -i进入交互式页面 接下来就是填写一些你对目标信息的了解 诸如:
- 姓名
- 生日
- 伴侣孩子名字
- 昵称
- 宠物名称
- 公司名称
- 是否密码末尾添加特殊字符或者随机字符
完成这些信息的填写之后cupp会生成一个包含大量可能密码的文件
在这里面大概率就有目标的密码
接着我们使用hashcat工具来破解一下
1 | sudo hashcat -m 1000 hashes.txt su.txt |
-m是指定密码类型 而1000是NTLM哈希的专用代码
后面的第一个参数hashes .txt是目标文件 su.txt是字典
等待之后若cupp根据社会工程学生成的可能密码中有真是密码 就会显示出来 自己去试一下吧
报错的化可能是内存不足 分配大一点就行
总结
看到这里 其实你也发现了 这个方法是存在很大的局限性的 它需要攻击者有偷盗哈希文件的时间 还需要攻击者对目标很了解 但是生活之中其实很多时候就是这些微小的细节暴露了安全问题