跨平台横向移动 [ PTH+ ]

admin 2021年7月27日03:07:09评论78 views字数 7378阅读24分35秒阅读模式


跨平台横向移动 [ PTH+ ]


0x01 本节重点快速预览

  • 关于lm hash, ntlm hash以及net-ntlm v1,v2系列hash 的一些区别

  • 简单了解net-ntlm v2在域环境下的大致认证过程

  • 理解hash传递的利用本质

  • 基于hash传递的各类利用方式

  • 针对打了KB2871997补丁目标机器的aes key传递利用

  • 如何借助 hashcat 快速破解各种类型的 ntlm hash


0x02 首先,就来简单了解下关于windows 的LMhash,NTLM hash以及NET-NTLM系列hash的一些核心区别

    注意,此处先不深入去说明关于 lm,ntlm 和 net-ntlm 系列hash具体的加密生成过程,那些留待后续有机会再慢慢说,暂时先把更多的重心放在实际利用上,另外,此处的"pass the hash"后面会一律简称为"pth"


  • LM Hash [本质是des加密] 只适用于老版本windows系统登录认证,比如xp/2003以下的系统,不过为了保持系统兼容性,在vista之后的系统中依然被保留着,但lm认证默认已被禁用,而采用ntlm的方式来进行认证


  • NTLM Hash [本质是md4加密] 该认证方式主要用于vista之后的系统,这两种hash类型默认都被保存在系统的sam文件中,通常情况下,尝试对其进行抓取后,可直接用于pth


  • net-ntlm[基于多种不同加密方式] 系列版本hash主要用于各种网络认证 [由于加密方式的不同,也因此衍生出了一些不同的net-ntlm版本,比如, NetNTLMv1, NetNTLMv1+ESS, NetNTLMv2],比如,在内网中通过其它的方式截获到的一些hash一般都属于此类型,像大家所熟知的 smb重放利用,通过各种客户端钓鱼窃方式窃取到的目标用户hash 等等诸如此类的方式...特别注意,此hash虽然不能直接用于pth,但可以在破解出来以后拿去撞目标入口 

    

    众所周知,这三种windows hash类型,在hashcat中早已被支持,且hashcat对这三种加密算法的破解优化单就目前来讲已经做的相当到位了,硬件满足的前提下,爆破速度确实很可观[每秒几十G的样子],所以,只需要N块性能稳定,运算强悍的GPU即可[比如,128G GPU]


0x03 简单理解net-ntlmv2在常规域环境下的基础认证流程 [ 即挑战challenge < -- > 响应过程response ]

    个人表达能力有限,不得不简单画个草图来配合说明意思,其实像这种东西,也只能靠图才好说,自己画图的另一个好处就是,你会对这个点理解的相对更加深刻透彻


跨平台横向移动 [ PTH+ ]

    基于挑战[challenge] / 响应[response] 消息交互模式的认证过程 [个人建议,如果有可能的话,最好还是自己拿着wireshark仔细跟下,以此来简单验证自己的想法,这样理解起来肯定会更加的准确,听别人说,远不如自己动手干,篇幅限制,此处就不带大家去一一详细验证了]


  • 首先,如上图所示,当client接收到用户输入的username,password和domain以后,client[实质是借助系统api来完成]会把password先hash下,再存到本地缓存中

  • 之后,client会把username以明文的形式发给server

  • Server端收到后,会生成一个16[此处是v2,v1是8个字节]字节的随机数,即所谓的challenge[挑战码],将其回传给client

  • Client在收到challenge以后,会先复制一份出来,然后继续和第一步缓存的那个密码hash一同再混合加密一次,混合后的hash值即被称作response[响应],继续将challenge和response发送给Server

  • Server端在接收到username,challenge以及response这三个值以后,会把它们再一并传给DC[域控]

  • 当DC接到过来的这三个值以后,则会根据这个username到DC的账号数据库(ntds.dit)里去查找该username所对应的密码hash

  • 然后拿着这个从数据库中查出来的hash去和刚刚传过来的那个challenge值再次进行混合加密

  • 最后,将加密后的hash跟刚传来的那个response值进行比较,如果相同,则认证成功,反之,则失败

  • 当然,至于本地登录认证过程,我们暂时不关心,就不多说了


0x04 简单理解Hash传递的利用本质

    从上图中不难看出,其实全程最关键的地方就在于用户的密码hash[这也是ntlm的脆弱性所在之一],由于net-ntlm在验证的时候,是直接用用户密码hash而非明文的方式来验证的,也就是说,我们压根就无需知道用户密码的明文到底是什么,一旦成功拿到目标管理员的密码hash,便能轻松的去跟server和dc进行正常的net-ntlm认证过程,一旦认证成功,就可以随意的访问目标系统资源了,以下便是我们熟悉的那套非常经典的 hash传递攻击流程,另外,此过程需要全程借助smb来完成[即tcp的445端口],所以,目标机器的445端口事先必须得能正常连才行,不过大部分内网的445端口都是允许的,万一由于防火墙的什么原因阻碍了445端口的正常通信,那这种方式基本也就算废了,至此,想必该说的也基本都说明白了


  • 获取当前机器的最高权限 

  • 抓取当前机器本地所有用户的密码hash 

  • 借这些密码hash通过pth的方式尝试登陆到同内网下的其它windows机器

  • 继续尝试抓取那台登陆成功的机器的密码hash

  • 继续用pth的方式登录内网其它主机

  • 以此循环往复实现对目标内网的全面控制


0x05 了解完一些基础常识后,我们就来尝试获取下当前机器本地管理员的账户及密码hash

根据上面的利用流程可知,第一步,我们应该想办法去获取当前机器的[当前系统为windows 2008r2]本地管理员的密码hash,假设事先已经通过其它方式提权拿到了当前机器的system权限,接着我们就来尝试抓取下当前机器本地管理员的密码hash,ok,为了更加贴近实战,此后的操作会尽量全程在beacon下进行

    图方便,此处就直接用powershell脚本来快速获取下当前机器所有本地用户的密码hash,如下

跨平台横向移动 [ PTH+ ]


0x06 关于hash传递的各种利用方式

    需要明确的是,pth通常用在密码hash实在破不出来又没其它好办法时,假设你事先就已经拿到了对应的明文密码,也就不用非要这么干了,假设现在我们就拿着如下的hash去尝试对远程目标机器[假设目标系统为windows 2012r2,未打任何补丁]进行pth,稍后还会拿着这条hash继续去撞内网中得其它目标机器


dbadmin:1012:aad3b435b51404eeaad3b435b51404ee:518b98ad4178a53695dc997aa02d455c::: 


第一种,可以直接通过CobaltStrike 内置的mimikatz来折中实现pth效果

首先,直接以system身份去访问目标系统的c盘时,正如预期的那样,提示没权限,紧接着,我们就用上面的ntlm hash去尝试传递rid为500的目标系统内建的管理员用户administrator,因为是工作组环境,所以,此处的domain直接用.[表本地]表示即可,如果是在目标域内,则要写成所在的域,此处mimikatz的意思暂且可以这么理解,用administrator账号,对应的密码hash以及域创建一个"访问令牌",然后再用这个令牌身份在当前机器上随便起个进程 [此处的进程用的是powershell,默认用的cmd.exe]

跨平台横向移动 [ PTH+ ]

    而后要做的事情就简单了,我们只需用beacon内置的steal_token功能来窃取刚刚上面所起的那个进程中的访问令牌去访问目标系统资源即可,所以,你会发现,此时再回过头直接去dir远程目标系统的c盘就都正常了,这也正是CobaltStrike中pth的基本原理

跨平台横向移动 [ PTH+ ]


    上面尝试传递的是目标内建的rid 为500的系统管理员用户,此时我们再尝试传递一个非内建管理员用户dbadmin试试 [如下,rid为1017的非内建系统管理员用户],目标机器仍为那台windows 2012r2

跨平台横向移动 [ PTH+ ]

跨平台横向移动 [ PTH+ ]

    很显然,当我们直接去dir 192.168.3.119的c盘时提示没权限,而后继续用dbadmin这个用户的密码hash去创建一个访问令牌并将其放在powershell进程中

跨平台横向移动 [ PTH+ ]

    继续尝试用steal_token窃取powershell进程令牌,去dir 192.168.3.119的c盘,即使此令牌是管理权限,但依然提示没权限,原因我们后面再统一说

跨平台横向移动 [ PTH+ ]


    上面我们演示了如何用dbadmin这个非系统内建管理用户的密码hash去尝试传递windows 2012r2的目标系统,结果未成功,下面我们同样依旧是用dbadmin这个用户的密码hash去尝试传递下windows 2003r2的目标系统,具体操作过程完全一致,如下

跨平台横向移动 [ PTH+ ]

跨平台横向移动 [ PTH+ ]

    用dbadmin创建访问令牌,并以此令牌在当前机器起个powershell进程

跨平台横向移动 [ PTH+ ]

    窃取powershell进程令牌,尝试dir 192.168.3.102[系统为2003r2] 的c盘,此时我们发现 dir 成功了,具体原因接着看

跨平台横向移动 [ PTH+ ]


关于Pth的一些必要注意事项:

上面演示的情况都是假定目标系统存在dbadmin这个用户,且密码hash正确的情况下才有可能传递成功,如果目标系统中压根就不存在你要传递的这个用户或者用户密码hash不对,那传递的结果可想而知,不过,实战中绝大部分传递的用户可能都还是administrator[rid 500],至于上面目标系统为2003r2时传递成功,为2012r2时传递却失败的原因是由于自windows 2008 之后的系统,默认已不允许管理员用户远程连接,但 rid为500的系统内建管理员用户除外,所以才造成了这种现象,大家简单知晓该特性便可


针对打好KB2871997[禁用ntlm]补丁的目标机器的aes key传递利用[适用于域环境下]:

    打了KB2871997补丁的机器,可以使用aes key进行传递,也就是说,目标系统中必须事先有这个补丁,此传递方式才能生效

跨平台横向移动 [ PTH+ ]

    具体的利用方式基本同上,只需把ntlm换成相应的aes长度,剩下的利用方式都一样,窃取令牌,然后拿着令牌去尝试访问目标系统,比较简单就不具体演示了,如下

跨平台横向移动 [ PTH+ ]


第二种,尝试通过各种powershell脚本进行hash传递 [ 依旧是借助Invoke-TheHash套件,作者维护的比较频繁,确实挺实用的]

事先准备好payload

跨平台横向移动 [ PTH+ ]

    

    直接利用hash传递实现远程执行,首先来尝试下wmi,注意,这里仅仅只是为了演示效果才用的mshta,在之前的文章也已无数次说明过,windows中可用来实现无文件执行的内置工具非常多,大家可根据自己的实际需求继续尝试深度利用

跨平台横向移动 [ PTH+ ]

    其次,再来尝试传统的smb,此处稍微注意下,smb一般用administrator管理账号回来的shell权限默认几乎都直接是system

跨平台横向移动 [ PTH+ ]


第三种, 借助 impacket套件[for windows]来尝试基于不同方式的hash及aes key传递

    实战中可以直接用socks5把impacket套件整个挂到目标内网中去,当然,你也可以把它传到目标机器上去搞[某些环境可能传东西比较费劲],另外,在beacon下执行还有些问题,且单文件确实有些大,除了支持hash传递,aes key也是支持的 [包括128和256],如下是远程执行效果

跨平台横向移动 [ PTH+ ]

    接着,尝试直接反弹目标系统的cmd shell,当然,这可能需要原生cmd支持,通过其它方式弹回来的那个cmd shell一般都是不行的

跨平台横向移动 [ PTH+ ]


第四种,则是关于pth在linux的一些的简单应用,此方式主要是为了便于实战中跨平台

    比如,以系统计划任务的形式实现远程执行,如下,还是那句话,不一定非要在目标linux安装配置python,然后再装impacket,直接用socks5把它挂到目标内网去其实也是一样的效果

跨平台横向移动 [ PTH+ ]

    除了像impacket这种众所周知的横向套件,其实在kali中其实也已经自带了很多pth类的工具,比如,pth-toolkit系列

跨平台横向移动 [ PTH+ ]

跨平台横向移动 [ PTH+ ]

最后,再介绍一款还不错的横向套件 Crackmapexec ,想必大家也都比较熟悉了,说白点就是把一些常用的横向套件都集中到了一起,然后用python组装形成的这么一个东西,没太多亮点,就像所谓的poshc2渗透框架一样,无非就是把平时相对实用的一些ps脚本融合在了一起,外强中干,问题很多[通信很灵活,真不如去深入折腾CobaltStrike来的实在],就个人实践效果来看,其实真的不太适合实战,废话就不多说了,看实际效果

跨平台横向移动 [ PTH+ ]


0x07 关于Msf中的一些hash传递模块利用

说到msf,其实还想顺便就多说几句,有些新手弟兄可能也都发现了,对于msf的东西,我几乎都是一笔带过的,很少会大篇幅的去单独说,并不是说msf不好[其实,我觉得确实很一般,只是方便而已,有时候太方便反而是一种累赘 ],主要还是因为msf对于真正的实战,意义并不是特别的大,排除那些垃圾内网[只需一个msf就能随便撸穿的那种]暂不说,稍加防护的内网,msf的进出都是很费劲的[确实没必要把时间都浪费在那些事情上,能手工快速搞定的就尽量手工吧],对于每种协议的meterpreter payload,说实话,早已被各个厂商分析了无数遍,特征规则也早都写进了各种入侵监控设备里了,meterpreter一进出,一般很快就能被发现,至于系统行为[编码器算法],各个AV厂商也早已分析收录,与其浪费时间折腾meterpreter的免杀,过ids,不如自己纯手工慢慢搞来的高效隐蔽,我从来没说过msf不好,只是它并不适用于某些[其实绝大部分]实战场景,ok,废话不多讲,只是希望大家能明白某些现实问题,不要人云亦云


    尝试利用psexec_command模块进行远程执行,相比直接去反弹meterpreter,此方式的免杀效果相对较好[起码对国内的某些AV来讲是这样的],话说回来,直接在目标机器上创建服务这个动作还是比较敏感的,部分AV还是可能会报警拦截的,这些东西,请自行测试,多说无用

跨平台横向移动 [ PTH+ ]


借助psexec_psh[执行powershell,免杀稍好]模块直接反弹目标机器的meterpreter,通常情况下,直接这样去反弹几乎都不大可能成功,绝大部分AV都会杀,即使加了多重编码器,说实话,作用也并不大,另外还有个exploit/windows/smb/psexec模块,功能上完全一致,只不过此模块直接执行的是exe[其实想都不用想,百分百会杀],也只是在某些实验环境里才会这么干

跨平台横向移动 [ PTH+ ]


0x08 尝试借助hashcat快速破解以上几种ntlm hash类型

    首先,我们就来看下如何借助hashcat快速破解net-ntlm v2 的hash,话说到这儿,不妨顺便再提个msf中的小功能,一个专门用来生成钓取目标用户net-ntlm hash钓鱼链接的小模块,具体用法如下


msf > use auxiliary/server/capture/http_ntlm

msf > set srvhost 192.168.3.69

msf > set srvport 80

msf > set uripath /

msf > set johnpwfile /home/strikelion/Desktop/

msf > exploit


    当目标用户访问我们发给的链接后会跳出一个基础认证框,一旦目标输入了正确的系统账号密码,msf服务端马上就收到对应用户的net-ntlm hash,其它的就不多说了,此处主要是为了快速演示如何利用hashcat去破解net-ntlm v2类型的hash,所以直接直接拿折磨快抓的hash,实战中在线抓net-hash的方式还有非常多,后续咱们再慢慢说明

跨平台横向移动 [ PTH+ ]


跨平台横向移动 [ PTH+ ]

最终得到用户的net-hash如下

跨平台横向移动 [ PTH+ ]


单 4G GPU,字典模式下,对于net-ntlmv2 几乎是秒破

# hashcat64.exe -a 0 -m 5600 hash.txt passwd.txt

跨平台横向移动 [ PTH+ ]

    其次,我们再来看下如何借助hashcat快速破解系统用户密码的ntlm hash,至于其它的ntlm hash类型此处就不一一演示了,平时实战中遇到最多的可能还是这两种

# hashcat64.exe -a 0 -m 1000 hash.txt passwd.txt

跨平台横向移动 [ PTH+ ]


一点小结

    Pth的过程中,可能会遇到问题,比如,445端口没法正常连接,远程执行payload或者马的免杀不过关,创建服务或者计划任务被拦截等等...除此之外,因实际目标环境差异,肯定还会遇到各种各样奇葩的问题,这就需要大家尽量学着自己去根据实际情况思考分析摸索,想多了,看多了,做多了,慢慢的自然就能触类旁通

    当然,如果仅仅只是那些相对常规的问题,其实还相对好解决,随着微软 ATA[高级威胁分析 ]的普及以及高版本windows对系统自身的各种安全策略特性越来越多,以后这些常规手法如果做不到深度定制利用,可能很快都会陆续死掉,但,始终坚信,这种对抗将会一直持续,高级的防御势必意味着更高级入侵手法的公开,出现,安全嘛,本身就是在博弈中求生存,自己能做的,也只有靠不断的学习积累,灵活变通来尽力充实自己,文中有任何问题或者漏掉了某些点,欢迎弟兄们来一起补充完善




注:  写文不易,公众号之外的转载请务必通过此公众号事先与作者本人联系并严格声明文章出处,非常感谢 !



另:  本公众号的所有文章仅作攻防研究学习之用,严禁私自用所学技术去从事一切未经合法授权的入侵攻击破坏活动,因此所产生的一切不良后果与本文作者及该公众号无关 



    更多更优质的精品原创实用技术干货分享,和众多资深apt及红队玩家一起深度无缝交流,欢迎微信扫码加入小密圈,另外,关于本文完整pdf原件现也已共享到自己密圈中,我们会在那里一直等你

跨平台横向移动 [ PTH+ ]


    更多优质公开技术分享,欢迎关注个人公众号 "红队攻防揭秘",另,同时欢迎大家的无私 转发 , 打赏 , 点赞 与 留言, 非常感谢

跨平台横向移动 [ PTH+ ]




本文始发于微信公众号(红队防线):跨平台横向移动 [ PTH+ ]

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年7月27日03:07:09
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   跨平台横向移动 [ PTH+ ]http://cn-sec.com/archives/346434.html

发表评论

匿名网友 填写信息