密码破解---实验八:Windows本地破解用户口令

2023-10-30

目录

一、实验目的及要求

二、实验原理

1.Windows NT 系统密码存储的基本原理

2.SAM的导出方法

三、实验环境

四、实验步骤及内容

五、实验总结

六、分析与思考


一、实验目的及要求

1、了解Windows2000/XP/Server 2003系统密码的加密机制及其脆弱性;

2、学会使用Windows本地密码破解工具来破解密码跟审计密码的安全性;

3、了解设置健壮的Windows口令,以及配置强壮的密码策略的必要性。

二、实验原理

1.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要长很多。

2.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,局域网

四、实验步骤及内容

1. 首先查看本地主机的密码策略。

      在"开始"菜单中打开"运行"对话框,输入"secpol.msc"打开"本地安全策略编辑器"。

      1)禁用"密码必须符合复杂性要求"。

      2)设置"密码长度最小值":8位以上。

     然后访问"安全设置" -->"本地策略"-->"安全选项",然后再右侧找到"网络安全:不要在下次更改密码是存储LAN Manager的哈希值"的设置,确认或更改其为"禁用"(默认为“禁用”)。

2. 在本地计算机中新建一个用户。密码设置为8-14的随机纯数字组合,如用户名为“test”,密码为“13678954376”。

      可打开一个命令提示符,输入如下命令直接添加用户。

      net user test 123456789 /add

      当然,也可以通过控制面板中的用户账户组件来添加新用户并为其设置密码。

3. 打开一个命令提示符,进入实验工具目录中的“pwdump7”,运行Pwdump7.exe后即可直接显示本地计算机上所有用户及其密码散列值(包括LM散列值和NTLM散列值)

      上述输出的用户信息基本格式如下:

      “用户名:安全相对表示符(RID):LM散列:NTLM散列”

      接着,我们使用如下命令将上述用户散列信息存储到磁盘上的“C:\sam.txt”文件中去。pwdump7 > c:\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即为之前设置的用户密码。

五、实验总结

通过过这次实验我们知道了WindowsXP 系统的登录名和口令都保存在SAM中,SAM数据库含有账户信息,密码Hash。我们通过使用cmd命令导出SAM散列值。并且通过使用SAMinside工具成功破解了Windows用户和密码。

六、分析与思考

1)写出实验完成过程,并回答各实验任务的相关问题。

设置本地密码策略,新建用户设置密码,通过使用cmd运行pwdump7可以读取本地用户和密码散列值,使用Saminside选择前面pwdump存储的文件,选择用户勾选攻击类型LM-Hash和Brute-force,然后设置Brute-force的字典类型,进行攻击即可得到用户名和密码。

2)尝试着对有字符,数字,特殊符号混合的用户密码进行破解?

当有字符时选择Brute-force attack标签下的All printable选项,数字就选用Digits,特殊符号Sepcial symbols有哪些混合就选上

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

密码破解---实验八:Windows本地破解用户口令 的相关文章

  • Windows 和 python 3.2 的 Pylint 安装问题

    当我尝试使用 pip 在 Windows 上安装 pylint 时 我遇到了这个问题 我真的不知道它来自哪里 C Python33 Scripts gt pip exe install pylint Downloading unpackin
  • “此应用程序已请求运行时以异常方式终止它”的原因是什么?

    Visual C 运行时抛出一个常见错误 此应用程序已请求运行时以异常方式终止它 请联系应用程序的支持团队以获取更多信息 该错误消息实际上是什么意思mean 让我用一个比喻来准确地解释我的问题 如果我看到一条消息 异常 访问冲突 0xc00
  • fprintf() 线程安全吗?

    我正在为野人就餐问题的某些变量编写一个 C 解决方案 现在 我创建线程 每个线程都将 FILE 获取到同一个调试文件 在线程内我正在使用 fprintf 进行一些打印 打印的语句不受任何类型的互斥锁等保护 我没有在调试文件中观察到任何交错行
  • uri 警告中缺少端口:使用 Python OpenCV cv2.VideoCapture() 打开文件时出错

    当我尝试流式传输 ipcam 时 出现了如下所示的错误 tcp 000000000048c640 uri 中缺少端口 警告 打开文件时出错 build opencv modules videoio src cap ffmpeg impl h
  • Pip 无法在 Windows 上安装 Twisted

    我正在尝试在 Windows 8 计算机上安装 Twisted 在 Twisted 官方网站上 只有一个 Windows 版的 Wheel 文件 https twistedmatrix com trac wiki Downloads htt
  • MinGW Make 抛出“系统找不到指定的路径。”错误

    我正在尝试在 Windows 7 上使用 cmake 生成一个 c 项目 在实际创建项目之前 cmake 会对您的工具链进行快速测试 我正在使用 MinGW 这就是我的问题所在 Cmake 触发 make 构建 最终失败并返回 系统找不到指
  • 如何通过命令行将Flash .fla编译为.swf? [复制]

    这个问题在这里已经有答案了 如何在基于 Windows 的操作系统上通过命令行将 Flash fla 文件编译为 swf 需要安装的命令行工具就可以了 谁能建议我该怎么做 以直接的方式 谢谢 您可以使用JSFL为 Flash IDE 编写脚
  • Delphi中使用FindVCLWindow调用WinHelp32(WinXP Pro SP3 32bit)

    有什么问题吗 procedure TForm1 VCLHelpClick Sender TObject var Ctrl TWinControl begin Ctrl FindVCLWindow Mouse CursorPos if Ctr
  • Jenkins 可以检测到任何 svn 用户每次提交代码吗?

    Jenkins 可以检测到任何 svn 用户每次提交代码吗 我想知道每次 Jenkins 提交 svn user 时 有什么方法或 jenkins 插件吗 现在我用svn updateJenkins 中的 cmd 来更新 svn 您可以按照
  • Rails Windows Vagrant 响应时间非常慢

    我在跑 Vagrant 1 7 1 Rails 4 1 4 Thin 1 6 1 Windows 7 每个静态文件的发送时间都超过一秒 在我的 PC 上加载一个页面可能需要大约 20 秒 而在同事的 Linux 机器上则只需瞬间 有一些帖子
  • 如何创建向后兼容 Windows 7 的缩放和尺寸更改每显示器 DPI 感知应用程序?

    我是 WPF 和 DPI 感知 API 的新手 正在编写一个在 Windows 7 8 1 和 10 中运行的应用程序 我使用具有不同每个显示器 DPI 设置的多个显示器 并且有兴趣将我的应用程序制作为跨桌面配置尽可能兼容 我已经知道可以将
  • VB - 以隐式方式链接 DLL

    我正在开发 VB6 图形界面 并且需要隐式链接到 DLL 这样做的动机来自于我上一个问题 https stackoverflow com questions 5194573 有问题的 DLL 使用静态 TLS declspec thread
  • 什么是WINVER?

    我正在查看一些代码 他们有这一行 define WINVER 0x0501 in stdafx h文件 为什么需要定义WINVER 它如何影响您的代码 有人可以解释一下吗 WINVER 确定构建应用程序所需的最低平台 SDK 这反过来又会在
  • 如何使用Python在Django for Windows中激活虚拟环境?

    我被告知要在 Django for Windows 中激活虚拟环境 我应该尝试 environment path Scripts activate 但是当我输入该命令时 cmd 返回此错误 该系统找不到指定的路径 我通过输入以下命令创建了虚
  • conio.h 不包含 textcolor()?

    我一直在考虑在我用 C 编写的 DOS 程序中使用颜色 有人告诉我conio h有textcolor 函数 但是当我在代码中使用它时 编译器 链接器会向我抛出错误 说我对该函数有未定义的引用 Does conio h真的有这个功能还是有人告
  • 仅在单个端口 8080 上转发到本地主机(Windows)可能吗? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我知道如何在 Windows 上使用 xampp 设置本地网络服务器 我在主机文件 c windows system32 drivers etc ho
  • 如何验证文件名称在 Windows 中是否有效?

    是否有一个 Windows API 函数可以将字符串值传递给该函数 该函数将返回一个指示文件名是否有效的值 我需要验证文件名是否有效 并且我正在寻找一种简单的方法来完成此操作 而无需重新发明轮子 我正在直接使用 C 但针对的是 Win32
  • Windows 上的递归移动命令

    我需要做一个 sh 的 bat 副本 我不太了解 Windows cmd 在 Linux 上我可以做 mv or rsync a SOURCE DEST remove sent files ignore existing whole fil
  • 如何捕获未发送到 stdout 的命令行文本?

    我在项目中使用 LAME 命令行 mp3 编码器 我希望能够看到某人正在使用什么版本 如果我只执行 LAME exe 而不带参数 我会得到 例如 C LAME gt LAME exe LAME 32 bits version 3 98 2
  • 从其可执行文件的路径获取服务名称

    我有一个可执行文件的路径 它是一个正在运行的服务应用程序 例如 C Program Files x86 Someapp somesvc exe 我想停止并启动它 为此我想我需要获取服务的名称 如下所示 this https stackove

随机推荐

  • openstack调优

    cinder限速 为了减缓来自实例的数据访问速度的减慢 openstack block storage支持对卷数据复制带宽的速率限制 请修改cinder后端配置文件将文件卷复制带宽限制为最高100MB s The upper limit o
  • arm 关于m a r系列区别

    arm系列contex的a r m的区别 从cortex开始 分为三个系列 a系列 r系列 m系列 m系列与arm7相似 不能跑操作系统 只能跑ucos2 偏向于控制方面 说白了就是一个高级的单片机 a系列主要应用在人机互动要求较高的场合
  • Github Copilot连接不上服务器

    现象 报错 ERROR default 2023 09 08T15 47 01 542Z GitHub Copilot could not connect to server Extension activation failed conn
  • Python 2.7下下载并安装nltk (自然语言处理工具包)

    1 在cmd窗口中 进入到python的文件夹内的 Scripts内 我的目录地址是 D using Python Scripts 命令行输入 easy install pip 运行结束后 安装PyYAML and NLTK 命令行输入 p
  • c++ 中bool 的默认值

    比如在Test h中定义变量 isFirst Test h头文件 ifndef TEST H define TEST H class Test private bool isFirst endif 然后访问它 include Test h
  • Java面试题整理——网络

    Java面试题整理 网络 网络 1 常用的 http 响应码及含义 200 OK 请求成功 这是对HTTP请求成功的标准应答 201 Created 请求创建被完成 同时新的资源被创建 202 Acceptd 供处理的请求已被接受 但是处理
  • 【VxWorks】Vxworks、QNX、Xenomai、Intime、Sylixos、Ucos等实时操作系统的性能特点

    目录 1 VxWorks操作系统 2 QNX操作系统 3 Xenomai操作系统 4 INtime操作系统 5 SylixOS操作系统 5 1 SylixOS官网
  • uniapp 跳转传参 [‘object‘] 问题解决, 遇坑解决

    普通 号拼接传参不知道什么原因 接收参数时转换数据失败 换成模板传参试试 解决 传 ckgd productList 传参时先转为json 一定要用模板字符串传参 如下 uni navigateTo url pagesA service d
  • MySQL执行器与存储引擎是怎么交互的

    体系结构 1 连接器 2 查询缓存 3 分析器 4 优化器 多个索引 选择哪个索引 join的顺序 5 执行器 调用存储引擎接口获取满足条件的第一行记录 调用存储引擎接口获取满足条件的下一行记录 6 存储引擎 索引下推 假设现子表T有字段
  • c++泛型算法扩展和迭代器、反向迭代器

    cout lt lt 插入迭代器 lt lt endl back inserter 创建一个使用push back的迭代器 front inserter 创建一个使用push front的迭代器 inserter 创建一个使用insert的
  • bee-box

    这篇博客就是为了记下bee box做题过程 随便记记 免得忘了 安装 先去官网下载了 然后分个新的盘单独放进去 打开虚拟机 双击bee box vmx就能安装了 打开里面的火狐会自动跳去一个登录界面 默认账号和密码是bee bug 登录然后
  • GitHub 源代码被泄露了...

    阅读本文大概需要 4 分钟 来自量子位 GitHub 忽然 开源 了自己代码的一部分 还将它放在了 GitHub 上 事件起因是这样的 TypeScript 的开发者 Resynth 忽然 Po 了篇文章 表示代码托管服务 GitHub 的
  • 【牛客网OJ题】不要二

    题目描述 二货小易有一个WH的网格盒子 网格的行编号为 0 H 1 网格的列编号为0 W 1 每个格子至多可以放一块蛋糕 任意两块蛋糕的欧几里得距离不能等于2 对于两个格子坐标 x1 y1 x2 y2 的欧几里得距离为 x1 x2 x1 x
  • spring注解:@Autowired、@Qualifier、@Primary

    Autowired 默认情况下 Autowired 按类型装配 Spring Bean 如果容器中有多个相同类型的 bean 则框架将抛出 NoUniqueBeanDefinitionException 以提示有多个满足条件的 bean 进
  • Raki的读paper小记:SELF-INSTRUCT: Aligning Language Models with Self-Generated Instructions

    Abstract Introduction Related Work 研究任务 改进大模型遵循指令的能力 SELF INSTRUCT提供了一种几乎无需注释的方法来使预训练语言模型与指令对齐 已有方法和相关工作 许多研究提出使用语言模型进行数
  • Vue 2.0双向绑定原理的实现

    Object defineProperty方法 vue js是采用数据劫持结合发布 订阅者模式的方式 通过Object defineProperty 来劫持各个属性的setter getter 在数据变动时发布消息给订阅者 触发相应的监听回
  • 分布式系统的正确性验证方法

    分布式系统的正确性验证方法 1 Jepsen框架 Jepsen是一个开源的分布式一致性验证框架 可用于验证分布式数据库 分布式消息队列 分布式协调系统 Jepsen探索特定故障模式下分布式系统是否满足一致性 Jepsen框架是一个
  • 用于构建 RESTful Web 服务的多层架构

    文章出自 Bruce Sun Java 架构师 IBM 简介 由于它简便 轻量级以及通过 HTTP 直接传输数据的特性 RESTful Web 服务成为基于 SOAP 服务的一个最有前途的替代方案 在本文中 我们将概述 REST 和 RES
  • 分享63个最常见的前端面试题及其答案

    在前端面试中 各种面试题都会遇到 因此 今天我们整理了60 比较常见繁杂的面试题 希望这些面试题能够对你有所帮助 当然 这些面试题的答案都不是标准答案 只是对答案做了一个简介明了的说明 希望可以快速帮助你梳理重点核心内容 这些答案可以作为参
  • 密码破解---实验八:Windows本地破解用户口令

    目录 一 实验目的及要求 二 实验原理 1 Windows NT 系统密码存储的基本原理 2 SAM的导出方法 三 实验环境 四 实验步骤及内容 五 实验总结 六 分析与思考 一 实验目的及要求 1 了解Windows2000 XP Ser