0x01、前言

NTLM使用在Windows NT和Windows 2000 Server或者之后的工作组环境中(Kerberos用在域模式下)。在AD域环境中,如果需要认证Windows NT系统,也必须采用NTLM。较之Kerberos,基于NTLM的认证过程要简单很多。NTLM采用一种质询/应答(Challenge/Response)消息交换模式

0x02、LM hash & NTLM hash

假设我的密码是admin,那么操作系统会将admin转换为十六进制,经过Unicode转换后,再调用MD4加密算法加密,这个加密结果的十六进制就是NTLM Hash

admin -> hex(16进制编码) = 61646d696e

61646d696e -> Unicode = 610064006d0069006e00

610064006d0069006e00 -> MD4 = 209c6174da490caeb422f3fa5a7ae634

LM HASH加密:

 假设明文口令是“Welcome”,首先全部转换成大写“WELCOME”,再做将口令字符串大写转后后的字符串变换成二进制串: “WELCOME” -> 57454C434F4D4500000000000000
如果明文口令经过大写变换后的二进制字符串不足14字节,则需要在其后添加0x00补足14字节。然后切割成两组7字节的数据,分别经str_to_key()函数处理得到两组8字节数据:
57454C434F4D45 -str_to_key()-> 56A25288347A348A
00000000000000 -str_to_key()-> 0000000000000000
这两组8字节数据将做为DESKEY对魔术字符串“KGS!@#$%”进行标准DES加密
"KGS!@#$%" -> 4B47532140232425
56A25288347A348A -对4B47532140232425进行标准DES加密-> C23413A8A1E7665F
0000000000000000 -对4B47532140232425进行标准DES加密-> AAD3B435B51404EE
将加密后的这两组数据简单拼接,就得到了最后的LM Hash
LM Hash: C23413A8A1E7665FAAD3B435B51404EE
NTLM HASH加密:

假设明文口令是“123456”,首先转换成Unicode字符串,与LM Hash算法不同,这次不需要添加0x00补足14字节
"123456" -> 310032003300340035003600
从ASCII串转换成Unicode串时,使用little-endian序,微软在设计整个SMB协议时就没考虑过big-endian序,ntoh*()、hton*()函数不宜用在SMB报文解码中。0x80之前的标准ASCII码转换成Unicode码,就是简单地从0x??变成0x00??。此类标准ASCII串按little-endian序转换成Unicode串,就是简单地在原有每个字节之后添加0x00。对所获取的Unicode串进行标准MD4单向哈希,无论数据源有多少字节,MD4固定产生128-bit的哈希值,
16字节310032003300340035003600 -进行标准MD4单向哈希-> 32ED87BDB5FDC5E9CBA88547376818D4
就得到了最后的NTLM Hash: 32ED87BDB5FDC5E9CBA88547376818D4

0x03、本地认证

​ 本地登录windows的情况下操作系统会使用用户输入的密码作为凭据,去跟系统中的sam文件中的密码去做比较;就类似web网站登录一样原理。

​ 当用户选择登录时,会弹出winlogon.exe接收输入的密码,这时候会将密码交给lsass.exe,这个进程重会存储一份明文密码;将明文密码加密成NTLM HASH,对SAM数据库再进行认证比较

0x04、网络认证

网络认证是什么呢?其实就是NTLM 协议。那NTLMNTLM hash有什么关系?

NTLM是一种网络认证协议,它是基于挑战(Chalenge)/响应(Response)认证机制的一种认证模式

关于NTLM Hash与NTLM

在Windows中,密码Hash目前称之为NTLM Hash,其中NTLM全称是:“NT LAN Manager”。

这个NTLM是一种网络认证协议,与NTLM Hash的关系就是:NTLM网络认证协议是以NTLM Hash作为根本凭证进行认证的协议。

1、NTLM v2协议认证过程

NTLM协议的认证过程分为三步:

  • 协商
  • 质询
  • 验证

协商:主要用于确认双方协议版本

质询:就是挑战(Chalenge)/响应(Response)认证机制起作用的范畴,本小节主要讨论这个机制的运作流程。

验证:验证主要是在质询完成后,验证结果,是认证的最后一步。

服务器端收到客户端的Response后,比对Chanllenge1与Response是否相等,若相等,则认证通过。

2、质询的完整过程

  • 1、客户端向服务器端发送用户信息(用户名)请求
  • 2、 服务器接受到请求,生成一个16位的随机数,被称之为“Challenge”, 使用登录用户名对应的NTLM Hash加密Challenge(16位随机字符), 生成Challenge1。同时,生成Challenge1后,将Challenge(16位随机 字符)发送给客户端。
  • 3、客户端接受到Challenge后,使用将要登录到账户对应的NTLM Hash加密Challenge生成Response,然后将Response发送至服务器端。

其中,经过NTLM Hash加密Challenge的结果在网络协议中称之为Net NTLM Hash

更为细节的流程图如下

流程大致这样,那response是怎么回事呢?其实就是net-ntlm hash。总的来说,就是response的内容,就是net-ntlm hash

3、NET-NTLM hash格式

认证成功:

认证失败:

查看第二个数据包,获得Challenge,为:77effc5381037df8

Net-NTLM Hash格式为:username::domain:challenge:HMAC-MD5:blob

username(要访问服务器的用户名):xie

domain(访问者主机名或者ip):WIN7

challenge(数据包2中服务器返回的challenge值):77effc5381037df8

HMAC-MD5(数据包3中的NTProofStr): b6b777ced0128e3f587fe08b98853e13

blob(blob对应数据为NTLMv2 Response去掉NTProofStr的后半部分):0101000000000000f27fa3a7aa61d501ba3237c701d9f3970000000002000e00570049004e00320030003000380001000e00570049004e00320030003000380004000e00570049004e00320030003000380003000e00570049004e00320030003000380007000800f27fa3a7aa61d50106000400020000000800300030000000000000000100000000200000ca0ee75c65eaa5367775b826f949798912fa871a19e5d17f9b49587485a8e6620a001000000000000000000000000000000000000900240063006900660073002f003100390032002e003100360038002e00310030002e0031003500000000000000000000000000

4、NTLM V2协议

NTLM v1与NTLM v2最显著的区别就是Challenge与加密算法不同,共同点就是加密的原料都是NTLM Hash。

下面细说一下有什么不同:

  • Challage:NTLM v1的Challenge有8位,NTLM v2的Challenge为16位。
  • Net-NTLM Hash:NTLM v1的主要加密算法是DES,NTLM v2的主要加密算法是HMAC-MD5。

现在应该能够理解什么是NTLM、NTLM Hash、LM、LM Hash、Net NTLM Hash了吧?

0x05、Pass The Hash

要完成一个NTLM认证,第一步需要客户端将自己要认证的 用户名发送至服务器端,等待服务器端给出的Challenge

其实哈希传递就是使用用户名对应的NTLM Hash将服务器给出的 Chanllenge加密,生成一个Response,来完成认证。

windows 常见SID

administrator 		 - 500
Guest - 501
kbrtgt - 502
doamin admins - 512
Domain users - 513
Domain Controllers - 515
Domain Controllers - 516
Enterprise Admins - 519

1、工作组 - Pass the Hash

  • Windows Vista 之前的机器,可以使用本地管理员组内用户进行攻击。
  • Windows Vista 之后的机器,只能是administrator用户的哈希值才能进行哈希传递攻击,其他用户(包括管理员用户但是非administrator)也不能使用哈希传递攻击,会提示拒绝访问。(主要以为SID不为500原因)
privilege::debug    #先提权
#使用administrator用户的NTLM哈希值进行攻击
sekurlsa::pth /user:用户名 /domain:目标机器IP /ntlm:密码哈希

执行完mimikatz即可弹出该机器cmd

2、域环境 - Pass the Hash

在域环境中,当我们获得了域管理员组内用户的NTLM哈希值,我们可以使用域内的一台主机用mimikatz对域内任何一台机器(包括域控)进行哈希传递攻击。执行完命令后,会弹出CMD窗口,在弹出的CMD窗口我们可以访问域内任何一台机器。前提是我们必须拥有域内任意一台主机的本地管理员权限和域管理员的密码NTLM哈希值。

  • 域:hack.com
  • 服务器地址:WIN2008.hack.com
  • 域管理员: test
privilege::debug    #先提权

#使用域管理员test的NTLM哈希值对域控进行哈希传递攻击,域用户test在域管理员组中
sekurlsa::pth /user:test /domain:hack.com /ntlm:6542d35ed5ff6ae5e75b875068c5d3bc

执行完mimikatz即可弹出该机器cmd

NTLM协议与Pass the Hash的爱情的更多相关文章

  1. 域渗透-凭据传递攻击(pass the hash)完全总结

    总结下PtH具体形式(wmicexec.powershell.msf等) 0x01 PtH攻击原理 && 黄金白银票据 PtH攻击原理 wiki  https://en.wikiped ...

  2. 域渗透:pth(pass the hash)

    pass the hash原理: 在Windows系统中,通常会使用NTLM身份认证,NTLM认证不使用明文口令,而是使用口令加密后的hash值,hash值由系统API生成(例如LsaLogonUse ...

  3. 哈希传递攻击利用(Pass The Hash)

    最近又复习了一下内网的相关知识,把以前的整理了一下发出来做个记录. 0x01 哈希传递攻击概念 有一点内网渗透经验的都应该听说过哈希传递攻击,通过找到相应账户相关的密码散列值(LM Hash,NTLM ...

  4. PtH(hash传递攻击)原理探秘

    背景知识 Windows 横向渗透的两种方式 1.hash传递攻击,通过传递NTLM-Hash,登录机器,简称PtH: 2.ticket传递攻击,通过传递kerberos的ticket,登录机器,简称 ...

  5. Windows NTLM Hash和Hash传递、Key传递攻击

    Hash(Key) 获取 工具: Mimikatz 用法: .\mimikatz.exe privilege::debug #查看权限 sekurlsa::logonpasswords #获取hash ...

  6. 域渗透基础之NTLM认证协议

    域渗透基础的两个认证协议ntlm和Kerberos协议是必须总结的~ 这篇简单总结下ntlm协议 晚上写下kerberos 0x01 NTLM简介 NTLM使用在Windows NT和Windows ...

  7. 浅谈NTLM Hash

    认识Windows Hash 早期SMB协议在网络上传输明文口令.后来出现LAN Manager 挑战/响应验证机制(LM),其很容易破解,因此微软提出了WindowsNT挑战/响应验证机制(NTLM ...

  8. Windows协议 NTLM篇

    NTLM 基础 介绍 LM Hash & NTLM Hash Windows本身是不会存储明文密码的,只保存密码的hash 其中本机用户的密码hash是放在本地的SAM文件里面,域内用户的密码 ...

  9. NTLM认证协议及SSPI的NTLM实现

    没错,NTLM就是你听说过的那个NTLM.是微软应用最广泛的认证协议之一. NTLM是NT LAN Manager的缩写,这也说明了协议的来源.NTLM 是 Windows NT 早期版本的标准安全协 ...

随机推荐

  1. 问渠那得清如许?为有源头活水来——对【近取Key】产品进行的深度测评与解析

    在 Build To Show 的场景中,大家各显身手,用各种办法展现技术,的确很难在单一的维度上确定谁赢谁输.但是,在 Build To Win 的场景中,往往市场就是那么一块, 竞争对手占了 70 ...

  2. 折腾Linux内核编译

    计网提高实验.指导书给的是远古版本2.6.39.2,轻易在某hub上找到下载地址 查表 看起来Ubuntu 11.04离得最近,遂下一个镜像 懒得上google检索了,编译准备先follow这篇博客试 ...

  3. select执行顺序

    先from 找到表on过滤 找到两张表有对应关系的记录按join的方式添加外部行where 过滤group by分组having 过滤select 从having 过滤出来的字段中选择需要的字段dis ...

  4. Node.js核心模块API之文件操作

    参考:https://www.runoob.com/nodejs/nodejs-fs.html 异步I/O 1,文件操作 2,网络操作 在浏览器中也存在异步操作 1,定时任务 2,事件处理 3,Aja ...

  5. 解决nohup: 忽略输入并把输出追加到"nohup.out"或者nohup: 忽略输入重定向错误到标准输出端

    nohup启动脚本的时候,没有指定输出路径,默认使用当前目录的nohup.out 例如下面这句就是默认使用nohup.out作为输出文件: nohup script.sh & 改成下面的,则/ ...

  6. git 速度慢问题解决

    使用VPN上网后,如果git下载速度还是很慢说明没有正确设置代理 查看你的代理模式是否是pac代理,如果是改成全局或者Http代理,pac代理会选择性的代理网站,可能会略过某些网站. 如果还是比较慢则 ...

  7. JDK、JRE 和 JVM 的区别

    JDK JDK 是 Java Development Kit 的缩写,JDK 是 Java 语言的软件开发工具包( SDK ).它提供了Java 开发.编译.运行需要的文件和环境. 如果你是 Java ...

  8. linux环境下时区无法设置(UTC无法更改为CST)的问题解决

    在进行linux下修改时区的时候 总是修改不了 修改成 Asia/Shanghai  但是 时区总是 +0000 却不是想要的+0800 按照网上的方法 A方法:tzselect:执行tzselect ...

  9. PHP相关session的知识

    由于http协议是一种无状态协议,所以没有办法在多个页面间保持一些信息.例如,用户的登录状态,不可能让用户每浏览一个页面登录一次.session就是为了解决一些需要在多页面间持久保持一种状态的机制.P ...

  10. harobor私有docker镜像仓库

    Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,由VMware开源,其通过添加一些企业必需的功能特性,例如安全.标识和管理等,扩展了开源 Docker Distribu ...