Windows Smb 欺骗重放攻击利用_集群智慧网络安全云
全国客户服务热线:4006-054-001 疑难解答:159-9855-7370(7X24受理投诉、建议、合作、售前咨询),173-0411-9111(售前),155-4267-2990(售前),座机/传真:0411-83767788(售后),微信咨询:543646
企业服务导航

Windows Smb 欺骗重放攻击利用

发布日期:2024-05-19 浏览次数: 专利申请、商标注册、软件著作权、资质办理快速响应热线:4006-054-001 微信:15998557370


Windows Smb 欺骗重放攻击利用

文章作者:klion 本文来源:MITRE|ATT&CK中文站 https://huntingday.github.io/ 0x01本节重点快速预览 观察正常的net-ntlm认证和带有中间人攻击的net-ntlm认证的区别 简单了解重放攻击的一些利用前提条件 smb重放在当前已控机器为windows下的各种利用方式 smb重放在当前已控机器为linux下的各种利用方式 关于msf中的一些smb重放攻击模块的简单利用 如何简单防御这种攻击方式 大致环境说明[注:此处将全程以smbv2.x版本为例进行演示]: 0x02先来仔细观察正常的net-ntlm认证和带有中间人攻击的net-ntlm认证的区别 此处我们就不妨再简单回顾下net-ntlm的认证过程,首先,当用户在Client上正常输入账号密码和域以后,此时密码会率先被hash一次,而后Client将username发给Server,Server会返回一个16字节的挑战码,Client收到这个挑战以后会继续用那个之前已经hash过的密码用挑战再hash一次[生成response],之后再把这个挑战和response一同发给server,server再丢给dc去验证,在之前的文章中,我们已经详细说明过关于net-ntlm的认证过程,还不太清楚的朋友不妨去那里再看看,这里纯粹是为了图方便,就暂且假定DC和Server在同一台机器[smbserver]上,ok,开始今天的正题,上面说的认证过程都是假定在就只有客户端和服务端两台机器没有任何外部恶意干扰的前提下,如果此时两台机器间莫名多了一个第三者,而这个第三者通过不停的转换机器角色来同时欺骗Smbserver和Client两端,那后果可想而知,这样一来的话,不管是挑战码还是response此时都要经过这个第三者,就相当于这个第三者可以拿着Client的凭据去访问SmbServer中的资源,如果这个凭据的用户权限在smbserver中很大,大到可以随意操作smbserver,此时凭据再一旦认证成功,随后再立即执行一段shellcode,那Smbserver基本也就沦陷了,所以,看到这儿大家也应该都明白了,这本质上只是一种设计缺陷而并非什么漏洞,是在设计之初考虑问题不到位所导致的 关于smb重放的利用核心: 从上面的攻击过程来看,此利用的核心主要在于先欺骗后重放上,首先,需要明白的是,内网其它机器的流量,是不会无故经过你的机器的,如果流量不能经过自己的机器,那也就意味着后面拿不到目标机器请求的挑战和响应,自然也就没法进行重放利用了,所以,我们就需要借助其它的一些手段让目标机器的指定流量都事先经过自己的机器,而可用于欺骗的方式就相对比较多了,比如,众所周知的NBNS,DNS,LLMNR,WPAD,PROXY,HTTP,HTTPS...关于对每种协议欺骗的利用细节,内容确实较多,准备后续再继续展开单独来说明,今天我们暂时只侧重在初步利用上,先有个总体认知即可,更深度的利用,来日方长 0x03简单了解关于smb重放的一些利用条件 首先来简单看下不同Windows版本所对应的Smb版本,顾名思义,smb版本越高,内置的安全机制就越完善,利用难度也就越大,另外,它默认工作在tcp/udp的139和445端口上,属上层协议[偏应用层] 关于smb重放的一些利用前提条件: 目标机器不能开启smb签名[只要说到签名,核心就是为了防数据篡改,任何协议都是如此],否则利用无效,一般情况下,windowsserver会默认开启,而windows单机系统[win7/8/8.1/10]默认都不会开,另外,对一些打了ms08-068[KB957097]补丁的老系统[比如windowsxp/2003以下的系统]利用也是无效的,到此为止,想必大家心里都有底了,其实主要还是想在不得已的情况下,以此方式来突破一些核心的内网服务器,既然是涉及到欺骗动作,动静儿肯定不会小到哪里去,但相比arp来讲,一个应用层的协议欺骗动静肯定是要比arp小的多的多,ok,废话不多讲,来简单看下实际利用 首先,就来尝试快速扫下目标内网中所有禁用了smb签名的windows机器,很快就发现两台windows机器,一台win7和一台winserver2008r2,且smb签名默认都已被禁用,现在我们的目的就是想对win7这台机器进行重放来拿到它的net-ntlmv2的hash好做下一步的操作,如果你想直接利用此hash再一并自动获取那台windows2008r2机器的system权限的shell,就需要有个前提,就是这两台机器的账号密码必须完全一致,不然重放的时候肯定会认证失败,认证失败也就意味着没法登陆,后面的一些列动作自然也就没法执行了,本文的后续操作会全部侧重在在线抓hash而非直接拿shell上,如果真的是实战利用,个人也不建议直接这样去拿shell,一来不靠谱[虽然表面上看起来很方便,挺自动化,但在实战中这未必是好处,反而是冗余的累赘],二来太招摇,抓个hash和直接上shell,完全不是一个重量级的操作,假设目标内网机器全部脱网?上shell肯定会更麻烦,与其在一个不确定性的环境里折腾那个,不如先想办法把hash拿到,hash有了,后面想怎么玩都可以,除非你事先就直接处在别人的内网中[比如,vpn内网],否则最好不要直接上shell,废话有点多了,只是希望大家能明白 0x04smb重放在当前已控机器为windows下的各种利用方式[借助Inveigh脚本实现] 首先,我们先来假设这么一种情况,当前你已经拿下了目标web所在的那台服务器[也就是IIS75-CN这台机器,并且它在纯内网环境下(暂且可理解为只有内网ip的那种)],而后,你又通过其它的方式确定了同内网下的某个管理员的个人机位置[即PC-Win7CN这台机器],现在的目的,就是想借助IIS75-CN这台机器对同网段下的PC-Win7CN机器以协议欺骗的方式来拿到IIS75-CN这台机器管理员的net-ntlmv2hash,其实,说白点就是钓鱼,至于具体怎么做就很简单了,我们只需要在web那台机器的网站主页里随便插一个带有unc路径的图片即可,因为事先已在同内网下做好欺骗,所以此时当管理员一打开网站,他机器的net-ntlmhash就会被我们捕捉到,后面想拿着这个hash做什么就看实际需求了,为什么要用unc路径?原因就是它请求资源走的是smb[file://],而我们要利用的恰恰就是这一点,到此就该很明了了,ok,说完思路,咱们就来看看具体怎么搞,下面先来介绍一个非常实用且功能强悍的powershell脚本Invoke-Inveigh,集各种协议欺骗和smb重放利用与一身的内网攻击套件,此处暂以在线抓hash为主,到后续我们还会找机会单独说明该工具,那时再去看relay部分的深度利用 先在IIS75-CN这台机器上用Inveigh做好欺骗,为了更贴近实战,仍然会直接在beacon下操作,实战中大可不必把所有的协议欺骗都开起来,这样动静儿会很大,其实有一两个足矣 而后,去指定的目标站点目录下找到主页索引文件编辑插入以下unc路径,此处的内网ip,可以随便指向一台目标内网确实存活的windows机器的ip,至于那个共享在不在都关系不大,因为我们的根本目的是为了抓PC-Win7CN机器管理员的hash 一旦管理员在PC-Win7CN机器上访问该网站,机器用户的net-hashv2hash就会被我们捕捉到,其实并不仅仅是PC-Win7CN这一台机器的hash,同内网下的所有机器只要打开该网站,hash也都会被捕捉到 http://192.168.3.129/ 拿到net-ntlmv2的hash以后,再粘回来自己用hashcat尝试跑一下,万一跑到了密码明文,特别注意,我此处说的是假设你运气好,万一,跑出了明文,那后面的事情,就相对好办了[其实,大多数情况下都是很难跑出来的,尤其目标域内强制强密码策略,几乎都是看人品运气] #hashcat64.exe-a0-m5600hash.txtpasswd.txt 最后,抓到我们想要的hash以后,记得去把上面的欺骗给关掉,此处图方便直接把Inveigh对应的powershell进程给干掉即可,看清楚,别杀错了,头一个是我们自己的beacon进程 其实,在这个过程中还会有个问题,假如当前机器[IIS75-CN]的防火墙已事先开启,此时你去起powershell一般都会弹出个如下的拦截提示,解决办法倒是很简单,手动执行netsh加条另外程序规则即可 0x05smb重放在当前已控机器为linux下的各种利用方式[Responder嗅探器+impacket套件] 话既然感到这儿,就顺便多说几句,其实在linux中默认就已经为我们装好了一个非常实用的攻击套件,就是python,哪怕只有一个python2.6.6,哪怕你暂时还没拿到目标机器的root权限,这些都并不影响你继续内网渗透,在实战中它往往能帮我们不少的忙,所以个人还是那句话,在linux平台下的渗透方式尽量形成全部bash和python化[当然啦,如果的c功底够硬,肯定更佳,毕竟,在linux中,这种交互也是最直接的],而在windows下的渗透方式则尽量全部形成powershell,vbs,bat化,尽量不要过于依赖外部工具[甚至有些都完全没必要的,功能重复却毫无特色的工具],系统内置的越通用的东西,活的时间也肯定会相对更长,而且也更隐蔽,一旦慢慢养成了这样的渗透习惯,以后对陌生环境的适应力和生存率自然就会更高,你攻击手法的精湛程度肯定也会在另一个台阶上,一起加油 首先,来看下Responder嗅探器 实战中我们是完全没必要把所有服务[其实就是伪造恶意服务]都开起来,有一两个足矣,只需编辑Responder.conf配置,把里面不需要的服务全都Off掉,而后直接指定本地网卡接口进行内网欺骗即可 #gitclonehttps://github.com/SpiderLabs/Responder.git #pythonResponder.py-Iens33 剩下的事情就不用管了,只需等着,一旦目标内网任何机器有访问windows共享[smb]的动作,这儿就会立即捕捉到相应的net-ntlmv2的hash,如下,我们只需把它好好记录,拖回来尝试破解即可 其次,我们再来看下impacket套件的简单利用 利用过程几乎同上,也是通过事先伪造恶意smb服务器,一旦目标内网机器访问到我们事先准备好的这个恶意共享时,对应的net-ntlmv2就会被抓取过来,只不过,impacket自身并没有带欺骗功能,所以此处演示只能靠我们自己手工去访问恶意smb服务器,很鸡肋,当然啦,也可以通过在其它的地方插入UNC路径的方式来获取,但还不太完美,就不细说了,如下,192.168.3.69便是我们用impacket伪造的恶意smb服务器 如上所述,当目标内网有机器访问到我们的恶意smb服务器后,便会抓取对应机器的net-ntlmv2hash,之后再通过smbrelayx.py脚本拿着这段抓到的hash去尝试重放192.168.3.129这台目标机器,一旦重放成功,便会把129这台机器的本地用户及密码hash全部解密导出来,具体如下,其实个人并不建议在这儿直接执行payload或者系统命令,脚本默认也是通过服务的形式来执行命令的,很不稳定 其实,在impacket套件中还有个非常好用的ntlmrelayx.py脚本,用它我们直接拿着现有的hash去尝试重放指定机器上的指定服务,还是那句话,虽然很强大,但利用起来却显的很鸡肋[鸡肋是鸡肋,不过并不影响我们把对应的模块代码抠出来,单独拿到别的地方用,或者参照着重新实现,这才是真正的价值所在],有机会我会把impacket中的一些比较强悍实用的功能,全都单独拿出来说,此处就不再啰嗦了 # python ntlmrelayx.py -t 192.168.3.129 其实,在impacket套件中还有个非常好用的ntlmrelayx.py脚本,用它我们直接拿着现有的hash去尝试重放指定机器上的指定服务,还是那句话,虽然很强大,但利用起来却显的很鸡肋[鸡肋是鸡肋,不过并不影响我们把对应的模块代码抠出来,单独拿到别的地方用,或者参照着重新实现,这才是真正的价值所在],有机会我会把impacket中的一些比较强悍实用的功能,全都单独拿出来说,此处就不再啰嗦了 # python ntlmrelayx.py -t 192.168.3.129 0x06关于msf中的一些协议欺骗/smb重放模块的简单利 用此处,只简单提一下nbns_response[主要用来在内网进行机器名欺骗]和smb_relay[重放成功后要执行的操作,比如,此处是直接执行一个meterpreter的payload]模块的简单利用,现在,假设当前我们就处在目标内网中[比如,vpn内网或者你通过无线接进去的,等等一些其它的方式吧...],图方便,我们就可以尝试直接用msf来搞,当然啦,还是习惯性的把问题说在前面,meterpreter肯定是不免杀的,能不能正常回来不敢保证,此处仅仅只是为了演示效果,ok,来看具体操作 首先,借助smb_relay模块先把smb重放成功后要执行的操作准备好,很显然,这里是直接尝试弹个meterpreter回来,smbhost参数则是用于指定要重放[攻击]的目标内网机器[此处是IIS75-CN] 之后,开始利用nbns_response模块执行NBNS欺骗,注意,这里正则的意思是,只要匹配到含有这个字符串的共享路径全部欺骗到192.168.3.69这台 机器上[入侵者已控的那台linux[Ubuntu16.04LTS]机器],然后会把流过的net-ntlmv2的hash再丢给smb_relay模块到192.168.3.129机器上去进行重放,一旦重放成功,就开始执行事先准备好的meterpreterpayload,之后便是看到的如下的效果,meterpreter被正常弹回 只上面要输入了正确的192.168.3.129机器的账号密码,meterpreter便会被正常弹回,其实msf中还有一些相关的利用模块,不过使用上也几乎都大同小异,无非就是先欺骗后重放,此处不再赘述 0x08关于协议欺骗和smb重放攻击的一些简单防御手法 开启Smb签名 Smb共享如果压根用不到,直接关掉相应的服务或者开启系统防火墙限制445端口出入站 部署各种ATA&ATP产品来实时监控这种专门针对内网攻击的恶意流量 更多.. 一点小结: 暂时先不用太关注文中的某些工具怎么用,先把问题的核心了解清楚才是根本目的,其实关于整个利用过程核心的点,就两个,第一个就是欺骗,如何借助像LLMNR,WPAD,NBNS,DNS,PROXY,HTTP,HTTPS这种协议实现对目标内网机器的欺骗让相应的流量都流经自己,是我们需要深入理解的东西,后续有机会也会就每种协议的欺骗流程细节做进一步的学习分享,篇幅限制,所以这里就没展开说,第二个才是重放,所谓重放的意思其实就是拿着别人家的钥匙去开别人家的门,然后再进去做些龌龊的事情,比如,装个探头,安个窃听,留个定位...此处可以看到,我们全程都侧重在捕捉net-ntlmv2的hash上,但现实是,抓hash也只是整个内网渗透中一个很小的环节而已[虽然小,但确实价值不菲],之所以没有深入去提及各种工具在重放成功后如何进行各种操作,是因为在实战中,个人也并不太建议那样去干,因为上面都是演示,为了让大家看到实际效果,所以都是直接一次性重放成功,但实际上可能并不是这样,而且如果重放成功后就立即执行操作,出了问题,也很难判断到底是哪里的问题,不妨先通过这种方式把各个机器的hash搜集下,留着后续慢慢用,还是那句话,也许web确实可以做到全程自动化扫描利用,但内网,尤其在一些戒备森严,拓扑复杂的内网中,是很难像自己想象中的那样自动化的,关键突破还是得靠手工,如果内网都能上完全自动化,估计那个时候也就不再需要像我这样的低级渗透手了[大家全部专门去研究算法,协议即可,这其实也是我理想中的顶级对抗,嘿嘿...],敲定算法,找几个顶尖的程序员多花点儿时间就能搞定了,话说回来,拿到hash也并不能保证就一定能干什么,只能说可能会多个突破口而已,万一运气真的不好,hash死活跑不出来,那就只能继续另谋他路了,渗透本就灵活,不用非在一条路上走到死,有经验的朋友,想必都能听懂我在说什么了,嘿嘿...写的仓促,文中肯定会有很多不足和缺陷,弟兄们多指正。

Windows Smb 欺骗重放攻击利用