windows本地破解用户口令
实验所属系列:操作系统安全
实验对象: 本科/专科信息安全专业
相关课程及专业:信息网络安全概论、计算机网络
实验时数(学分):2学时
实验类别:实践实验类
实验目的
1、了解Windows2000/XP/Server 2003系统密码的加密机制及其脆弱性;
2、学会使用Windows本地密码破解工具来破解密码跟审计密码的安全性;
3、了解设置健壮的Windows口令,以及配置强壮的密码策略的必要性。
预备知识
Windows NT 系统密码存储的基本原理
SAM(Security Accounts Manager 安全账户管理器)是Windows NT 内核操作系统,包括Windows2000/XP/Server 2003/Vista/7的用户账户数据库,所有用户的登录名及口令等相关信息都保存在这个文件中。系统在保存sam信息之前对sam信息进行了压缩处理,因此,sam文件中的信息不可读取。此外,在系统运行期间,sam文件被system账号锁定,即使是administartor账号也无法打开。sam数据库位于注册表HKLM\SAM\SAM下,受到ACL保护,可以使用regedt32.exe打开注册表编辑器并设置适当权限查看SAM中的内容。SAM数据库在磁盘上就保存在%systemroot%system32\config\目录下的SAM文件中,在这个目录下还包括一个security文件,是安全数据库的内容,两者有较少的关系。SAM数据库中包括所有组,账户的信息,包括密码HASH、账户的SID等。
Windows系统在SAM中采用了两种密码的加密机制,所以,在sam文件中保存着两个口令字,一个是LanMan版本的散列值(LM),另一个是NT版本的散列值(NTLM)。
◆ LanMan 散列算法(LM)
LanMan散列算法处理用户口令的过程是:将用户口令分成两半,每一半都是7个字符(不足7个字符的以0x00补齐),然后分别对这另个口令进行加密,最后将加密后得到的散列值串连在一起,得到最终的LM散列值。
◆ NT散列算法(NTLM)
密码散列有两部分组成:一部分是通过变现DES算法,使用密码的大写OEM格式作为密钥(分成2个KEY,每个KEY7字节,用0补足14个字节),通过DESECB方式获得一个128位的密钥,加密特殊字符串"KGS!@#$%"获得一个16字节长度的值。另一部分则是使用MD4对密码的UNICODE形式进行加密获得的一个散列。
从上述LM算法流程来看,可以发现LM安全性上的几点不足:
1)LM算法将14个字节的密码分为两组分别进行加密,使得两组密文可以分别破解,并且明文空间从95^14减少到了95^7;
2)LM算法不区分密码的大小写字符,使得明文空间从95^7减少到69^7;
3)LM算法不像其他散列算法一样包含随机的初始向量IV,使得用空间换取时间的字典攻击(如彩虹表)等成为可能,2^43的明文空间使用彩虹表最多只需几个小时便能破解。
虽然LM非常不安全,但Windows为了保持前后兼容性,是许多以前支持LM认证的经典应用不至于突然不能使用,所以LM扔存在于相当Windows各种版本的操作系统中,不过Vista/7已经默认不使用LM存储账户密码散列。
NTLM散列的安全性较LM有所提升,因为其明文空间扩展到了95^128,采用暴力破解的时间复杂度大大增加。但是NTLM散列和LM散列一样,都没有在算法中包含随机数据(salt),所以仍然会受到字典攻击。但由于NTLM的明文空间较大,其字段占用的空间也会呈几何级数增长(NTLM的彩虹表大小为200G左右,而LM的彩虹表只需几百兆即可),破解时间自然也较LM要长很多。
SAM的导出方法
SAM文件系统运行时受到保护,仅对是可读写的system,所以在系统运行时不能将SAM文件复制出来,必须使用别的系统启动才能复制SAM文件。
SAM文件的获取方法大致有一下四种:
◆ 通过物理接触主机,启动其他操作系统来获取windows分区上的SAM文件。
◆ 获取%SystemRoot%\repair\sam文件。
◆ 使用pwdump等工具从注册表中导出SAM散列值,转储成类似与UNIX系统的password格式文件。
◆从网络中嗅探分析SMB报文,从中获取密码散列字符串。
在Windows NT 4.0 SP3 之前,所有的密码散列是以非常简单的DES加密来实现安全存储,DES的密钥只是从用户账户的SID来导出的,所以只需要SAM文件便能破解加密的散列。
但是在NT 4.0 SP3 之后的版本中,Windows引入了SysKey,并且在2000之后作为默认执行的加密手段。所以要破解经过SysKey加密的SAM散列,必须要先从system文件中导出boot key,然后利用MD5导出hashed boot key,再用hashed boot key导出RC4 key,用此RC4 key 便能解密出和Windows NT的 SAM中一样的散列密文。最后用NT中的解密手段即可获得能够进行字典攻击的密码散列。
SAMInside破解软件
SAMInside 为一款俄罗斯人出品的密码破解软件,支持Windows NT/2000/XP/Server 2003/Vista/7等操作系统,主要用来恢复Windows的用户登录密码。与一般的Windows密码破解软件有所不同的是。多数的Windows密码恢复软件都是将Windows用户密码重置,比如Passware Kit 系列中的Windows Key 等等。SAMInside 则是将用户密码以可阅读的明文方式破解出来,而且SAMInside可以使用分布式方式攻击方式同时使用多台计算机进行密码的破解,大大提高破解速度。
SAMInside的离线使用方式需要sam文件盒syskey文件导入后才能进行破解,而在线方式则可以直接从本机获取,可以从LSASS进程直接导入所需要的信息,然后对指定的用户进行破解即可。
实验环境
学生实验主机:WindowsXP。
实验目标服务器:无。
网络环境:局域网。
实验内容和步骤
打开 Windows 实验台,运行 WindowsXP 系统。
1. 首先查看本地主机的密码策略。
在"开始"菜单中打开"运行"对话框,输入"secpol.msc"打开"本地安全策略编辑器"。
1)禁用"密码必须符合复杂性要求"。
2)设置"密码长度最小值":8位以上。
然后访问"安全设置" -->"本地策略"-->"安全选项",然后再右侧找到"网络安全:不要在下次更改密码是存储LAN Manager的哈希值"的设置,确认或更改其为"禁用"(默认为“禁用”)。
2. 在本地计算机中新建一个用户。密码设置为8-14的随机纯数字组合,如用户名为“test”,密码为“13678954376”。
可打开一个命令提示符,输入如下命令直接添加用户。
net user test 13678954376 /add
当然,也可以通过控制面板中的用户账户组件来添加新用户并为其设置密码。
3. 打开一个命令提示符,进入实验工具目录中的“pwdump7”,运行Pwdump7.exe后即可直接显示本地计算机上所有用户及其密码散列值(包括LM散列值和NTLM散列值)。
上述输出的用户信息基本格式如下:
“用户名:安全相对表示符(RID):LM散列:NTLM散列”
接着,我们使用如下命令将上述用户散列信息存储到磁盘上的“C:\sam.txt”文件中去。
注:这里的sam.txt 文件要注意一下,直接输入是不对的,要在前面pwdump跑出来的用户信息复制粘贴成sam。txt的文本文档进行保存
4. 进入实验工具目录中的“SAMInside2.6.1”,双击运行SAMInside程序(SAMInside.exe),显示主界面如下所示。
5. 点击菜单项:“File”——>“Import From PWDUMP -file ……”。然后选择前面存储的本机用户密码散列文件“C:\sam.txt”,点击“打开”按钮返回主界面。
6. 在“User”栏中仅选择我们刚才添加的临时用户(“如“test”)。
7. 点击菜单项“Audit”,确认勾选“LM-Hash Attack”,确认勾选“Brute-force Attack”,即暴力破解方式。
8. 点击菜单项“Service”->“option”,在左侧选择“Brute-force Attack”,然后在右侧定制暴力破解的字符集。
为了保证实验的时间,因此我们在前面添加得的临时测试用户的密码为8-14位的随机纯数字组合,所以我们在这里仅选择[0...9]字符集,点击“oK”按钮后回到主界面。再点击“Audit”选择“Start attack”开始暴力破解。破解后显示的用户LM-password即为之前设置的用户密码。
实验到这里就成功了,欧耶!!
越努力越幸运,诸君共勉~~
windows本地破解用户口令的更多相关文章
- 使用webapi实现windows本地用户管理
1. 引言 最近一段时间设计和实现公司内部的基于OAuth2.0的统一身份认证中心,经梳理,公司部分自研系统可以使用OAuth2.0的方式进行身份认证,还有一部分系统无源代码,未开放接口,使用wind ...
- [内网渗透]Windows中的用户帐户与组账户
0x01 用户帐户 1.1 简介 用户帐户是对计算机用户身份的标识,本地用户帐户.密码存在本地计算机上,只对本机有效,存储在本地安全帐户数据库 SAM 中. 文件路径:C: ...
- Windows中的用户和组以及用户密码处理
目录 用户帐户 Windows 默认账户 Windows 内置用户账户 查看.创建和删除账户 组账户 内置组账户 组的查看.创建和删除 Windows中对用户密码的处理 LM-hash NTLM-ha ...
- Windows认证 | Windows本地认证
Windows的登陆密码是储存在系统本地的SAM文件中的,在登陆Windows的时候,系统会将用户输入的密码与SAM文件中的密码进行对比,如果相同,则认证成功. SAM文件是位于%SystemRoot ...
- 2018-2019-2 20165215《网络对抗技术》Exp10 Final Windows本地内核提权+Exploit-Exercises Nebula学习与实践
目录 PART ONE :Windows本地内核提权 漏洞概述 漏洞原理 漏洞复现 windbg调试本地内核 查看SSDT表和SSDTShadow表 查看窗口站结构体信息 利用Poc验证漏洞 漏洞利用 ...
- Python脚本暴力破解FTP口令(ftplib)
目录 判断FTP服务器是否允许匿名登录 暴力破解FTP口令 列出FTP目录内的网页文件 综合 环境:Windows python2.7.15 ftplib模块是python下用于ftp服务的模块 . ...
- linux上配置subversion服务器端安装配置并使用svn,windows本地检出,设置同步更新服务器的钩子
参考http://my.oschina.net/junn/blog/164041 http://songxj.blog.51cto.com/620981/396113 http://5iwww.blo ...
- windows本地安全策略实验-远程桌面连接锁定账户
windows本地安全策略实验-远程桌面连接锁定账户 实验环境: 服务端:Win7-1:10.10.10.136,开启远程桌面服务 客户端:win7-2:10.10.10.153 确保客户端和服务端能 ...
- 背水一战 Windows 10 (84) - 用户和账号: 微软账号的登录和注销
[源码下载] 背水一战 Windows 10 (84) - 用户和账号: 微软账号的登录和注销 作者:webabcd 介绍背水一战 Windows 10 之 用户和账号 微软账号的登录和注销 示例演示 ...
随机推荐
- C/C++ typedef用法
原文来源:https://blog.csdn.net/superhoy/article/details/53504472 第一.四个用途 用途一: 定义一种类型的别名,而不只是简单的宏替换.可以用作同 ...
- Spring Boot入门系列(二十)快速打造Restful API 接口
spring boot入门系列文章已经写到第二十篇,前面我们讲了spring boot的基础入门的内容,也介绍了spring boot 整合mybatis,整合redis.整合Thymeleaf 模板 ...
- servercat IOS Linux监控 SSH客户端
servercat IOS Linux监控 SSH客户端 iOS 平台上新出的一个挺有趣的服务器监控 + SSH 客户端. 监控服务器状态,内存.CPU.网络 还能对Docker容器进行监控 价格:¥ ...
- ztree通过ajax加载json数据中文乱码的解决方法:springmvc配置
一.问题描述 使用zTree的异步刷新父级菜单时,服务器返回中文乱码,但项目中使用了SpringMvc,已经对中文乱码处理,为什么还会出现呢? 此处为的异步请求的配置: async: { enable ...
- 【7】进大厂必须掌握的面试题-Java面试-Jsp
1. jsp的生命周期方法是什么? 方法 描述 公共无效的jspInit() 与servlet的init方法相同,仅被调用一次. 公共无效_jspService(ServletRequest requ ...
- vi/vim系统编辑命令使用技巧
01前言 在Linux系统中会有很多的文件信息,这些文件的内容如果需要编辑,就必须借助vi或vim编辑命令. vi是Linux命令行界面下的重要文字编辑器.vim是vi命令的增强版. [语法格式] v ...
- js 实现 input file 文件上传
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat=&qu ...
- 4.QOpenGLWidget-对三角形进行纹理贴图、纹理叠加
在上章3.QOpenGLWidget-通过着色器来渲染渐变三角形,我们为每个顶点添加颜色来增加图形的细节,从而创建出有趣的图像.但是,如果想让图形看起来更真实,我们就必须有足够多的顶点,从而指定足够多 ...
- windows注册redis为服务,zookeeper为服务
windows注册redis为服务,zkserver为服务 1.redis部分 通过redis内置工具安装 进入redis安装目录 1.shift+鼠标右键打开菜单,点击"在此处打开命令窗口 ...
- docker 启动mysql 挂载宿主机目录
在使用docker run 运行镜像获取容器时,有些容器会自动产生一些数据,为了这些数据会因为container (容器)的消失而消失,保证数据的安全,比如mysql 容器在运行中产生的一些表的数据, ...