السلام عليكم ورحمة الله وبركاته 

اخواني واخواتي الاعزاء زوار واعضاء موقع isecur1ty . اليوم سأشرح لكم كيف قمت بحل التحدي الاول من سلسلة التحديات الموجوده لدي موقع securitytube

فلقد قام مؤسس موقع securitytube بتقديم مجموعه من التحديات للمستويات المختلفه .

 

التحدي الاول :  

لنبدأ في التحدي الاول الموجود في الرابط ادناه :

Screenshot from 2014-01-22 04:06:32

http://pentesteracademylab.appspot.com/lab/webapp/1

 

متطلبات التحدي : 

– تخطي لوحة تسجيل الدخول .

بعض التلميحات :

– الدومين الخاص بالشركه : PentesterAcademy.com

–  اسماء المستخدمين هما : jack,admin

–  طول الباسورد الواحد 5 حروف فقط مكونين من ثلاث حروف هم  x,y,z

 

طريقة الحل : 

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

انه يقول ان كلمة المرور طولها 5 احرف وتتكون فقط من 3 احرف وهم x,y,z اذن احتمالية كلمة المرور ان تكون مثلا : xxxxx او yyyyy  او zzzzz او xyzzz

ولكن مهلا ! هل من المعقول ان نقوم بعمل تجربه لكل كلمات المرور التي تخطر ببالنا وتتكون من 3 حروف !! ان هذا الحل بالتأكيد بدائي جدا ومعقد للغايه وربما قد تقع في الخطأ اثناء المحاولات اليدويه وربما ستشعر بالملل وتترك التحدي 🙂

دعونا نقوم بحلها بطريقة رياضيه : ان الاحتمالات الممكنه لكلمة المرور هي 3 ^ 5  اي تساوي 243 احتمال .

ان 3 هي الحروف المطلوبه x,y,z و 5 هو طول كلمة المرور .

دعوني اشرح لكم بمثال اخر : كلمة مرور مكونه من اعداد عشريه 0-9 وطول كلمة المرور 12 اذن فكم عدد الاحتمالات الممكنه لكلمات المرور ؟  

بما ان الاعداد الممكنه هي من 0 الي 9 وطول كلمة المرور هو 12 اذن فعدد الاحتمالات الممكنه هو 10 ^ 12  .

اذن فهناك 243 احتمال لكلمة المرور لكل مستخدم حيث ان عدد المستخدمين اثنان وهما jack , admin  . لذا فسنقوم بمحاولة الدخول بكل مستخدم منهم مع عدد احتمالات كلمة المرور (243) اذن فان عدد المحاولات الكليه هو 243 *2 = 486

 

جيد .. لنبدأ في كتابة كود بايثون يقوم بحل هذا التحدي .

التطبيق العملي : 

– اولا كيف يمكننا الاتصال بصفحة ويب علي الانترنت من خلال كود بايثون ؟  يمكننا فعل ذلك من خلال مكتبة urllib,urllib2  و يمكنك التعرف عليها اكثر من خلال الرابط التالي : http://www.pythonforbeginners.com/python-on-the-web/how-to-use-urllib2-in-python/

يوجد مكتبة اخري ساقوم باستدعاءها خاصة بتلوين الـ output وذلك لتعطيني لون مميز عند تخطي لوحة تسجيل الدخول يمكنكم تحميل هذه المكتبه من خلال الرابط التالي : https://pypi.python.org/pypi/termcolor

– ثانيا ساقوم بفتح المحرر لكتابة واستدعاء المكتبات اللازمه لذلك ساستدعي اولا مكتبة urllib2  ,  وساستدعي جزئية cprint , colored  من termcolor التي قمنا بتنزيلها مسبقا .

الان سأقوم بعمل list تحتوي علي 3 حروف وهم x,y,z لكي ابدا عمل كود خاص باحتمالية كلمات المرور الكليه .

Screenshot from 2014-01-25 11:49:31

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

اولا ساقوم بعمل حلقة تكرار for loop بحد اقصي خمسة احرف وهي من خلال xrange() فسيقوم بالعد من 0 الي 4

من ثم ساقوم بعمل list جديده وليكن اسمها a وساقوم بوضع حلقة تكراريه اخري بها كل عنصر من عناصر pass_list وهم الثلاثة احرف x,y,z  . بعد ذلك ساقوم حلقة تكراريه اخري بداخلها تكرار اخري يحتوي علي جمع كل عنصر من المصفوفه الثانيه مع الاولي وسيتم وضعهم جميعا في list a والتي قمت بعملها داخل الحلقة التكراريه

Screenshot from 2014-01-25 12:00:48

 

الان عند طباعه اللست a ستقوم بطباعه كل عنصر تم اضافته بها وسنلاحظ اللست علي الشكل التالي

Screenshot from 2014-01-25 12:05:50 سنلاحظ ان اول عنصر وهو xxxxx وتاني عنصر تم تغيير اول x بتاني عنصر في اللست pass_list وهو العنصر y ومن ثم تالت تخمين وهو zxxxx حيث تم تغيير اول عنصر بالعنصر التالت بالمصفوفه pass_list وهكذا .

الان قمنا بعمل لست كامله لكلمات السر المتوقعه ساقوم بعمل واحده خاصه باسماء الدخول وهم admin و jack  كما موضح بالصوره
Screenshot from 2014-01-25 12:11:55لدينا الان كلمات المرور واسماء الدخول المتوقعه باقي لنا خطوة واحده وهي الاتصال بموقع الهدف ومن ثم محاولة تخمين كلمات المرور واسماء الدخول حتي يتم الدخول بنجاح .

سنحاول اولا يدويا بادخال اي كلمة مرور واسم مستخدم وليكن admin وكلمة المرور xyxxx مثلا

سنلاحظ ان الرد ” Failed try again ” ولكن مايهمنا في الامر هو رابط الفورم التي قمنا بمحاولة التسجيل عليها فسنلاحظ ان الرابط قد تغير الي التالي

http://pentesteracademylab.appspot.com/lab/webapp/1?email=admin&password=xyxxx

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

ساقوم اولا بعمل حلقتين تكرار الاولي لاسماء الدخول والثانيه لكلمات المرور وليكن كالتالي

Screenshot from 2014-01-25 12:24:19

ملحوظه : قمت بعمل print لكل عنصر بحلقة التكرار حتي اتأكد ان حلقة التكرار تعمل بالشكل الذي نريده . 

الان نريد عمل اتصال بالفورم ومن ثم ارسال اسم الدخول وكلمة المرور من خلال urllib2

ساقوم بعمل متغير جديد سأسميه url وسيحتوي علي رابط الفورم ولكني ساقوم بتغيير المدخلات وهي email & password بالمتغيرات التي لدينا في حلقة التكرار كما بالشكل التالي .

Screenshot from 2014-01-25 12:28:23بعد ذلك سنقوم بعمل الاتصال بهذا الرابط ومن ثم طباعه رد السيرفر.

Screenshot from 2014-01-25 12:32:29 عند تشغيل هذا الكود نلاحظ انه يقوم بطبع كود الصفحه الخاصه بالفورم وبالتالي فالعمليه ستكون اكثر تعقيدا فكيف سيقوم السكربت بمعرفه ما اذا كان الباسورد صحيح وقد تم الدخول بالفعل ام لا ؟!

كما ذكرت من قبل عند محاولتي الدخول يدويا للموقع فقد جائني الرد “Failed please try again later” وبكل تاكيد فان هذه الجمله تكون مطبوعه بداخل كود الصفحه عند محاولة الدخول الخاطئه وعند الدخول الصحيح فبكل تاكيد ستتغير هذه الجمله . فماذا ان قمت بعمل فحص لكلمة failed مثلا في كل محاوله وعند عدم ايجادها فذلك يعني انه تم تسجيل الدخول بنجاح

ولذلك ساستبدل سطر print out بـ

print out[2486:2492]

كيف قمت بمعرفة ذلك ؟؟ فالموضوع بسيط للغايه يمكنك فتح الصفحه في اي محرر ومعرفة اين تقع كلمة failed تحديدا

ثم نقوم بتجربه الكود مرة اخري

Screenshot from 2014-01-25 12:38:52بقي لنا خطوة واحده وهي عمل فحص لكل output من الصفحه وعند عدم وجود كلمة failed في احد المحاولات هذا يعني انها المحاولة الصحيحه

 

 

Screenshot from 2014-01-25 12:41:23الان نقوم بتشغيل السكربت وسيقوم تلقائيا بعمل كل محاولات الدخول للموقع وحين يتم الدخول بنجاح سيبلغك بان العملية تمت بنجاح .

ولكن مهلا فالامر لم يتم بنجاح وسنلاحظ ان كل المحاولات والتخمينات قد فشلت ولم تنجح واحدة منهم !

ربما قد نسيت شئ ما … ان لاحظتم في تسجيل الدخول فانه يطلب بريد الكتروني وكلمة مرور وليس اسم مستخدم وايضا في التلميحات قد ذكر لنا ان الدومين الخاص بالشركه هو pentesteracademy.com اذن فان اسماء الدخول ليست jack , admin فقط بل هي admin@pentesteracademy.com , jack@pentesteracademy.com  سنقوم بتغييرها واعادة المحاوله

 

 

Screenshot from 2014-01-25 12:53:33لقد نجحنا ! ساقوم بمحاولة كتابة اليوزر والباسورد يدويا في الفورم …

 

 

 

Screenshot from 2014-01-25 12:49:08لقد تم حل التحدي بنجاح من خلال سكربت بايثون خاص بنا من البدايه وحتي النهايه 🙂

ملحوظه هامه :  توجد طرق كثيره اسهل بكثير مما قمت به لحل التحدي ولن ياخذ بضعه دقائق مثلا كعمل باسورد لست من خلال اداة crunch و قد قام بشرحها اخي علي الوشلي من قبل في مقال “أستخدام اداة crunch لتوليد قواميس كلمات المرور” ومن ثم محاولة وضعها في اداة hydra وستقوم بالتخمين تلقائيا ولكني احببت ان اقوم بشرح كيفية عمل سكربت بسيط من البدايه للنهايه للقيام بذلك الامر فهذا افضل بكثير وسنتعلم منه افضل من استخدام ادوات جاهزه 🙂