smb协议

  1. 前言
  2. 通过smb抓包破解windows登录密码
  3. SMB与CTF
  4. 最后

前言

因为iOS13之后文件app的“连接到服务器”功能是利用smb的,所以本来想借此了解一下smb,能搞懂最好,结果发现搞着搞着就偏离了主题,变成了解window密码ntlm hash去了,算了算了。。。

#SMB简介
SMB(Server Message Block)通信协议,一种应用层网络传输协议,由微软开发,主要功能是使网络上的机器能够共享计算机文件、打印机、串行端口和通讯等资源。
主要是作为Microsoft网络的通讯协议。后来Linux移植了SMB,并称为samba。

#smb协议原理
(本来想要这样子Google出来为什么smb可以让ios连上windows,后来发现我真的是太天真了。。。。)

主要看了两篇博客:SMB协议原理抓包分析,SMB会话建立流程及抓包分析
于是拿出电脑和ipad,打开了wireshark,照着做了一遍:

这个是一个连接请求,从我的ipad(192.168.137.69)发送到我的电脑(192.168.137.1)
User name是俩问号是因为我用的是中文名。。。。。

不赘述了,博文中提到的数据报在上图中都有,一一点开看看,然后试着理解

通过smb抓包破解windows登录密码

Google的时候看到这个有趣的东西,发现自己也可以做,于是在这条不归路上越走越远。。。

又是两篇博文:SMB抓包破解windows登陆密码,路由器抓包分析之SMB篇

先贴一下SMB的认证过程:

1.正常情况,当client端登陆时需要先输入username,password和domain[默认是.,表示本地],之后client端会自己计算出password用DES加密后的hash,并将此hash暂时保存在本地;
2.接着,client端会将自己的username明文发送给DC[server];
3.此时,DC会生成一组8字节的随机数,也叫challenge[挑战码],返回给client端;
4.当client端在收到这个挑战码以后,会把先把它拷贝一份出来,然后再拿着这个挑战码和之前已经加密的密码hash再进行一次加密,加密后的东西叫response[响应],最后再将challenge,response和username一并发送给server端;
5.server端在接收到client端传过来的这个三个值以后会将它们分别都转发给DC;
6.DC在接收到username,response,challenge以后,会根据传过来的username,到自己的账号数据库中去查出来这个username所对应的hash,然后,再拿着这个hash和刚刚传过来的challenge再进行一次加密;
7.最后,就剩比对了,把客户端传过来的response和在[6]中最后加密的hash值进行对比,如果一致,ok,认证通过,登录成功,反之,则登录失败。

所以通过理论上可以根据数据包中的hash值解出windows的登陆密码(因为连接smb用的是windows账户和登陆密码)
但是第一篇没看懂。。。不知道它的hash值怎么来的,所以尝试一下按照第二篇的教程,看下能不能破解自己的登陆密码。。。
根据Net-ntlmv1s数据包的固定拼接:

username::hostname:LM response:NTLM response:server challenge

然后用自己的数据包进行拼接:
。。。。
那么问题又来了。。我的中文user name,全零LM response和challenge该怎么拼接。。。。。
尝试失败
over。。

更新:

又看了一篇博客:Windows下的密码hash——NTLM hash和Net-NTLM hash介绍

其实之前的lm response和challenge不应该是全零 只是我找错位置了而已。。。。

但是中文用户名始终是个大问题,然后我通过新建一个账户解决了。。。。

重新抓包结果

拼接过程

拼接结果:

silver:::83a66e53b3263bd8:4ca67c9214cfcd77d90da3a6127b130f:01010000000000008016ff43cca5d501a2e56fafc1a7067c0000000001001e004c004100500054004f0050002d0042004b004a0039004d0049005300310002001e004c004100500054004f0050002d0042004b004a0039004d0049005300310003001e004c004100500054004f0050002d0042004b004a0039004d0049005300310004001e004c004100500054004f0050002d0042004b004a0039004d004900530031000600040002000000070008002b92ac44cca5d50109001c003100390032002e003100360038002e003100330037002e0031002f000a001000000000000000000000000000000000000000000000000000

然后丢进hashcat爆破密码(这一句话折腾了我一个星期)

解释一下: -m 是mode;5600 是net-NTLMv2;
-a是attack-mode;
3是掩码爆破(不使用字典);
后面一串是上面拼接得到的;
–force是强制执行;
–show是将密码明文显示;

得到密码:flag

SMB与CTF

google了一下,ctf中的smb大多数体现在AWD中,而解题赛中出现的比较少(好吧我没搜到)
不过我认为出一道这样破解密码得到flag的题目也未尝不可。。。

最后

折腾累了,不写了。。。。。

文章标题:smb协议

本文作者:Kyle

发布时间:2020-02-18, 12:20:41

最后更新:2020-02-18, 13:30:38

原始链接:https://silver2835.github.io/2020/02/18/smb%E5%8D%8F%E8%AE%AE/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录