前言:这两天有人发了一篇文章给我,这两天趁着下班加班加点看了一下漏洞逻辑,发现这个漏洞贼有意思,就水一篇关于这篇漏洞的原理,实践等五一有空再做吧。
1.漏洞利用
windows10在锁屏的时候,通过UI界面可以进行无线连接,这时候我们通过伪造恶意无线。(当然这里有另一种玩法就是如果PC有设置为自动连接WIFI,我们伪造SSID也能获取到密码,前提是知道SSID是啥)并开启扩展身份验证协议。
如果当前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.4 16字节的用户hash,填充5个字节0生成21字节,分割成3个7字节的密钥
3.53.2生成的挑战值的前8位,分别与三个7字节的密钥进行加密,生成24字节的结果
3.6 发送16字节的客户端挑战,和24字节的3.5的结果
4.服务端通过客户端的密码生成密钥解密24字节的响应值,并通过客户端挑战值,服务段挑战值,用户名进行计算。并与解密内容进行匹配。
5.......提供服务/客户端校验服务端(跟本次漏洞无关就不详细写了,有兴趣的可以去看下面的链接)
https://penguin-breeder.org/pptp/download/pptp_mschapv2.pdf
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进制的)
这样要想暴力破解出密钥就不算太难
167+167+162=536871168,5亿多次即可
当我们拿到hash的时候就可以通过各种姿势,SMB也好,跑出明文密码直接登陆。。。。