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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
wrongsecrets — تطبيق ضعيف مع أمثلة توضح كيفية عدم استخدام الأسرار | Kitploit
أدوات/GitHubGitHub/owasp/wrongsecrets
أمن الحاوياتتحليل الثغرات الأمنيةCTFأمن السحابةDevSecOpsكشف الأسرارالتعلم والتعليممختبرات وتدريب عملي
GitHubowasp/wrongsecrets

wrongsecrets

تطبيق ضعيف مع أمثلة توضح كيفية عدم استخدام الأسرار

عرض المستودع
1.5k599منذ 3 أيامتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

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

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

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

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

OWASP WrongSecrets

تغريدة

فحص أسلوب جافا والاختبار الالتزام المسبق تنسيق تيرافورم CodeQL مدقق الروابط الميتة مولد وثائق جافا وسواغر اختبار هيروكو باستخدام سايبريس

اختبار سكريبت مينيكيوب (k8s) اختبار سكريبت مينيكيوب (k8s وVault) اختبار حاوية دوكر اختبار الحاوية على بودمان اختبار DAST باستخدام ZAP معاينة PR والفرق البصري معاينة البناء الفرق البصري

مشروع OWASP الإنتاجي أفضل ممارسات OpenSSF المناقشات سحبات دوكر

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

هل يمكنك حل جميع التحديات الـ 67؟

جرّب بعضها على بيئة العرض التجريبي لهيروكو.

هل تريد لعب التحديات الأخرى؟ اقرأ التعليمات حول كيفية إعدادها أدناه.

🚀 بداية سريعة

هل أنت جديد في WrongSecrets؟ ابدأ من هنا:

  1. جرّب عبر الإنترنت أولاً: قم بزيارة عرض هيروكو التجريبي للتعرف على التحديات
  2. شغّل محليًا: استخدم دوكر للتجربة الكاملة مع جميع التحديات: ```bash docker run -p 8080:8080 -p 8090:8090 jeroenwillemsen/wrongsecrets:latest-no-vault
    root@kitploit:~

ثم افتح http://localhost:8080 3. هل تريد رؤية ما هو قادم؟ جرّب حاوية الماستر المتطورة لدينا بأحدث الميزات: ```bash docker run -p 8080:8080 -p 8090:8090 ghcr.io/owasp/wrongsecrets/wrongsecrets-master:latest-master

root@kitploit:~
⚠️ *ملاحظة: هذه نسخة قيد التطوير وقد تكون غير مستقرة*
4. **إعداد متقدم**: لتحديات السحابة وتمارين Kubernetes، راجع التعليمات التفصيلية أدناه

**ما ستتعلمه:**
- أخطاء إدارة الأسرار الشائعة
- كيفية تحديد بيانات الاعتماد المكشوفة
- أفضل الممارسات لتأمين الأسرار
- الأدوات والتقنيات لاكتشاف الأسرار

**كيف يعمل:**
يحتوي هذا المستودع على **ملفات تعليمات برمجية وتكوين ضعيفة عن قصد** تحتوي على أسرار حقيقية ومزيفة مخبأة في جميع أنحاء قاعدة التعليمات البرمجية. ستقوم بفحص التعليمات البرمجية المصدرية وملفات التكوين وحاويات Docker ونشرات السحابة لاكتشاف هذه الأسرار. يعلّمك كل تحدٍ طرقًا مختلفة يمكن أن تتعرض بها الأسرار عن طريق الخطأ في التطبيقات الواقعية.

![screenshotOfChallenge1](https://assets.kitploit.com/production/public/readmes/6937/ad02ece4104616d09ac232d1423d84111048b3437c4439ebf44172a60c673546.png)

## 📋 المتطلبات الأساسية

**للاستخدام الأساسي:**
- متصفح ويب
- Docker (للإعداد المحلي) - [التثبيت هنا](https://docs.docker.com/get-docker/)

**للإعدادات المتقدمة:**
- Kubernetes/Minikube - [التثبيت هنا](https://minikube.sigs.k8s.io/docs/start/)
- حساب سحابي (AWS/GCP/Azure) لتحديات السحابة
- الإلمام بسطر الأوامر

<a href="https://github.com/vshymanskyy/StandWithUkraine/blob/main/README.md"><img src="https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/banner2-no-action.svg" /></a>

## جدول المحتويات

### 🎯 البدء
-   [بداية سريعة](#-quick-start)
-   [المتطلبات الأساسية](#-prerequisites)
-   [الدعم](#support)

### 🐳 خيارات النشر
-   [تمارين Docker الأساسية](#basic-docker-exercises)
 -   [تشغيل هذه على Heroku](#running-these-on-heroku)
 -   [تشغيل هذه على Render.io](#running-these-on-renderio)
 -   [تشغيل هذه على Railway](#running-these-on-railway)
-   [تمارين K8s الأساسية](#basic-k8s-exercise)
 -   [استنادًا إلى Minikube](#minikube-based)
 -   [استنادًا إلى k8s](#k8s-based)
 -   [تمارين Vault مع minikube](#vault-exercises-with-minikube)

### ☁️ تحديات السحابة
-   [تحديات السحابة](#cloud-challenges)
 -   [تشغيل WrongSecrets في AWS](#running-wrongsecrets-in-aws)
 -   [تشغيل WrongSecrets في GCP](#running-wrongsecrets-in-gcp)
 -   [تشغيل WrongSecrets في Azure](#running-wrongsecrets-in-azure)
 -   [تشغيل Challenge15 في السحابة الخاصة بك فقط](#running-challenge15-in-your-own-cloud-only)

### 🎮 الاستخدام المتقدم
-   [هل تريد اللعب دون إرشاد؟](#do-you-want-to-play-without-guidance-or-spoils)
-   [CTF](#ctf)
 -   [دعم CTFD](#ctfd-support)
 -   [دعم FBCTF](#fbctf-support-experimental)
-   [استخدام OWASP WrongSecrets كمعيار لاكتشاف الأسرار](#use-owasp-wrongsecrets-as-a-secret-detection-benchmark)

### 👨‍💻 التطوير والمساهمة
-   [ملاحظات حول التطوير](#notes-on-development)
-   [قائمة التحقق لاعتماد Spring Boot 4](https://github.com/owasp/wrongsecrets/blob/HEAD/docs/SPRING_BOOT_4_ADOPTION_CHECKLIST.md)
 -   [إدارة التبعيات](#dependency-management)
 -   [بدء المشروع في IntelliJ IDEA](#get-the-project-started-in-intellij-idea)
 -   [إعادة التحميل التلقائي أثناء التطوير](#automatic-reload-during-development)
 -   [كيفية إضافة تحدٍ](#how-to-add-a-challenge)
 -   [الاختبار المحلي](#local-testing)
 -   [الاختبار الآلي المحلي](#Local-automated-testing)
-   [هل تريد تعطيل التحديات في إصدارك الخاص؟](#want-to-disable-challenges-in-your-own-release)

### 📚 الموارد والمجتمع
-   [شكر خاص والمساهمون](#special-thanks--contributors)
-   [الرعاية](#sponsorships)
-   [طلب مساعدة](#help-wanted)
-   [قراءة إضافية حول إدارة الأسرار](#further-reading-on-secrets-management)

## الدعم

هل تحتاج إلى دعم؟ اتصل بنا
عبر [OWASP Slack](https://owasp.slack.com/archives/C02KQ7D9XHR) حيث يمكنك التسجيل [هنا](https://owasp.org/slack/invite)
، أو قم بتقديم [PR](https://github.com/OWASP/wrongsecrets/pulls)، أو قم بتقديم
[issue](https://github.com/OWASP/wrongsecrets/issues)، أو
استخدم [المناقشات](https://github.com/OWASP/wrongsecrets/discussions). يرجى ملاحظة أن هذا مشروع تطوعي تابع لـ OWASP، لذا قد يستغرق الأمر بعض الوقت قبل الرد.

حقوق الطبع والنشر (c) 2020-2025 Jeroen Willemsen والمساهمون في WrongSecrets.

## 🛤️ اختر مسارك

لست متأكدًا من الإعداد المناسب لك؟ إليك دليل سريع:

| **أريد أن...** | **الإعداد الموصى به** | **التحديات المتاحة** |
|------------------|----------------------|--------------------------|
| تجربته بسرعة عبر الإنترنت | [حاوية تعمل على Heroku](https://www.wrongsecrets.com/) | التحديات الأساسية (0-4, 8, 12-32, 34-43, 49-52, 54-66) |
| تشغيل محليًا باستخدام Docker | [Docker أساسي](#basic-docker-exercises) | نفس ما سبق، ولكن على جهازك |
| تعلم أسرار Kubernetes | [إعداد K8s/Minikube](#basic-k8s-exercise) | تحديات Kubernetes (0-6, 8, 12-43, 48-66) |
| التدرب على الأسرار السحابية | [تحديات السحابة](#cloud-challenges) | جميع التحديات (0-66) |
| إدارة ورشة عمل/CTF | [إعداد CTF](#ctf) | مجموعات تحديات قابلة للتخصيص |
| المساهمة في المشروع | [إعداد التطوير](#notes-on-development) | جميع التحديات + أدوات التطوير |

## تمارين Docker الأساسية

_يمكن استخدامها للتحديات 0-4, 8, 12-32, 34-43, 49-52, 54-66_

لتمارين Docker الأساسية، ستحتاج حاليًا إلى:

-   Docker [التثبيت من هنا](https://docs.docker.com/get-docker/)
-   متصفح يمكنه عرض HTML

يمكنك تثبيته عن طريق تنفيذ:```bash
docker run -p 8080:8080 -p 8090:8090 jeroenwillemsen/wrongsecrets:latest-no-vault

🚀 هل تريد تجربة الإصدار الأحدث؟

إذا كنت تريد رؤية ما سيأتي في الإصدار القادم، يمكنك استخدام حاوية master المبنية تلقائيًا:```bash docker run -p 8080:8080 -p 8090:8090 ghcr.io/owasp/wrongsecrets/wrongsecrets-master:latest-master

root@kitploit:~
⚠️ **تحذير**: هذا إصدار تطويري مبني من أحدث فرع master وقد يحتوي على ميزات تجريبية أو عدم استقرار.

**📝 ملاحظة حول المنافذ:**
- المنفذ **8080**: التطبيق الرئيسي (التحديات 0-66)
- المنفذ **8090**: خادم MCP (مطلوب للتحدي 60)

**📝 ملاحظة حول التحدي 62 (Google Drive MCP):**
يتطلب التحدي 62 تكوين حساب خدمة Google للحصول على الوظائف الكاملة. راجع [docs/CHALLENGE62_GOOGLE_DRIVE_SETUP.md](https://github.com/owasp/wrongsecrets/blob/HEAD/docs/CHALLENGE62_GOOGLE_DRIVE_SETUP.md) للحصول على تعليمات الإعداد. بدون تكوين، سيعرض التحدي رسالة مؤقتة.

يمكنك الآن محاولة العثور على الأسرار من خلال حل التحدي المتاح في الروابط أدناه
<details>
    <summary>جميع روابط تحديات Docker (انقر على المثلث لفتح الكتلة).
    </summary>

-   [localhost:8080/challenge/challenge-0](http://localhost:8080/challenge/challenge-0)
-   [localhost:8080/challenge/challenge-1](http://localhost:8080/challenge/challenge-1)
-   [localhost:8080/challenge/challenge-2](http://localhost:8080/challenge/challenge-2)
-   [localhost:8080/challenge/challenge-3](http://localhost:8080/challenge/challenge-3)
-   [localhost:8080/challenge/challenge-4](http://localhost:8080/challenge/challenge-4)
-   [localhost:8080/challenge/challenge-8](http://localhost:8080/challenge/challenge-8)
-   [localhost:8080/challenge/challenge-12](http://localhost:8080/challenge/challenge-12)
-   [localhost:8080/challenge/challenge-13](http://localhost:8080/challenge/challenge-13)
-   [localhost:8080/challenge/challenge-14](http://localhost:8080/challenge/challenge-14)
-   [localhost:8080/challenge/challenge-15](http://localhost:8080/challenge/challenge-15)
-   [localhost:8080/challenge/challenge-16](http://localhost:8080/challenge/challenge-16)
-   [localhost:8080/challenge/challenge-17](http://localhost:8080/challenge/challenge-17)
-   [localhost:8080/challenge/challenge-18](http://localhost:8080/challenge/challenge-18)
-   [localhost:8080/challenge/challenge-19](http://localhost:8080/challenge/challenge-19)
-   [localhost:8080/challenge/challenge-20](http://localhost:8080/challenge/challenge-20)
-   [localhost:8080/challenge/challenge-21](http://localhost:8080/challenge/challenge-21)
-   [localhost:8080/challenge/challenge-22](http://localhost:8080/challenge/challenge-22)
-   [localhost:8080/challenge/challenge-23](http://localhost:8080/challenge/challenge-23)
-   [localhost:8080/challenge/challenge-24](http://localhost:8080/challenge/challenge-24)
-   [localhost:8080/challenge/challenge-25](http://localhost:8080/challenge/challenge-25)
-   [localhost:8080/challenge/challenge-26](http://localhost:8080/challenge/challenge-26)
-   [localhost:8080/challenge/challenge-27](http://localhost:8080/challenge/challenge-27)
-   [localhost:8080/challenge/challenge-28](http://localhost:8080/challenge/challenge-28)
-   [localhost:8080/challenge/challenge-29](http://localhost:8080/challenge/challenge-29)
-   [localhost:8080/challenge/challenge-30](http://localhost:8080/challenge/challenge-30)
-   [localhost:8080/challenge/challenge-31](http://localhost:8080/challenge/challenge-31)
-   [localhost:8080/challenge/challenge-32](http://localhost:8080/challenge/challenge-32)
-   [localhost:8080/challenge/challenge-34](http://localhost:8080/challenge/challenge-34)
-   [localhost:8080/challenge/challenge-35](http://localhost:8080/challenge/challenge-35)
-   [localhost:8080/challenge/challenge-36](http://localhost:8080/challenge/challenge-36)
-   [localhost:8080/challenge/challenge-37](http://localhost:8080/challenge/challenge-37)
-   [localhost:8080/challenge/challenge-38](http://localhost:8080/challenge/challenge-38)
-   [localhost:8080/challenge/challenge-39](http://localhost:8080/challenge/challenge-39)
-   [localhost:8080/challenge/challenge-40](http://localhost:8080/challenge/challenge-40)
-   [localhost:8080/challenge/challenge-41](http://localhost:8080/challenge/challenge-41)
-   [localhost:8080/challenge/challenge-42](http://localhost:8080/challenge/challenge-42)
-   [localhost:8080/challenge/challenge-43](http://localhost:8080/challenge/challenge-43)
-   [localhost:8080/challenge/challenge-49](http://localhost:8080/challenge/challenge-49)
-   [localhost:8080/challenge/challenge-50](http://localhost:8080/challenge/challenge-50)
-   [localhost:8080/challenge/challenge-51](http://localhost:8080/challenge/challenge-51)
-   [localhost:8080/challenge/challenge-52](http://localhost:8080/challenge/challenge-52)
-   [localhost:8080/challenge/challenge-54](http://localhost:8080/challenge/challenge-54)
-   [localhost:8080/challenge/challenge-55](http://localhost:8080/challenge/challenge-55)
-   [localhost:8080/challenge/challenge-56](http://localhost:8080/challenge/challenge-56)
-   [localhost:8080/challenge/challenge-57](http://localhost:8080/challenge/challenge-57)
-   [localhost:8080/challenge/challenge-58](http://localhost:8080/challenge/challenge-58)
-   [localhost:8080/challenge/challenge-59](http://localhost:8080/challenge/challenge-59)
-   [localhost:8080/challenge/challenge-60](http://localhost:8080/challenge/challenge-60)
-   [localhost:8080/challenge/challenge-61](http://localhost:8080/challenge/challenge-61)
-   [localhost:8080/challenge/challenge-62](http://localhost:8080/challenge/challenge-62)
-   [localhost:8080/challenge/challenge-63](http://localhost:8080/challenge/challenge-63)
-   [localhost:8080/challenge/challenge-64](http://localhost:8080/challenge/challenge-64)
-   [localhost:8080/challenge/challenge-65](http://localhost:8080/challenge/challenge-65)
-   [localhost:8080/challenge/challenge-66](http://localhost:8080/challenge/challenge-66)
</details>

لاحظ أن هذه التحديات لا تزال أساسية جدًا، وكذلك تفسيراتها. لا تتردد في تقديم طلب سحب (PR) لجعلها تبدو أفضل ;-).

### تشغيلها على Heroku

يمكنك اختبارها على [https://wrongsecrets.herokuapp.com/](https://wrongsecrets.herokuapp.com/) أيضًا! لقد منحنا فريق Heroku حزمة دعم مذهلة للمصادر المفتوحة، مما يسمح لنا بتشغيل التطبيق هناك مجانًا، حيث يكون دائمًا قيد التشغيل تقريبًا. مع ذلك، يُرجى عدم إجراء اختبارات ضارة أو محاولة تعطيله: فأنت بذلك ستفسد الأمر على الآخرين الذين يرغبون في تجربته. استخدم [هذا الرابط](https://wrongsecrets.herokuapp.com/) لاستخدام نسختنا المستضافة من التطبيق. إذا كنت ترغب في استضافته على Heroku بنفسك (مثلًا لتشغيل تدريب)، يمكنك القيام بذلك بالنقر على [هذا الرابط](https://heroku.com/deploy?template=https://github.com/OWASP/wrongsecrets/tree/master). يُرجى الانتباه إلى أن هذا سيترتب عليه تكاليف لا يتحملها هذا المشروع أو القائمون عليه.

### تشغيلها على Render.io
*الحالة: تجريبي*

يمكنك اختبارها على [https://wrongsecrets.onrender.com/](https://wrongsecrets.onrender.com/). يُرجى فهم أننا نعمل على خطة مجانية، ولا يمكننا تقديم أي ضمانات. يُرجى عدم إجراء اختبارات ضارة أو محاولة تعطيله: فأنت بذلك ستفسد الأمر على الآخرين الذين يرغبون في تجربته. هل تريد النشر بنفسك على Render؟ انقر على الزر أدناه:

[![Deploy to Render](https://render.com/images/deploy-to-render-button.svg)](https://render.com/deploy?repo=https://github.com/OWASP/wrongsecrets)

### تشغيلها على Railway
*الحالة: يتم صيانتها بواسطة [alphasec.io](https://github.com/alphasecio)*

إذا كنت ترغب في استضافة WrongSecrets على Railway، يمكنك القيام بذلك عن طريق نشر [هذا القالب بنقرة واحدة](https://railway.com/deploy/McqJ_j?referralCode=I07F1). لم يعد Railway يقدم خطة مجانية دائمة، لكن الفترة التجريبية المجانية كافية لاختبار هذا قبل أن تقرر الترقية. إذا كنت بحاجة إلى دليل تفصيلي، راجع [هذا المنشور في المدونة](https://alphasec.io/test-your-secret-management-skills-with-owasp-wrongsecrets/).

[![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/McqJ_j?referralCode=I07F1j)

## تمرين K8s أساسي

_يمكن استخدامها للتحديات 0-6، 8، 12-43، 48-66_

### يعتمد على Minikube

تأكد من تثبيت ما يلي:

-   Docker [التثبيت من هنا](https://docs.docker.com/get-docker/)
-   Minikube [التثبيت من هنا](https://minikube.sigs.k8s.io/docs/start/)

إعداد K8S يعتمد حاليًا على استخدام Minikube للمتعة المحلية. يمكنك استخدام الأوامر أدناه من مجلد جذر المشروع:```bash
    minikube start
    kubectl apply -f k8s/secrets-config.yml
    kubectl apply -f k8s/secrets-secret.yml
    kubectl apply -f k8s/challenge33.yml
    kubectl apply -f k8s/challenge53/secret-challenge53.yml
    echo "Setting up the bitnami sealed secret controler"
    kubectl apply -f https://github.com/bitnami-labs/sealed-secrets/releases/download/v0.27.0/controller.yaml
    kubectl apply -f k8s/sealed-secret-controller.yaml
    kubectl apply -f k8s/main.key
    kubectl delete pod -n kube-system -l name=sealed-secrets-controller
    kubectl create -f k8s/sealed-challenge48.json
    echo "finishing up the sealed secret controler part"
    wait 10 #or check whether secret48 is there
    kubectl apply -f k8s/secret-challenge-deployment.yml
    while [[ $(kubectl get pods -l app=secret-challenge -o 'jsonpath={..status.conditions[?(@.type=="Ready")].status}') != "True" ]]; do echo "waiting for secret-challenge" && sleep 2; done
    kubectl expose deployment secret-challenge --type=LoadBalancer --port=8080
    minikube service secret-challenge

بدلاً من ذلك يمكنك القيام بـ :```bash ./k8s-vault-minikube-start.sh

root@kitploit:~
الآن يمكنك استخدام عنوان IP والمنفذ المقدمين للاستمرار في اللعب مع متغير K8s (بدلاً من localhost).

-   [localhost:8080/challenge/challenge-5](http://localhost:8080/challenge/challenge-5)
-   [localhost:8080/challenge/challenge-6](http://localhost:8080/challenge/challenge-6)
-   [localhost:8080/challenge/challenge-33](http://localhost:8080/challenge/challenge-33)
-   [localhost:8080/challenge/challenge-48](http://localhost:8080/challenge/challenge-48)
-   [localhost:8080/challenge/challenge-53](http://localhost:8080/challenge/challenge-53)

### k8s الأساسي

هل تريد تشغيل الإصدار الأساسي على k8s الخاص بك؟ استخدم الأوامر أدناه:```bash
    kubectl apply -f k8s/secrets-config.yml
    kubectl apply -f k8s/secrets-secret.yml
    echo "Setting up the bitnami sealed secret controler"
    kubectl apply -f https://github.com/bitnami-labs/sealed-secrets/releases/download/v0.27.0/controller.yaml
    kubectl apply -f k8s/sealed-secret-controller.yaml
    kubectl apply -f k8s/main.key
    kubectl delete pod -n kube-system -l name=sealed-secrets-controller
    kubectl create -f k8s/sealed-challenge48.json
    echo "finishing up the sealed secret controler part"
    wait 10 #or check whether secret48 is there
    kubectl apply -f k8s/challenge33.yml
    kubectl apply -f k8s/secret-challenge-deployment.yml
    while [[ $(kubectl get pods -l app=secret-challenge -o 'jsonpath={..status.conditions[?(@.type=="Ready")].status}') != "True" ]]; do echo "waiting for secret-challenge" && sleep 2; done
    kubectl port-forward \
        $(kubectl get pod -l app=secret-challenge -o jsonpath="{.items[0].metadata.name}") \
        8080:8080

يمكنك الآن استخدام عنوان IP والمنفذ المقدمين للعب أكثر مع متغير K8s (بدلاً من localhost).

  • localhost:8080/challenge/challenge-5
  • localhost:8080/challenge/challenge-6
  • localhost:8080/challenge/challenge-33
  • localhost:8080/challenge/challenge-48

تمارين Vault مع minikube

يمكن استخدامها للتحديات 0-8، 12-66 تأكد من تثبيت ما يلي:

  • minikube مع docker (أو علق على السطر 8 واعمل على إعداد k8s الخاص بك)،
  • docker،
  • helm التثبيت من هنا،
  • kubectl التثبيت من هنا،
  • jq التثبيت من هنا،
  • vault التثبيت من هنا،
  • grep, Cat, and Sed

قم بتشغيل ./k8s-vault-minikube-start.sh، وعند انتهاء السكريبت، ستنتظرك التحديات على http://localhost:8080. هذا سيسمح لك بتشغيل التحديات 0-8، 12-66.

عند إيقاف سكريبت k8s-vault-minikube-start.sh وتريد استئناف إعادة توجيه المنفذ، قم بتشغيل: k8s-vault-minikube-resume.sh. هذا لأنه إذا قمت بتشغيل سكريبت البداية مرة أخرى، فسيستبدل السر في vault ولن يقوم بتحديث تطبيق secret-challenge بالسر الجديد.

تحديات السحابة

يمكن استخدامها للتحديات 0-66

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

تشغيل WrongSecrets في AWS

اتبع الخطوات في ملف README في المجلد الفرعي AWS.

تشغيل WrongSecrets في GCP

اتبع الخطوات في ملف README في المجلد الفرعي GCP.

تشغيل WrongSecrets في Azure

اتبع الخطوات في ملف README في المجلد الفرعي Azure.

تشغيل التحدي 15 في سحابتك الخاصة فقط

عندما تريد تضمين Canarytokens الخاصة بك لنشرك السحابي، قم بما يلي:

  1. قم بعمل Fork للمشروع.
  2. تأكد من استخدام سكريبتات GCP ingress أو AWS ingress لإنشاء ingress لمشروعك.
  3. اذهب إلى canarytokens.org واختر AWS Keys، في حقل webHook URL أضف <your-domain-created-at-step1>/canaries/tokencallback.
  4. قم بتشفير بيانات الاعتماد المستلمة حتى يتمكن التحدي 15 من فك تشفيرها مرة أخرى.
  5. قم بإيداع المواد غير المشفرة والمشفرة في Git ثم أعد الإيداع بدون المواد المفكوكة.
  6. قم بتكييف تلميحات التحدي 15 في نسختك (fork) لتشير إلى نسختك.
  7. أنشئ حاوية وادفعها إلى سجل الحاويات الخاص بك.
  8. قم بتجاوز ملفات تعريف K8s إما لـ AWS أو GCP.

هل تريد اللعب بدون توجيه أو إفساد المتعة؟

يحتوي كل تحدٍ على زر Show hints وزر What's wrong?. تساعد هذه الأزرار في تبسيط التحديات وتقديم شرح للقارئ. ومع ذلك، يمكن للتفسيرات أن تفسد المتعة إذا كنت ترغب في القيام بذلك كتمرين اختراق. لذلك، يمكنك التحكم بها عن طريق تجاوز الإعدادات التالية في بيئتك:

  • hints_enabled=false سيوقف تشغيل زر Show hints.
  • reason_enabled=false سيوقف تشغيل زر الشرح What's wrong?.
  • spoiling_enabled=false سيوقف تشغيل نقطة النهاية /spoil/challenge-x (حيث x هو الاسم القصير للتحدي).

تفعيل Swaggerdocs وواجهة المستخدم

يمكنك تفعيل توثيق Swagger وواجهة Swagger UI عن طريق تجاوز SPRINGDOC_UI و SPRINGDOC_DOC عند تشغيل حاوية Docker.

شكر خاص ومساهمون

القادة:

  • Ben de Haan @bendehaan
  • Jeroen Willemsen @commjoen

أفضل المساهمين:

  • Jannik Hollenbach @J12934
  • Puneeth Y @puneeth072003
  • Joss Sparkes @RemakingEden

المساهمون:

  • Nanne Baars @nbaars
  • Marcin Nowak @drnow4u
  • Rodolfo Neves @roddas
  • Osama Magdy @osamamagdy
  • Pastekitoo @Pastekitoo
  • Shubham Patel @Shubham-Patel07
  • za @za
  • Divyanshu Dev @Novice-expert
  • Tibor Hercz @tiborhercz
  • Adarsh A @adarsh-a-tw
  • Chris Elbring Jr. @neatzsche
  • Diamond Rivero @diamant3
  • Norbert Wolniak @nwolniak
  • Robert Felber @rfelber
  • Filip Chyla @fchyla
  • Vineeth Jagadeesh @djvinnie
  • Dmitry Litosh @Dlitosh
  • Mahaputra Ilham Awal @mahaputrailhamawal
  • Turjo Chowdhury @turjoc120
  • SndR @SndR85
  • alphasec @alphasecio
  • CaduRoriz @CaduRoriz
  • Josh Grossman @tghosth
  • Madhu Akula @madhuakula

المختبرون:

  • Dave van Stein @davevs
  • Marcin Nowak @drnow4u
  • Marc Chang Sing Pang @mchangsp
  • Vineeth Jagadeesh @djvinnie

شكر خاص:

  • Madhu Akula @madhuakula @madhuakula
  • Nanne Baars @nbaars @nbaars
  • Bjorn Kimminich @bkimminich
  • Dan Gora @devsecops
  • Xiaolu Dai @saragluna
  • Jonathan Giles @jonathanGiles

الرعاة

نود أن نشكر الأطراف التالية على مساعدتنا:

gitguardian_logo.png

GitGuardian لرعايتهم التي تسمح لنا بدفع فواتير حساباتنا السحابية.

JetBrains logo.

Jetbrains لترخيص نسخة من Intellij IDEA Ultimate edition لقادة المشروع. لم نكن لنكون بهذه السرعة في التطوير بدونها!

1password_logo.png

1Password لمنحنا ترخيص مفتوح المصدر لـ 1Password لاختبار كشف الأسرار.

AWS Open Source

AWS لمنحنا رصيد AWS مفتوح المصدر الذي نستخدمه لاختبار مشروعنا وإعداد Wrongsecrets CTF Party على AWS.

مساعدة مطلوبة

يمكنك مساعدتنا بالطرق التالية:

  • أعطنا نجمة
  • شارك هذا التطبيق مع الآخرين
  • بالطبع، يمكننا دائمًا الاستفادة من مساعدتك للحصول على المزيد من النكهات من الأسرار المهيأة بشكل خاطئ لنشر الوعي! سنرحب بالمساعدة مع موفري السحابة الآخرين، مثل Alibaba أو Tencent cloud على سبيل المثال. هل تفتقد شيئًا آخر غير موفر السحابة؟ قدم مشكلة (issue) أو أنشئ طلب سحب (PR)! انظر دليل المساهمة لمزيد من التفاصيل. سيتم إدراج المساهمين في الإصدارات، في قسم "شكر خاص ومساهمون"، وفي تطبيق الويب.

استخدام OWASP WrongSecrets كمعيار لكشف الأسرار

نظرًا لظهور الكثير من أدوات كشف الأسرار لكل من Docker و Git، فإننا ننشئ منصة اختبار معيارية لها. هل تريد معرفة ما إذا كانت أداتك تكتشف كل شيء؟ سنقوم بتتبع الأسرار المضمنة في هذه المشكلة ولدينا فرع نضع فيه أسرارًا إضافية لأداتك لاكتشافها. سيحتوي الفرع على سكريبت إنشاء حاوية Docker يمكنك من خلاله اختبار فحص أسرار الحاوية الخاص بك.

المقارنة الآلية لماسحات الأسرار

نقدم الآن سير عمل آلي لـ GitHub Action يقارن بين أدوات فحص الأسرار المتعددة مقابل قاعدة أكواد WrongSecrets. يقوم سير عمل مقارنة الماسحات باختبار 7 أدوات مختلفة:

  • TruffleHog - ماسح أسرار يعتمد على Docker
  • git-secrets - ماسح خطاف git من AWS Labs
  • gitleaks - ماسح عالي الأداء يعتمد على Go
  • detect-secrets - ماسح مؤسسات Yelp
  • gittyleaks - كاشف أنماط يعتمد على Python
  • whispers - ماسح منظم من Skyscanner
  • trufflehog3 - إصدار Python من TruffleHog

يعمل سير العمل أسبوعياً ويوفر جدول مقارنة يوضح عدد الأسرار التي يكتشفها كل أداة، مما يساعدك على فهم الفعالية النسبية لأدوات فحص الأسرار المختلفة. انظر docs/scanner-comparison.md لمزيد من التفاصيل حول تشغيل النتائج وتفسيرها.

CTF

لدينا 3 طرق للعب CTF:

  • طريقة "هيا نلعب" السريعة المعتمدة على نطاق Heroku الخاص بنا https://wrongsecrets-ctf.herokuapp.com، والتي وثقناها لك هنا.
  • طريقة أكثر توسعًا موثقة في ctf-instructions.md.
  • إعداد CTF قابل للتخصيص بالكامل حيث يحصل كل لاعب على مثيل افتراضي خاص به من WrongSecrets ومثيل افتراضي من wrongsecrets-desktop، حتى يتمكنوا جميعًا من اللعب دون متاعب. لهذا يجب عليك استخدام إعداد WrongSecrets CTF Party.

دعم CTFD

هل تريد استخدام CTFD للعب CTF بناءً على مثيل Heroku المجاني wrongsecrets-ctf مع CTFD؟ يمكنك ذلك!

ملاحظة: يعمل دعم CTFD الآن بناءً على Juiceshop CTF CLI.

ملاحظة-II: https://wrongsecrets-ctf.herokuapp.com (معطل مؤقتًا بسبب نقص أرصدة المصدر المفتوح) يعتمد على Heroku وله سعة محدودة.

يتطلب الإنشاء الأولي لملف zip لـ CTFD زيارة https://wrongsecrets-ctf.herokuapp.com/api/Challenges مرة واحدة قبل تنفيذ الخطوات أدناه.

اتبع الخطوات التالية:```shell npm install -g [email protected] juice-shop-ctf #choose ctfd and https://wrongsecrets-ctf.herokuapp.com as domain. No trailing slash! The key is 'TRwzkRJnHOTckssAeyJbysWgP!Qc2T', feel free to enable hints. docker run -p 8001:8000 -it ctfd/ctfd:3.7.4

root@kitploit:~
> **ملاحظة:** لا يمكن توليد التلميحات إلا إذا كان مثيل WrongSecrets قد مكّن التلميحات (`HINTS_ENABLED=true`). يعمل مثيل Heroku CTF ([https://wrongsecrets-ctf.herokuapp.com](https://wrongsecrets-ctf.herokuapp.com)) مع `HINTS_ENABLED=false`، لذا فإن اختيار "تلميحات مجانية" أو "تلميحات مدفوعة" سيؤدي إلى قائمة تلميحات فارغة. لتوليد التلميحات، شغّل مثيلك الخاص مع `HINTS_ENABLED=true`.

زر الآن مثيل CTFD على [http://localhost:8001](http://localhost:8001) وقم بإعداد CTF الخاص بك.
ثم استخدم وظيفة النسخ الاحتياطي الإداري لاستيراد ملف zip الذي أنشأته باستخدام أمر juice-shop-ctf.
ابدأ اللعب باستخدام [https://wrongsecrets-ctf.herokuapp.com](https://wrongsecrets-ctf.herokuapp.com)!
هل تريد إعداد خاص بك؟ يمكنك ذلك! لكن احذر من أن يجد الآخرون مفتاحك، لذا قم بتأمينه بشكل صحيح: تأكد من أن الحاوية قيد التشغيل التي تحتوي على مفتاح CTF الفعلي غير معرضة للجمهور، على غرار حاوية heroku الخاصة بنا.

## دعم FBCTF (تجريبي!)

ملاحظة: دعم FBCTF تجريبي.

اتبع نفس الخطوات المتبعة مع CTFD، لكن اختر الآن fbctfd وكرابط لتعيين الدولة (countrymapping) اختر `https://raw.githubusercontent.com/OWASP/wrongsecrets/79a982558016c8ce70948a8106f9a2ee5b5b9eea/config/fbctf.yml`.
ثم اتبع [https://github.com/facebookarchive/fbctf/wiki/Quick-Setup-Guide](https://github.com/facebookarchive/fbctf/wiki/Quick-Setup-Guide) لتشغيل FBCTF.

## ملاحظات حول التطوير

للتطوير على الجهاز المحلي استخدم الملف الشخصي `local` `./mvnw spring-boot:run -Dspring-boot.run.profiles=local,without-vault`

إذا كنت تريد الاختبار ضد Vault دون K8s: ابدأ Vault محليًا باستخدام```shell
 export SPRING_CLOUD_VAULT_URI='http://127.0.0.1:8200'
 export VAULT_API_ADDR='http://127.0.0.1:8200'
 vault server -dev

وفي محطة الطرفية التالية، قم بذلك (مع الرمز المميز من الأوامر السابقة):```shell export SPRING_CLOUD_VAULT_URI='http://127.0.0.1:8200' export SPRING_CLOUD_VAULT_TOKEN='' vault token create -id="00000000-0000-0000-0000-000000000000" -policy="root" vault kv put secret/secret-challenge vaultpassword.password="$(openssl rand -base64 16)" vault kv put secret/injected vaultinjected.value="$(openssl rand -base64 16)" vault kv put secret/codified challenge47secret.value="debugvalue"

root@kitploit:~
استخدم الآن ملف التعريف `local-vault` في تطويرك.```shell
./mvnw spring-boot:run -Dspring-boot.run.profiles=local,local-vault

إذا كنت ترغب في التطوير بدون مثيل Vault، فاستخدم إضافياً ملف التعريف without-vault لتطويرك:```shell ./mvnw spring-boot:run -Dspring-boot.run.profiles=local,without-vault

root@kitploit:~
هل تريد دفع حاوية؟ راجع `.github/scripts/docker-create-and-push.sh` للحصول على برنامج نصي ينشئ ويدفع جميع الحاويات. لا تنسَ إعادة بناء التطبيق قبل تأليف الحاوية.

هل تريد التحقق من سبب عدم عمل شيء في Vault في Kubernetes؟ نفذ `kubectl exec vault-0 -n vault -- vault audit enable file file_path=stdout`.

### إدارة التبعيات

لقد قمنا بدمج CycloneDX و OWASP Dependency-check للتحقق من التبعيات بحثًا عن الثغرات الأمنية.
يمكنك استخدام أداة OWASP Dependency-checker عن طريق استدعاء `mvn dependency-check:aggregate` و `mvn cyclonedx:makeBom` لاستخدام CycloneDX لإنشاء قائمة مكونات البرامج (SBOM).

### تكوين البرنامج المساعد لـ Dependency-Check في Maven

يستخدم OWASP WrongSecrets البرنامج المساعد [`dependency-check-maven`](https://jeremylong.github.io/DependencyCheck/dependency-check-maven/index.html) لفحص تبعيات المشروع تلقائيًا بحثًا عن الثغرات الأمنية المعروفة (CVEs).

#### كيف يعمل

- يتم تشغيل البرنامج المساعد أثناء بناء Maven (`./mvnw clean install`) ويفحص جميع التبعيات مقابل قواعد بيانات الثغرات الأمنية العامة.
- بشكل افتراضي، يستخدم NVD (قاعدة بيانات الثغرات الوطنية) ويمكنه أيضًا استخدام مؤشر OSS لتغطية إضافية.

#### أبرز نقاط التكوين

تم تكوين البرنامج المساعد في ملف `pom.xml` ضمن قسم `<build><plugins>`:```xml
<plugin>
  <groupId>org.owasp</groupId>
  <artifactId>dependency-check-maven</artifactId>
  <version>${dependency-check-maven.version}</version>
  <configuration>
    <nvdApiKey>...</nvdApiKey>
    <assemblyAnalyzerEnabled>false</assemblyAnalyzerEnabled>
    <ossIndexServerId>ossindex</ossIndexServerId>
    <ossIndexAnalyzerEnabled>true</ossIndexAnalyzerEnabled> <!-- SET THIS TO FALSE IF YOU HAVE NO SONATYPE ACCOUNT! -->
  </configuration>
  <executions>
    <execution>
      <goals>
        <goal>check</goal>
      </goals>
    </execution>
  </executions>
</plugin>
  • nvdApiKey: مفتاح API للوصول إلى قاعدة بيانات NVD (موصى به للمسح الأسرع والأكثر موثوقية).
  • ossIndexServerId: يشير إلى بيانات الاعتماد في ملف settings.xml الخاص بـ Maven لـ OSS Index (انظر أدناه).
  • ossIndexAnalyzerEnabled: قم بتعيينه إلى true لتمكين فحص OSS Index. إذا واجهت أخطاء المصادقة (401)، قم بتعيينه إلى false لتعطيل OSS Index.

المصادقة مع OSS Index

لاستخدام OSS Index، تحتاج إلى إضافة بيانات الاعتماد الخاصة بك إلى ملف settings.xml الخاص بـ Maven:```xml ossindex YOUR_OSSINDEX_USERNAME YOUR_OSSINDEX_API_TOKEN

root@kitploit:~
استبدل `YOUR_OSSINDEX_USERNAME` و `YOUR_OSSINDEX_API_TOKEN` بتفاصيل حساب OSS Index الخاص بك.

#### استكشاف الأخطاء وإصلاحها

- إذا رأيت أخطاء `401 Unauthorized` لـ OSS Index، تحقق من بيانات اعتمادك أو قم بتعطيل OSS Index عن طريق تعيين `<ossIndexAnalyzerEnabled>false</ossIndexAnalyzerEnabled>` في `pom.xml`.
- يمكنك دائمًا تشغيل البناء بدون OSS Index إذا كنت تفضل المسح المستند إلى NVD فقط.

#### مزيد من المعلومات

راجع [وثائق Maven Plugin الخاصة بـ Dependency-Check](https://jeremylong.github.io/DependencyCheck/dependency-check-maven/index.html) للحصول على خيارات التكوين المتقدمة.

### بدء المشروع في IntelliJ IDEA

المتطلبات: تأكد من تثبيت الأدوات التالية: [Docker](https://www.docker.com/products/docker-desktop/)، [Java25 JDK](https://jdk.java.net/25/)، [NodeJS 24](https://nodejs.org/en/download/current) و [IntelliJ IDEA](https://www.jetbrains.com/idea/download).

1. قم بعمل Fork و clone للمشروع كما هو موضح في [التوثيق](https://github.com/OWASP/wrongsecrets/blob/master/CONTRIBUTING.md).
2. استورد المشروع في IntelliJ (على سبيل المثال، استيراد كمشروع mvn / مصادر محلية)
3. اذهب إلى إعدادات المشروع وتأكد من أنه يستخدم Java25 (وأن JDK يمكن العثور عليه)
4. اذهب إلى إعدادات IDE > Language & Frameworks > Lombok وتأكد من تمكين معالجة Lombok
5. افتح علامة تبويب Maven في IDEA وقم بتشغيل "Reload All Maven Projects" لمزامنة النظام وتنزيل كل شيء. بعد ذلك، في نفس علامة التبويب، استخدم خيار "install" كجزء من دورة حياة OWASP WrongSecrets لإنشاء asciidoc وما شابه ذلك.
6. الآن قم بتشغيل الطريقة `main` في `org.owasp.wrongsecrets.WrongSecretsApplication.java`. يجب أن يفشل هذا مع تتبع مكدس.
7. الآن اذهب إلى تكوين تشغيل التطبيق وتأكد من أن لديك الملف الشخصي النشط `without-vault`. يتم ذلك عن طريق تعيين وسائط خيارات VM إلى `--server.port=8080 --spring.profiles.active=local,without-vault`. قم بتعيين `K8S_ENV=docker` كوسيطة بيئة.
8. كرر الخطوة 6: قم بتشغيل التطبيق مرة أخرى، يجب أن يكون لديك تطبيق يعمل بشكل صحيح ويمكن زيارته في متصفحك على http://localhost:8080.

**دليل مصور** حول كيفية بدء المشروع في IntelliJ IDEA متاح في [_Contributing.md_](https://github.com/OWASP/wrongsecrets/blob/master/CONTRIBUTING.md#how-to-get-started-with-the-project-in-intellij-idea).

لا تتردد في التعديل واقتراح التغييرات عبر طلبات السحب. تأكد من اتباع إرشاداتنا في [التوثيق](https://github.com/OWASP/wrongsecrets/blob/master/CONTRIBUTING.md) ليتم قبول عملك.

يرجى ملاحظة أننا ندعم رسميًا فقط Linux و MacOS للتطوير. إذا كنت ترغب في التطوير باستخدام جهاز Windows، فاستخدم WSL2 أو جهازًا افتراضيًا يعمل بنظام Linux. لقد قمنا بتضمين كشف عن Windows ومجموعة من ملفات `exe` لتجربة أولية، لكننا نبحث عن مشرفين نشطين لها. هل تريد التأكد من أنها تعمل على Windows؟ أنشئ طلبات سحب ;-).

إذا، بعد قراءة هذا القسم، لا تزال ليس لديك فكرة عن كود التطبيق: ألق نظرة [على بعض الدروس التعليمية حول Spring boot من Baeldung](https://www.baeldung.com/spring-boot).

### إعادة التحميل التلقائي أثناء التطوير

لتسريع تحميل التغييرات التي تم إجراؤها، أضفنا `spring-dev-tools` إلى مشروع Maven.
لتمكين هذا في IntelliJ تلقائيًا، تأكد من:

-   ضمن Compiler -> تمكين "Automatically build project"، و
-   ضمن Advanced settings -> تمكين "Allow auto-make to start even if developed application is currently running".

يمكنك أيضًا التشغيل يدويًا: Build -> Recompile للملف الذي قمت بتغييره للتو، وهذا سيفرض إعادة تحميل التطبيق.

### كيفية إضافة تحدي

اتبع الخطوات أدناه لإضافة تحدي:

1. أولاً، تأكد من أن لديك [Issue](https://github.com/OWASP/wrongsecrets/issues) مبلغ عنها حيث أن التحدي مطلوب حقًا.
2. أضف التحدي الجديد في مجلد `org.owasp.wrongsecrets.challenges`. تأكد من إضافة شرح في `src/main/resources/explanations` والإشارة إليه من فئة التحدي الجديدة الخاصة بك.
3. أضف اختبارات الوحدة والتكامل وواجهة المستخدم حسب الاقتضاء لإظهار أن التحدي الخاص بك يعمل.
4. لا تنس تكوين التحدي في `src/main/resources/wrong-secrets-configuration.yaml`
5. راجع [دليل المساهمة](https://github.com/owasp/wrongsecrets/blob/HEAD/CONTRIBUTING.md) لإعداد بيئة المساهمة الخاصة بك وكتابة رسائل commit جيدة.

لمزيد من التفاصيل، يرجى الرجوع إلى [_Contributing.md_](https://github.com/OWASP/wrongsecrets/blob/master/CONTRIBUTING.md#how-to-add-a-challenge).

إذا كنت ترغب في نقل التحديات السحابية الحالية إلى سحابة أخرى: قم بتوسيع فئات التحديات في حزمة `org.owasp.wrongsecrets.challenges.cloud` وتأكد من إضافة Terraform المطلوبة في مجلد مع تحديد السحابة المنفصلة. تأكد من إضافة البيئة إلى `org.owasp.wrongsecrets.RuntimeEnvironment`.
تعاون مع الآخرين في المشروع لتشغيل الحاوية الخاصة بك حتى تتمكن من الاختبار على حساب السحابة.

### الاختبار المحلي

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

1. تأكد من تثبيت bash وأنه مفتوح.
2. انتقل إلى .github/scripts.
3. قم بتشغيل سكريبت إنشاء docker: `bash docker-create.sh`.
   - ملاحظة: هل تريد تشغيل هذا على minikube الخاص بك؟ ثم قم أولاً بتشغيل `eval $(minikube docker-env)`.
4. اتبع أي تعليمات يتم تقديمها، قد تحتاج إلى تثبيت/تغيير الحزم.
5. قم بتشغيل الحاوية المنشأة حديثًا:
  - للتشغيل محليًا: `docker run -p 8080:8080 -p 8090:8090 jeroenwillemsen/wrongsecrets:local-test-no-vault`
  - لتشغيلها على minikube الخاص بك: استخدم الحاوية `jeroenwillemsen/wrongsecrets:local-test-k8s-vault` في تعريف النشر الخاص بك.
  - لتشغيلها مع Vault على minikube الخاص بك: استخدم الحاوية `jeroenwillemsen/wrongsecrets:local-test-local-vault` في تعريف النشر الخاص بك.

### الاختبار الآلي المحلي

لدينا حاليًا مجموعتان مختلفتان من الاختبارات، يتم تشغيلهما باستخدام `./mvnw test`.
- مجموعة اختبارات junit عادية لاختبارات الوحدة والتكامل، موجودة في مجلد [`test/java`](https://github.com/owasp/wrongsecrets/blob/HEAD/src/test/java) مع تخزين المخرجات في دليل الهدف الافتراضي.
- مجموعة اختبارات cypress، مدمجة عن طريق اختبار junit، موجودة في مجلد [`test/e2e`](https://github.com/owasp/wrongsecrets/blob/HEAD/src/test/e2e) مع تخزين المخرجات في [`target/test-classes/e2e/cypress/reports/`](https://github.com/owasp/wrongsecrets/blob/HEAD/target/test-classes/e2e/cypress/reports/). راجع [ملف readme الخاص بـ cypress](https://github.com/owasp/wrongsecrets/blob/HEAD/src/test/e2e/cypress/README.md) لمزيد من التفاصيل.

ملاحظة: يمكنك القيام بدورة كاملة من التنظيف والبناء والاختبار باستخدام `./mvnw clean install`.

## 🔧 استكشاف الأخطاء وإصلاحها

### المشكلات الشائعة

**مشكلات Docker:**
- **المنفذ مستخدم بالفعل**: قم بتغيير تخطيط المنفذ: `docker run -p 8081:8080 -p 8091:8090 jeroenwillemsen/wrongsecrets:latest-no-vault`
- **لم يتم العثور على Docker**: تأكد من تثبيت Docker وتشغيله
- **تم رفض الإذن**: على Linux، قد تحتاج إلى إضافة مستخدمك إلى مجموعة docker

**مشكلات المتصفح:**
- **لا يمكن الوصول إلى localhost:8080**: تحقق من تشغيل حاوية Docker باستخدام `docker ps`
- **التحديات لا يتم تحميلها**: امسح ذاكرة التخزين المؤقت للمتصفح أو جرب وضع التصفح المتخفي

**مشكلات Kubernetes:**
- **لا يبدأ Minikube**: جرب `minikube delete` ثم `minikube start`
- **الـ Pods عالقة في حالة معلقة**: تحقق من الموارد باستخدام `kubectl describe pod <pod-name>`

**هل تحتاج إلى مساعدة؟**
- اطلع على [GitHub Issues](https://github.com/OWASP/wrongsecrets/issues)
- انضم إلينا على [OWASP Slack](https://owasp.slack.com/archives/C02KQ7D9XHR)
- راجع قسم [الدعم](#support)

## هل تريد اللعب، لكن لا يُسمح لك بتثبيت الأدوات؟

إذا كنت ترغب في لعب التحديات، ولكن لا يمكنك تثبيت أدوات مثل keepass أو Radare وما إلى ذلك، ولكن يُسمح لك بتشغيل حاويات Docker، فجرب ما يلي:```shell
docker run -p 3000:3000 -v /var/run/docker.sock:/var/run/docker.sock jeroenwillemsen/wrongsecrets-desktop:latest

أو استخدم شيئًا أكثر قابلية للتخصيص:```shell docker run -d
--name=webtop
--security-opt seccomp=unconfined
-e PUID=1000
-e PGID=1000
-e TZ=Europe/London
-e SUBFOLDER=/
-e KEYBOARD=en-us-qwerty
-p 3000:3000
-v /var/run/docker.sock:/var/run/docker.sock
--shm-size="2gb"
--restart unless-stopped
jeroenwillemsen/wrongsecrets-desktop:latest

root@kitploit:~
ثم على [http://localhost:3000](http://localhost:3000).

ملاحظة: كن حذرًا عند محاولة نشر حاوية `jeroenwillemsen/wrongsecrets-desktop` على Heroku ;-).

## Docker على macOS مع M1 و Colima (تجريبي!)

ملاحظة: نحن لا ندعم Colima رسميًا، حيث نلاحظ أن مشغلات GitHub تواجه الكثير من المشكلات معه.

إذا لم تتمكن من التبديل إلى Docker Desktop/Podman وترغب في استخدام Colima مع Apple Silicon M1
لتشغيل صورة Docker `jeroenwillemsen/wrongsecrets`، يمكنك تجربة أحد الخيارات التالية:

- إيقاف تشغيل Colima (`colima stop`)
- تغيير سياق Docker (`docker --context desktop-linux run -p 8080:8080 jeroenwillemsen/wrongsecrets:latest-no-vault`)
- تشغيل Colima مع 1 CPU (`colima start -m 8 -c 1 --arch x86_64`)

## هل ترغب في تعطيل التحديات في إصدارك الخاص؟

إذا كنت ترغب في تشغيل WrongSecrets ولكن بدون بعض التحديات التي لا تريد عرضها للآخرين، يرجى قراءة هذا القسم.

*_ملاحظة_* يرجى ملاحظة أننا لا نقدم أي دعم لمشروع fork الخاص بك عندما تتبع العملية أدناه. يرجى فهم أن الترخيص وحقوق النشر للتطبيق الأصلي تظل سليمة لمشروع Fork الخاص بك.

المتطلبات:
- أن يكون لديك JDK لجافا 25 مثبتاً؛
- أن يكون لديك حساب في سجل يمكنك من دفع نسختك من حاوية WrongSecrets إليه؛

فيما يلي الخطوات التي يجب عليك اتباعها لإنشاء إصدارك الخاص من WrongSecrets مع تعطيل بعض التحديات:
1. عمل Fork للمستودع.
2. في `src/main/resources/wrong-secrets-configuration.yaml` قم بإزالة المرجع للتحدي الذي لم تعد ترغب في وجوده في Fork الخاص بك.
3. في جذر المشروع قم بتشغيل `./mvnw clean install`
4. الآن قم ببناء صورة Docker للهدف الذي تختاره:```sh
   docker buildx create --name mybuilder
   docker buildx use mybuilder
   docker buildx build --platform linux/amd64,linux/arm64 -t <registry/container-name>:<yourtag>-no-vault --build-arg "argBasedPassword='this is on your command line'" --build-arg "PORT=8081" --build-arg "argBasedVersion=<yourtag>" --build-arg "spring_profile=without-vault" --push
   docker buildx build --platform linux/amd64,linux/arm64 -t <registry/container-name>:<yourtag>-kubernetes-vault--build-arg "argBasedPassword='this is on your command line'" --build-arg "PORT=8081" --build-arg "argBasedVersion=<yourtag>" --build-arg "spring_profile=kubernetes-vault" --push

قراءة متعمقة حول إدارة الأسرار

هل تريد معرفة المزيد؟ اطلع على المصادر أدناه:

  • مدونة: 10 إرشادات حول إدارة الأسرار
  • OWASP SAMM حول إدارة الأسرار
  • موضوع كشف الأسرار في Github
  • ورقة الغش لإدارة الأسرار من OWASP
  • OpenCRE حول إدارة الأسرار
تنزيل الأداة
Mike Woudenberg @mikewoudenberg
  • Spyros @northdpole
  • moeedrehman135 @moeedrehman135
  • RubenAtBinx @RubenAtBinx
  • Seershan Mitra @seershan
  • Alex Bender @alex-bender
  • Danny Lloyd @dannylloyd
  • Fern @f3rn0s
  • Rick M @kingthorin
  • Nicolas Humblot @nhumblot
  • Shlomo Zalman Heigh @szh
  • Jeff Tong @Wind010