CVE-2021-28316的5亿次碰撞 – 作者:꧁

*本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。

前言:这两天有人发了一篇文章给我,这两天趁着下班加班加点看了一下漏洞逻辑,发现这个漏洞贼有意思,就水一篇关于这篇漏洞的原理,实践等五一有空再做吧。

1.漏洞利用

windows10在锁屏的时候,通过UI界面可以进行无线连接,这时候我们通过伪造恶意无线。(当然这里有另一种玩法就是如果PC有设置为自动连接WIFI,我们伪造SSID也能获取到密码,前提是知道SSID是啥)并开启扩展身份验证协议。

1620540092_60977abc5950d0a62a39d.png!small

如果当前PC为域用户,当PC连接到恶意WIFI的时候,会进行ms-chapv2认证,并把自己的ntlm-hash作为密钥加密一串挑战值发给服务器,当我们抓到这个加密的挑战值的时候就可以逆推用户的密码hash。(这个过程很神奇,详见3)

视频地址如下:

https://shenaniganslabs.io/images/airstrike/video.mp4

2.ms-chapv2认证

MS-CHAP是微软版本的挑战握手认证协议(CHAP),MS-CHAP被当做一个认证协议,在VPN/PPP中使用。它还被当做用来提供WiFi安全的RADIUS服务器的一个认证选项,后者使用WPA企业版协议。此后,它更被用作受保护可扩展身份验证协议(PEAP)的主要安全选项。

认证过程如下:

1.客户端请求连接

2.服务段生成一个16字节的随机挑战值

3.客户端收到挑战值后回应

3.1 客户端也随机生成一个16字节的客户端挑战值

3.2客户端用通过SHA计算生成挑战值(客户端挑战值,服务段挑战值,用户名)

3.3客户端通过用户密码生成NT hash

3.416字节的用户hash,填充5个字节0生成21字节,分割成3个7字节的密钥

3.5 3.2生成的挑战值的前8位,分别与三个7字节的密钥进行加密,生成24字节的结果

3.6发送16字节的客户端挑战,和24字节的3.5的结果

4.服务端通过客户端的密码生成密钥解密24字节的响应值,并通过客户端挑战值,服务段挑战值,用户名进行计算。并与解密内容进行匹配。

5…….提供服务/客户端校验服务端(跟本次漏洞无关就不详细写了,有兴趣的可以去看下面的链接)

https://penguin-breeder.org/pptp/download/pptp_mschapv2.pdf

1620540391_60977be74c5ba33304a3d.png!small

3.CVE-2021-28316的实现

一开始我就在想为什么可以逆推用户的密码hash,认为这是不可思议的。但是看到认证过程后,并非不可能。

作为服务端,我们有什么,

1.客户端挑战值(客户端发给我们的)

2.服务端挑战值(我们自己生成的)

3.向我们认证的用户名

根据这三点我们就可以运用SHA计算计算出客户端发送过来的明文挑战值

4.客户端发送过来的是经过自身hash位密钥des加密的明文挑战值。

前8位:明文挑战值以用户ntlm-hash(共16位)前7位des加密的密文中间8位:明文挑战值以用户ntlm-hash(共16位)前8-14位des加密的密文末8位:明文挑战值以用户ntlm-hash(共16位)前后两位加5个0des加密的密文

这样我们DES加密有了明文,有了结果需要算密钥。

密钥还是固定为的16进制(因为ntlm-hash是16进制的)

这样要想暴力破解出密钥就不算太难

1620541010_60977e52361d7e67f6230.png!small

当我们拿到hash的时候就可以通过各种姿势,SMB也好,跑出明文密码直接登陆。。。。

来源:freebuf.com 2021-05-09 14:12:34 by: ꧁

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论