Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2020-13277 — CVE-2020-13277 लैब: GitLab लॉजिक भेद्यता - किसी भी उपयोगकर्ता द्वारा निजी रिपॉजिटरी तक अनधिकृत पहुँच | Kitploit
उपकरण/GitHubGitHub/exp-docs/cve-2020-13277
भेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणपेनिट्रेशन टेस्टिंगलर्निंग और शिक्षालैब और अभ्यास
GitHubexp-docs/cve-2020-13277

CVE-2020-13277

CVE-2020-13277 लैब: GitLab लॉजिक भेद्यता - किसी भी उपयोगकर्ता द्वारा निजी रिपॉजिटरी तक अनधिकृत पहुँच

रिपॉजिटरी देखें
2833 साल पहलेKitploit द्वारा समीक्षित

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

CVE-2020-13277

CVE-2020-13277 प्रशिक्षण मैदान: Gitlab तार्किक भेद्यता - किसी भी उपयोगकर्ता द्वारा निजी रिपॉजिटरी तक अनधिकृत पहुँच


0x10 प्रशिक्षण मैदान वातावरण

0x20 निर्देशिका संरचना

root@kitploit:~
CVE-2020-13277
├── README.md ............... [यह README विवरण]
├── imgs .................... [README विवरण में सहायक चित्र]
├── gitlab .................. [Gitlab कंटेनर का माउंट निर्देशिका]
│   ├── Dockerfile .......... [Gitlab का Docker निर्माण फ़ाइल]
│   ├── config .............. [Gitlab कॉन्फ़िग माउंट निर्देशिका]
│   ├── data ................ [Gitlab डेटा माउंट निर्देशिका]
│   ├── logs ................ [Gitlab लॉग माउंट निर्देशिका]
│   ├── keys ................ [Gitlab क्रैक लाइसेंस भंडारण निर्देशिका]
│   └── runner .............. [Runner कंटेनर का माउंट निर्देशिका]
├── license ................. [क्रैक लाइसेंस कंटेनर निर्माण निर्देशिका]
│   ├── Dockerfile .......... [लाइसेंस का Docker निर्माण फ़ाइल]
│   └── license.rb .......... [क्रैक लाइसेंस उत्पन्न करने के लिए Ruby स्क्रिप्ट]
├── docker-compose.yml ...... [Docker का निर्माण कॉन्फ़िग]
├── keygen.ps1 .............. [Windows: एक-क्लिक क्रैक लाइसेंस उत्पन्न करें]
├── keygen.sh ............... [Linux:   एक-क्लिक क्रैक लाइसेंस उत्पन्न करें]
├── run.ps1 ................. [Windows: एक-क्लिक Gitlab प्रशिक्षण मैदान चलाएँ]
├── run.sh .................. [Linux:   एक-क्लिक Gitlab प्रशिक्षण मैदान चलाएँ]
├── register.ps1 ............ [Windows: एक-क्लिक Runner पंजीकृत करें]
├── register.sh ............. [Linux:   एक-क्लिक Runner पंजीकृत करें]
├── stop.ps1 ................ [Windows: एक-क्लिक Gitlab प्रशिक्षण मैदान रोकें]
└── stop.sh ................. [Linux:   एक-क्लिक Gitlab प्रशिक्षण मैदान रोकें]

0x30 पूर्व शर्तें

प्रशिक्षण मैदान Docker Image संस्करण चयन का आधार

इस भेद्यता का मुख्य उपयोग Mirror Repository - रिपॉजिटरी की मिरर सिंक बैकअप सुविधा पर आधारित है।

इसमें Mirror की सिंक दिशा दो प्रकार की होती है:

  • Pull: निर्दिष्ट Repository सामग्री को वर्तमान Repository में खींचें
  • Push: वर्तमान Repository सामग्री को निर्दिष्ट Repository पर धकेलें

यह भेद्यता Pull दिशा के Mirror Repository का उपयोग करती है

जान लें कि Gitlab CE (समुदाय मुफ्त संस्करण) और EE (उद्यम भुगतान संस्करण) दो संस्करणों में विभाजित है, और Gitlab आधिकारिक तौर पर दावा करता है कि यह भेद्यता CE और EE दोनों के निम्नलिखित संस्करणों को प्रभावित करती है:

  • >=10.6, <12.9.10
  • >=12.10, <12.10.11
  • >=13.0, <13.0.6

लेकिन इसका मतलब यह नहीं है कि इन संस्करणों के Gitlab Docker Image सभी प्रशिक्षण मैदान के लिए उपयोग किए जा सकते हैं, इसका कारण है:

  • CE संस्करण के Mirror Repository में केवल Push दिशा है
  • EE संस्करण को Core, Starter, Premium, Ultimate चार संस्करणों में विभाजित किया गया है, आधिकारिक सुविधा तुलना तालिका से पता चलता है: केवल Core संस्करण में Pull दिशा मौजूद नहीं है, जबकि Gitlab-EE के Docker Image सभी केवल Core संस्करण प्रदान करते हैं

दूसरे शब्दों में, Docker का उपयोग करके प्रशिक्षण मैदान बनाने के लिए, केवल Gitlab-EE संस्करण चुनना होगा और इसे क्रैक करना होगा (अमीर लोग लाइसेंस खरीदना भी चुन सकते हैं) ताकि Mirror Repository - Pull सुविधा सक्रिय हो सके।

लेकिन Gitlab-EE को क्रैक करने के बाद भी, चाहे 10.x, या , जब Mirror Repository - Pull का URL स्थानीय पथ शामिल करता है, तो त्रुटि दिखाई देगी।

0x40 प्रशिक्षण मैदान निर्माण

0x41 निर्माण

  • होस्ट मशीन पर docker और docker-compose पूर्व-स्थापित हों
  • इस रिपॉजिटरी को डाउनलोड करें: git clone https://github.com/lyy289065406/CVE-2020-13277
  • क्रैक कुंजी युग्म उत्पन्न करें: ./keygen.sh या ./keygen.ps1
  • Gitlab बनाएँ और चलाएँ (सुनिश्चित करें कि पोर्ट 80 उपयोग में न हो): ./run.sh या ./run.ps1
  • लगभग 5 मिनट बाद ब्राउज़र से Gitlab में लॉगिन कर सकते हैं: http://127.0.0.1 (पहली बार लॉगिन करने पर व्यवस्थापक खाते root का पासवर्ड रीसेट करना आवश्यक है)

0x42 क्रैक

पहले क्रैक कुंजी युग्म उत्पन्न करते समय, सार्वजनिक कुंजी पहले ही Gitlab कंटेनर बैकग्राउंड में लिखी जा चुकी है, अब निजी कुंजी को फ्रंटएंड के माध्यम से Gitlab पर अपलोड करके क्रैक पूरा करना आवश्यक है:

  • कुंजी युग्म ./gitlab/keys/ निर्देशिका में उत्पन्न होता है, उसके अंतर्गत .gitlab-license की सामग्री (निजी कुंजी) कॉपी करें
  • root उपयोगकर्ता के साथ http://127.0.0.1/admin/license/new पृष्ठ खोलें
  • Enter license key चुनें और निजी कुंजी चिपकाएँ, फिर Upload license बटन दबाकर क्रैक पूरा करें

इस प्रकार Mirror Repository - Pull सुविधा सक्रिय हुई

0x43 आउटबाउंड सेटिंग

  • root उपयोगकर्ता के साथ http://127.0.0.1/admin/application_settings पृष्ठ खोलें
  • सबसे नीचे Outbound requests ढूँढें और Allow requests to the local network from hooks and services चेक करके सहेजें

इस प्रकार Mirror Repository - Pull अब स्थानीय Repository खींचने का समर्थन करता है

0x44 Runner सेट करें

  • root उपयोगकर्ता के साथ http://127.0.0.1/admin/runners पृष्ठ खोलें
  • registration token ढूँढें और कॉपी करें
  • Runner पंजीकृत करें: ./register.sh $TOKEN या ./register.ps1 $TOKEN

इस प्रकार सभी Repository इस Runner का उपयोग करके CI स्क्रिप्ट (Pipeline Jobs) निष्पादित कर सकते हैं

0x50 प्रशिक्षण मैदान सत्यापन

सत्यापन प्रक्रिया के लिए आधिकारिक Issue का संदर्भ लिया जा सकता है, लेकिन नीचे दी गई सत्यापन प्रक्रिया इस प्रशिक्षण मैदान के अनुसार कुछ चरणों को समायोजित करेगी

0x51 सत्यापन के लिए पूर्व-निर्मित खाते

root उपयोगकर्ता के साथ http://127.0.0.1/admin/users पृष्ठ खोलकर 3 खाते बनाएँ:

  • victim: पीड़ित खाता
  • attacker1: हमलावर खाता 1
  • attacker2: हमलावर खाता 2

खाता बनाते समय प्रारंभिक पासवर्ड सेट नहीं किया जा सकता, Gitlab डिफ़ॉल्ट रूप से प्रारंभिक पासवर्ड निर्धारित ईमेल पर भेजता है। सुविधा के लिए, वास्तव में मनमाना ईमेल भर सकते हैं, पहले खाता बनाएँ, फिर तुरंत उस खाते को संपादित करें, इस प्रकार root द्वारा उस खाते का प्रारंभिक पासवर्ड सेट किया जा सकता है, बिना ईमेल के

0x52 पूर्व-निर्मित पीड़ित रिपॉजिटरी

  • victim खाते से Gitlab में लॉगिन करें
  • नया Repository New Project बनाएँ:
    • Name: target
    • Visibility Level: Private
  • रिपॉजिटरी के अंदर README.md फ़ाइल बनाएँ, मनमानी सामग्री सेट करें जैसे mykey is abcxyz

स्पष्ट रूप से target victim की निजी रिपॉजिटरी है, और हमारा लक्ष्य भेद्यता का उपयोग करके इस रिपॉजिटरी की सामग्री प्राप्त करना है

0x53 हमलावर का poc रिपॉजिटरी बनाएँ

  • attacker1 खाते से Gitlab में लॉगिन करें
  • नया Repository New Project बनाएँ:
    • Name: poc
    • Visibility Level: Public
  • रिपॉजिटरी के अंदर .gitlab-ci.yml फ़ाइल बनाएँ, इसकी सामग्री:
root@kitploit:~
image: "ruby:2.6"

rspec:  
  script:  
    - git clone http://gitlab-ci-token:[email protected]/victim/target.git
    - cd target
    - ls -lah .  
    - cat README.md

【उद्देश्य】 आगामी कार्यों में, कुछ तकनीकों का उपयोग करके victim को बिना जानकारी के अपनी अनुमति से इस CI स्क्रिप्ट को निष्पादित करने के लिए प्रेरित किया जाएगा।

क्योंकि वर्तमान प्रशिक्षण मैदान में कोई प्रमाणपत्र सेट नहीं है, इसलिए केवल http प्रोटोकॉल का उपयोग किया जा सकता है; इसके अलावा 172.168.30.2 वह IP है जो docker-compose.yml ने Gitlab कंटेनर को आवंटित किया है, क्योंकि यह CI स्क्रिप्ट अंततः Runner के माध्यम से निष्पादित होगी, और वर्तमान प्रशिक्षण मैदान में Runner और Gitlab एक ही कंटेनर नहीं हैं, इसलिए Docker द्वारा आवंटित IP पते का उपयोग करना होगा

0x53 हमलावर का poc मिरर रिपॉजिटरी बनाएँ

  • attacker2 खाते से Gitlab में लॉगिन करें
  • नया समूह New Group बनाएँ:
    • Name: test
    • Visibility Level: Public
  • test समूह के अंदर पूरी तरह से खाली नया Repository New Project बनाएँ:
    • Name: poc
    • Visibility Level: Public

मिरर रिपॉजिटरी कॉन्फ़िगर करें Settings => Repository => Pull from a remote repository:

  • Mirror repository: चेक करें
  • Git repository URL: http://GITLAB/attacker1/poc भरें
  • Password: (खाली छोड़ें, Pull किए जाने वाले रिपॉजिटरी का स्तर Public है, पासवर्ड की आवश्यकता नहीं)
  • Trigger pipelines for mirror updates: चेक करें (मिरर सिंक होने पर CI स्क्रिप्ट निष्पादन ट्रिगर करता है)

कॉन्फ़िगरेशन सफल होने के बाद, हर 30 मिनट में जांचा जाता है कि स्रोत रिपॉजिटरी में बदलाव हुआ है या नहीं, यदि बदलाव हुआ तो बलपूर्वक सिंक किया जाता है।

Git repository URL पहले बनाए गए poc रिपॉजिटरी को इंगित करता है, 127.0.0.1 का उपयोग नहीं किया गया क्योंकि Pull स्थानीय रिपॉजिटरी को खींचने की अनुमति नहीं देता है, लेकिन DNS बाईपास का उपयोग किया जा सकता है: GITLAB वह होस्टनेम है जो docker-compose.yml ने Gitlab कंटेनर को आवंटित किया है, डिफ़ॉल्ट रूप से इसे /etc/hosts में सेट किया जाता है, हालाँकि होस्ट मशीन GITLAB को हल नहीं कर सकती, लेकिन कंटेनर के अंदर यह http://127.0.0.1/attacker1/poc तक पहुँचने के समान है

0x54 poc मिरर रिपॉजिटरी का स्वामित्व पीड़ित को बलपूर्वक हस्तांतरित करें

  • attacker2 खाते का उपयोग जारी रखें
  • http://127.0.0.1/groups/test/-/group_members पृष्ठ खोलकर test समूह के उपयोगकर्ताओं का प्रबंधन करें
  • victim उपयोगकर्ता को समूह में जोड़ें:
    • Add new member to test: victim
    • Permissions: Owner
    • Expiration date: (खाली छोड़ें, अर्थात अनंत काल)
  • ऊपरी दाएँ कोने में खाता अवतार पर क्लिक करें => Setting => Account => Delete account वर्तमान खाता (attacker2) हटाएँ

【उद्देश्य】 test समूह में केवल victim और attacker2 दो Owner हैं, जब attacker2 उपयोगकर्ता हटा दिया जाता है, तो test समूह और इसके अंतर्गत सभी रिपॉजिटरी का स्वामित्व बलपूर्वक victim के नाम पर स्थानांतरित हो जाता है। और वर्तमान test समूह के अंतर्गत attacker1/poc से मिरर सिंक किया गया test/poc रिपॉजिटरी है, अर्थात test/poc रिपॉजिटरी को बलपूर्वक victim उपयोगकर्ता को हस्तांतरित कर दिया जाता है।

0x55 हमला शुरू करें

पहले अब तक की स्थिति का विश्लेषण करें:

  • हमलावर ने बलपूर्वक और गुप्त रूप से पीड़ित victim के लिए एक test/poc रिपॉजिटरी बनाई
  • test/poc रिपॉजिटरी की सामग्री attacker1/poc रिपॉजिटरी से मिरर सिंक की गई है (हर 30 मिनट में जांचा जाता है कि बदलाव हुआ है और सिंक की आवश्यकता है)
  • attacker1/poc रिपॉजिटरी की सामग्री हमलावर द्वारा नियंत्रित है, जिसमें CI स्क्रिप्ट .gitlab-ci.yml शामिल है
  • क्योंकि test/poc रिपॉजिटरी ने Trigger pipelines for mirror updates सेट किया है, हर बार सिंक होने पर CI स्क्रिप्ट निष्पादित होती है
  • क्योंकि test/poc रिपॉजिटरी का Owner victim है, इसलिए CI स्क्रिप्ट निष्पादित करते समय victim की अनुमति का उपयोग होता है

पहले सेट किए गए CI स्क्रिप्ट .gitlab-ci.yml की सामग्री की समीक्षा करें, यह poc Runner में victim की अनुमति का उपयोग करके उसके Private रिपॉजिटरी target की निर्देशिका संरचना और README.md तक पहुँचता है:

root@kitploit:~
image: "ruby:2.6"

rspec:  
  script:  
    - git clone http://gitlab-ci-token:[email protected]/victim/target.git
    - cd target
    - ls -lah .  
    - cat README.md

इसके बाद हमलावर को केवल attacker1/poc रिपॉजिटरी में कुछ अप्रासंगिक सामग्री को मनमाने ढंग से संशोधित करना होगा, सबसे बुरी स्थिति में केवल 30 मिनट तक प्रतीक्षा करनी होगी, फिर victim की अनुमति का उपयोग करके सेट किए गए CI स्क्रिप्ट को निष्पादित कर सकता है।

हालाँकि हमलावर के पास Pipeline Jobs के निष्पादन परिणामों तक सीधी पहुँच नहीं है, लेकिन स्क्रिप्ट के आउटपुट लक्ष्य को समायोजित करके, जैसे रिपॉजिटरी की सामग्री को निर्दिष्ट ईमेल या FTP सर्वर पर भेजना, रिपॉजिटरी कोड चुराया जा सकता है।

टूल डाउनलोड करें
12.x
13.x
Import url is blocked: Requests to localhost are not allowed

जबकि Admin area => Settings => Network => Outbound requests सेट करके Allow requests to the local network from hooks and services सक्षम करने के बाद स्थानीय URL कॉन्फ़िगर किया जा सकता है, लेकिन मिरर सिंक करते समय त्रुटि 2:Fetching remote upstream failed: fatal: unable to access http://127.0.0.1/xxxx/: The requested URL returned error: 301 आएगी। दूसरे शब्दों में केवल Pull Remote Repository उपलब्ध है।

हालाँकि, यद्यपि 12.x और 13.x स्थानीय URL के निर्धारण में बहुत सख्त हैं, 10.x संस्करण में एक उपाय है: Pull URL कॉन्फ़िगर करते समय, केवल स्थानीय रूप से सेट किए गए DNS सेवा नाम का उपयोग करके बाईपास किया जा सकता है।

उपरोक्त से निष्कर्ष निकलता है कि अंततः केवल gitlab-ee:10.6.0-ee.0 संस्करण का Docker Image इस प्रशिक्षण मैदान के लिए उपयोग किया जा सकता है।

वास्तव में पूर्व विवरण से यह भी पता चलता है कि इस भेद्यता के उपयोग की शर्तें बहुत कड़ी हैं, मूलतः गरीब लोगों को इस भेद्यता से प्रभावित होने की संभावना नहीं है।