
تطبيق جافا شديد الضعف (SVJA)، كما تم عرضه في بودكاست Roniel وDaRon، هو تطبيق Apache Struts مصمم لاحتواء عدد من الثغرات الأمنية الشائعة للغاية. على عكس البرامج الأخرى «الضعيفة عن قصد»، صُمم هذا البرنامج لمحاكاة الثغرات الشائعة بالطريقة التي تُرى بها غالبًا في الواقع، وليس بطريقة مبسطة بشكل مفرط أو بأسلوب «التقاط العلم». يتم تحديث هذا البرنامج والإضافة إليه بشكل شبه منتظم، مع تقديم عروض توضيحية لبعض الثغرات كجزء من البودكاست.
تطبيق RDPS Super Vulnerable Java Application هو بالضبط ذلك -- تطبيق جافا شديد الضعف أُنشئ لفائدة الجميع ليروا مجموعة متنوعة من الثغرات الشائعة، والتي غالباً ما تكون "معقدة". تم إنشاء هذا البرنامج كجزء من Roniel and DaRon Podcast Show (https://www.youtube.com/channel/UCbj1JFcSJeTuf3qf9GPRemA) حتى نتمكن من مناقشة وعرض عدد من الثغرات التي صادفناها بشكل متكرر بطريقة أكثر واقعية مما ستشاهده مع العديد من الأدوات الأخرى عبر الإنترنت. لمشاهدة أمثلة على الاستغلال، يرجى مشاهدة البودكاست الخاص بنا.
يرجى تذكّر أن هذا التطبيق مُصمم ليكون شديد الضعف تجاه عدد من الأمور. كن حذراً أين تشغّله، وقيّد من يمكنه الوصول إليه (يجب أن يستمع خادم Tomcat على localhost فقط، وعلى جهازك الشخصي فقط). لسنا مسؤولين إذا لم تستطع العناية بأشيائك بشكل صحيح، وتركت نسختك منه مكشوفة للرياح ليأخذ أي شخص وكل شخص أغراضك أو يخترق جهازك بشكل مروّع. نوصي بتشغيله في جهاز افتراضي (VM) آمن ولا يحتوي على أي شيء حساس ولا يتصل بالإنترنت. عدم تأمين النظام الذي يشغّله ونسخته بشكل صحيح سيؤدي على الأرجح إلى يوم سيء لك. مثل علاقات جنسية عابرة دون حماية مناسبة، أنت فقط تضع نفسك في موقف ستندم عليه يوماً ما. اعتبر نفسك محذّراً، لكن مشجّعاً على اللعب ;-)
يتكوّن RDPS SVJA من تطبيق Java Struts 2 يشغّل React. يتم بناؤه ببساطة عن طريق تشغيل: mvn clean package
ينشئ هذا ملف WAR في target -- svja.war. ضع ملف WAR ببساطة في مجلد webapps الخاص بـ Tomcat. في بناء Tomcat الافتراضي، انتقل إلى http://127.0.0.1:8080/svja للوصول إلى التطبيق.
إذا كنت تستخدم Tomcat 10 أو أحدث، يرجى إضافة <Loader jakartaConverter="TOMCAT" /> إلى ملف إعداد context.xml الخاص بـ Tomcat.
بالنسبة لمن يريد استخدامه لبدء الأمور، أصبح الجذر (http://127.0.0.1:8080/svja) يوفّر الآن Swagger UI ومواصفات OpenAPI أساسية (http://127.0.0.1:8080/svja/specification.yaml) يمكنك استخدامها. لاحظ أن المواصفات، وبالتالي Swagger UI، لا تلامس إلا سطح الموضوع (أليس هذا هو جوهر إلغاء التسلسل غير الآمن، وما إلى ذلك؟).
فيما يلي بعض من أهم الثغرات في النظام، حسب الإجراء.
admin:admin (application administrator account)
bill:baker (privileged user account)
bob:barker (basic, read-only user account)
/api/authenticate?user.username=admin&user.password=admin
/api/authenticate?user.username=bill&user.password=baker
/api/authenticate?user.username=bob&user.password=barker
بعد المصادقة، يمكنك استدعاء أي إجراء تريده باستخدام JSON أو Struts
GET /svja/api/authenticate?user.username=bill&user.password=baker HTTP/1.1
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0
Host: localhost
Accept: application/json, text/plain, */*
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Length: 0
DNT: 1
Connection: close
Cache-Control: max-age=0
GET /svja/api/authenticate HTTP/1.1
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0
Host: localhost
Accept: application/json, text/plain, */*
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/json
Content-Length: 61
DNT: 1
Connection: close
Cache-Control: max-age=0
{
"user": {
"username": "bill",
"password": "baker"
}
}
GET /svja/api/authenticate/federated?user.username=bill%40rdps.local&usernameTranslationRegex=%2F%40rdps%5B.%5Dlocal%2F%2F HTTP/1.1
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0
Host: localhost
Accept: application/json, text/plain, */*
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Length: 0
DNT: 1
Connection: close
Cache-Control: max-age=0
GET /svja/api/authenticate/federated HTTP/1.1
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0
Host: localhost
Accept: application/json, text/plain, */*
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/json
Content-Length: 61
DNT: 1
Connection: close
Cache-Control: max-age=0
{
"user": {
"username": "[email protected]"
},
"usernameTranslationRegex": "/@rdps[.]local//"
}
تذكّر تغيير svjatoken
GET /svja/api/projects?projectId=1 HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0
Accept: application/json, text/plain, */*
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Connection: close
Cookie: svjatoken=RaMu5vhFBgL8goV6Ja1ffLnpmcixNuAL7fUP;
Cache-Control: max-age=0
تذكّر تغيير svjatoken
GET /svja/api/projects HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0
Accept: application/json, text/plain, */*
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/json
Content-Length: 19
DNT: 1
Connection: close
Cookie: svjatoken=RaMu5vhFBgL8goV6Ja1ffLnpmcixNuAL7fUP;
Cache-Control: max-age=0
{
projectId:1
}
هذا عمل قيد التطوير ولدينا العديد من الثغرات والأشياء المخططة (بما في ذلك واجهة أمامية شديدة الضعف وتطبيقات أخرى شديدة الضعف) -- عُد إلينا كل بضعة أشهر وشاهد Roniel and DaRon Podcast Show لمعرفة التحديثات وأمثلة الاستغلال والأفكار الأخرى. نحن أيضاً نشجعك على محاولة اكتشاف كيفية تخفيف هذه الثغرات أو إصلاحها... كسر الأشياء سهل... أما التخفيف والإصلاح والتأمين فهو الصعب. حظاً موفقاً وصيداً سعيداً!