
Metasploit का उपयोग करके TeamCity पेनटेस्ट करें
TL;DR: JetBrains IDE (जैसे IntelliJ या PyCharm) से पासवर्ड प्राप्त करें और उन क्रेडेंशियल्स का उपयोग TeamCity Continuous Integration Server के अंदर करें ताकि Kacper Szurek द्वारा metasploit का उपयोग करके सर्वर और बिल्ड एजेंट्स पर meterpreter सेशन प्राप्त किया जा सके।




यह विक्रेता (JetBrains TeamCity टीम) की ओर से Yegor Yarko द्वारा एक टिप्पणी है:
लेख की अधिकांश सामग्री बताती है कि दुर्भावनापूर्ण उपयोगकर्ता TeamCity का दुरुपयोग कैसे कर सकते हैं यदि उन्हें ऐसा करने की उचित अनुमति दी गई हो। उदाहरण के लिए, सिस्टम एडमिनिस्ट्रेटर भूमिका (सर्वर पर पूर्ण नियंत्रण प्रदान करती है) वाला उपयोगकर्ता एक दुर्भावनापूर्ण TeamCity प्लगइन स्थापित कर सकता है या सर्वर तक "सुपर यूज़र" पहुँच के लिए टोकन प्राप्त कर सकता है। साथ ही, प्रोजेक्ट एडमिनिस्ट्रेटर भूमिका वाला उपयोगकर्ता एजेंट पर मनमाना कोड चला सकता है या कॉन्फ़िगर किए गए रिपॉजिटरी एक्सेस पासवर्ड प्राप्त कर सकता है। यह व्यवहार TeamCity द्वारा एक उत्पाद के रूप में प्रदान की गई कार्यक्षमता का हिस्सा है। इन विचारों का वर्णन TeamCity दस्तावेज़ीकरण के संबंधित अनुभाग में किया गया है।
वर्णित मुद्दे बताते हैं कि किसी दुर्भावनापूर्ण अभिकर्ता को उच्च विशेषाधिकार प्रदान करना कितना खतरनाक हो सकता है। TeamCity सर्वर प्रशासकों को नियमित रूप से उपयोगकर्ताओं की अनुमतियों की समीक्षा करनी चाहिए ताकि संभावित दुर्भावनापूर्ण उपयोगकर्ताओं को वे अनुमतियाँ न दी जाएँ जिनका वे दुरुपयोग कर सकते हैं; यदि सक्षम है, तो अतिथि उपयोगकर्ता अनुमतियों की समीक्षा करें। दूसरी बात यह है कि अपने टर्मिनलों को कहीं भी गैर-तुच्छ अनुमतियों के साथ लॉग इन होने पर लावारिस न छोड़ें।
लेख में दो वास्तविक सुरक्षा चिंताओं का उल्लेख किया गया है: एक एक दुर्भावनापूर्ण बिल्ड आर्टिफैक्ट प्रकाशित करने और किसी प्रशासक उपयोगकर्ता को इसे ब्राउज़र में देखने के लिए प्रेरित करने से संबंधित है, और दूसरा कस्टम बिल्ड चलाने की अनुमति को TeamCity एजेंट पर मनमाना कोड निष्पादन में बढ़ाने का है। बाद वाले का TeamCity के अधिकांश इंस्टॉलेशन पर केवल मामूली प्रभाव पड़ता है क्योंकि इस अनुमति वाले लोगों के पास पहले से ही एजेंट पर कोई भी कोड चलाने की क्षमता होती है।
फिर भी, हम उपरोक्त चिंताओं को निकटतम TeamCity रिलीज़ में से एक में संबोधित करने जा रहे हैं, और उन्हें हमारे ध्यान में लाने के लिए धन्यवाद।
मान लीजिए कि आप एक सॉफ्टवेयर कंपनी के अंदर पेनिट्रेशन टेस्टिंग कर रहे हैं जो Jetbrains स्टैक का उपयोग करती है। आप metasploit का उपयोग कर रहे हैं और डेवलपर कंप्यूटर पर meterpreter सेशन प्राप्त करते हैं।
आप आगे क्या कर सकते हैं? 2015 के Nikhil SamratAshok Mittal द्वारा TeamCity पेंटेस्टिंग के बारे में एक लेख है।
इस पोस्ट में मैं सुरक्षा नोट्स और BugTrack से कई तकनीकों को संयोजित करता हूँ और उन्हें Metasploit मॉड्यूल में डालता हूँ।
नोट: मैं यहाँ किसी 0 दिन का उपयोग नहीं कर रहा हूँ। हर कार्रवाई के लिए आपको मान्य TeamCity क्रेडेंशियल्स की आवश्यकता है। JetBrains टिप्पणी देखें।
मैं इस स्क्रिप्ट से होने वाले किसी भी नुकसान के लिए जिम्मेदार नहीं हूँ। डेटा सुरक्षा के लिए set CLEANUP false के साथ उपयोग करें।
TeamCity 2017.2.1 (build 50732) पर परीक्षण किया गया।
KeePass डेटाबेस को डिकोड करने के लिए हमें kdbx Ruby लाइब्रेरी की आवश्यकता है।
find / -name "metasploit-framework.gemspec"vim /usr/share/metasploit-framework/metasploit-framework.gemspecspec.add_runtime_dependency 'kdbx', '0.2.0'cd /usr/share/metasploit-framework/ && bundle installअब आप:
mkdir ~/.msf4/modules/exploits && mkdir ~/.msf4/modules/postteamcity.rb और serverplugin.zip को ~/.msf4/modules/exploits में कॉपी करेंjetbrains.rb को ~/.msf4/modules/post में कॉपी करेंmsfconsolereload_allTeamCity को प्लगइन का उपयोग करके सभी JetBrains IDE के साथ आसानी से एकीकृत किया जा सकता है।

यदि Remember me विकल्प का उपयोग किया जाता है, तो पासवर्ड IntelliJ Platform Credentials Store API का उपयोग करके संग्रहीत किए जाते हैं। आप स्रोत कोड यहाँ पा सकते हैं।
विंडोज पर डिक्रिप्शन प्रक्रिया इस प्रकार दिखती है:

pdb.pw फ़ाइल विंडोज CryptUnprotectData का उपयोग करके डिक्रिप्ट की जाती है। इसका मतलब है कि केवल वही उपयोगकर्ता जिसने डेटा एन्क्रिप्ट किया है, उसे डिकोड कर सकता है।c.kdbx KeePass डेटाबेस को अब बिंदु 2 से मास्टर पासवर्ड का उपयोग करके डिक्रिप्ट किया जा सकता है0xDFAA का उपयोग करके xor किए जाते हैंडिफ़ॉल्ट रूप से मास्टर पासवर्ड यादृच्छिक होता है। इसे विकल्पों के अंदर बदला जा सकता है:

लेकिन इससे कुछ नहीं बदलता।
इसका केवल यह मतलब है कि KeePass डेटाबेस c.kdbx को एक अलग पासवर्ड का उपयोग करके एन्क्रिप्ट किया जाएगा। स्थानीय उपयोगकर्ता pdb.pw फ़ाइल से इस पासवर्ड को आसानी से प्राप्त कर सकता है।