السلام عليكم

 

بعد تقديم عمر التحدي الثالث للحصول على نتائج للحل لكن لم نحصل الا على ثلاث حلول سوف نقوم الان بحل التحدي بكل طرقه .

 

اولاً : المعلومات الاولية 

 

رابط التحدي

 http://isecur1ty-challenges.com/xss/mid/myvideo.php

النص المصدري للصفحة 

7-7-2016 12-43-46 PM

المتغير المصاب (xss) 

ثانياً: بداية الحل 

الان لنرى ما ستقوم الصفحة بعرضه في حال ادخلنا رقم لنعرف اين يتم الحقن في الصفحة

http://isecur1ty-challenges.com/xss/mid/myvideo.php?xss=123

 

7-7-2016 12-46-01 PM

الحقن في اتربيوت name وهو الاسم في وسم video الان لنضع كود js

7-7-2016 12-49-46 PM

من الحقن الاتي نلاحظ امرين :

  1. الفلتر يحول المعطيات الى htmlentities  لذلك حقن الاقواس <> و حقن ” غير ممكن لان سيتم تحويلها الى htmlentities وتعطيل عملها .
  2. لاحظ ان الكود لم يظهر كله وتم قص جزء منه لذلك فالمتغير محدود جداً ولا يمكن حقن العديد من الامور به وغير ممكن حقن كود طويل .

 

الان بعد ان عرفنا الكثير من المعطيات لنقوم بعمل البايلود اللازم .

الان لناتي هل في الوسم video اي عمليات تنفذ كود javascript الجواب نعم لكنه يعمل فقط في متصفح اوبرا

 

http://isecur1ty-challenges.com/xss/mid/myvideo.php?xss=”poster=javascript:alert(1)//x

 

7-7-2016 12-57-28 PM

 

لم يظهر الكود كاملاً بالاضافة الى انه تم تاشيره من قبل المتصفح على انه هجوم جافا سكربت  لذلك نلغي فكرة الposter

 

نرجع الى الevent handler  الخاصة بجافا سكرتب مثل onerror, onload .. etc لكن في مقال التحدي الشروط الاساسية :

  1. تدخل المستخدم غير مسموح لذلك وجب علينا ان نجد event handler من غير تدخل المستخدم او طريقة لتشغيله
  2. يجب اظهار دومين الموقع ولذلك يجب ان تحتوي رسالة الalert دومين الموقع يمكن ذلك عن طريق domain او document.domain  . وكلا الكلمتين طويليتن سنواجه مشكلة هنا .

 

ايجاد حدث مناسب 

الان لنبحث عن event في جافا سكربت من دون تدخل المستخدم هناك العديد منها لكن يمكن جعل الاحداث غير التلقائية تلقائية ببعض الخدع لكن بما ان الكود قصير لايمكن استخدامها .

 

لنعرض بعض الاحداث التلقائية التي يمكن ان تضع في وسم video  :

onload ,onerror ,onshow ,onloadstart,onloadeddata,onprogress,oncanplay

 

سوف نقوم الان بوضع بعضها لنرى اي منها سيعمل :

onload  مفلتر (xss-event)

7-7-2016 1-09-21 PM

onerror  مفلتر (xss-event)

onshow  مفلتر (xss-event)

onloadeddata  مفلتر  (xss-event)

onprogress مفلتر (xss-event)

oncanplay  مفلتر (xss-event)

onloadstart  غير مفلتر !! 

 

الان عرفنا ان حدث onloadstart   غير مفلتر لنقوم الان بالاستفادة منه

7-7-2016 1-59-14 PM

 

 

 

 

المتغير طويل جداً ولا يمكن تنفيذه بالاضافة الى انه تم ابطاله بواسطة حماية المتصفح .

 

مفتاح الحل 

هناك طرق لوضع كود طويل في كود قصير عن طريق خصائص الصفحة مثل ما فعلت في مقال اختراق حساب medium هنا

 

في هذا التحدي ستحتاج خاصية من الصفحة و دالة من دوال جافا سكربت وتعد من اخطر الدوال.

خاصية الصفحة هي الاسم او name هي اقصر خاصية ( حسب علمي )

والدالة هي eval .

 

دالة eval 

دالة eval هي دالة خطيرة لانها تنفذ الstring ككود جافا سكربت وهذا امر خطير جداً لانه من الممكن ادخال نص وتنفيذه كجافا سكربت

باعتبار دالة Name تجعل الاسم string سوف نقوم بتنفيذها على شكل كود باستخدام دالة eval

 

هناك العديد من الطرق التي يمكن ان تقوم بعمل اسم للصفحة المفتوحة سوق نقوم بابسطها هنا للعلم هناك ثلاث طرق .

 

طريقة 1 

استعمال وسوم الرابط anchor

بعد ان عرفنا ادوات التحدي الان لنقوم بتجميع الباي لود

http://isecur1ty-challenges.com/xss/mid/myvideo.php?xss=%27%27onloadstart=eval(name)x

الطول مقبول والفلتر لم يقم بكشفه الان لنضع كود جافا سكربت في خاصية name

 x<a href=”http://isecur1ty-challenges.com/xss/mid/myvideo.php?xss=”onloadstart=eval(name)&video=http://123.com” target=’javascript:alert(domain)’>click here</a>x

في خاصية target نضع الكود وحين يفتح الصفحة الجديدة ستكون حاملة اسم javascript:alert(domain)xءء

وحين نذهب للصفحة الاخرى سوف تقوم دالة eval بتنفيذ اسم الصفحة كجافا سكربت وبذلك تم حل التحدي 🙂

طريقة 2 

يمكنك عمل ايفريم ووضع الاسم له على الشكل التالي

 

 

<iframe name=”javascript:alert(domain)” src=”http://isecur1ty-challenges.com/xss/mid/myvideo.php?xss=%27%27onloadstart=eval(name)”></iframe>

اذا جربته لن يعمل لانه تم وضع مصيدة للiframe يمكن تخطيها سوف نقوم بشرح الامر لاحقاً

اسماء الفائزين 

 

تحياتي وتحيات فريق isecur1ty نلتقي في تحديات جديدة