المرحلة: Realistic Level: 2 (Chicago American Nazi Party)

الصعوبة: سهلة

الرابط: https://www.hackthissite.org/playlevel/2/

المهمة: مجموعة من العنصريين ينظمون مسيرة في شيكاغو، يجب عليك إيقافهم بإسقاط الموقع.

الرسالة: أهلا، أُخبرت أن لديك بعض المهارات الرآئعة المتعلقة بالقرصنة. مجموعة من العنصريين يحاولون التنظيم عبر موقعهم هذا القيام بمسيرة ضد الأمريكيين من أصول غير أمريكية! لا يجب أن ندع شيئًا كهذا يحدث. إذا استطعت الدخول إلى صفحة الأدمن وكتابة رسالة في صفحتهم الرئيسية سيكون هذا رآئعا.

 

اذهب الآن وحاول أن تحل المشكلة. لا تتعدى هذه النقطة إذا كنت تريد حل التحدي بنفسك..

 


 

 

التلميح الأول:

يجب عليك أولا الوصول إلى صفحة حيث تستطيع إدخال بعض المدخلات، فأنت تحتاج غالبا إلى شئ كـ SQL Injection

 

التلميح الثاني:

ألا تلاحظ شيئا غريبًا في آخر الكود الخاص بالصفحة الرئيسية؟

 

التلميح الثالث:

جرب أن تدخل (') في خانة اسم المستخدم وكلمة المرور، ما الرسالة التي تشاهد؟

 

الحل:

دائما ضع هدفك أمام عينيك قبل البدء، أنت تريد الدخول إلى صفحة الأدمن، إذا عليك أولا البحث عنها. أحد طرق البحث هي تجربة بعض الكلمات المشهورة كـ admin.php أو wp-admin ، فباستخدامهما تكون الروابط كالآتي:
https://www.hackthissite.org/missions/realistic/2/admin.php

https://www.hackthissite.org/missions/realistic/2/wp-admin

وتستطيع تجربة ما يغلب على ظنك أنه قد يكون اسمًا لصفحة الأدمن. في هذا التحدي الاسم مختلف تماما، لن تستطيع غالبا تخمينه.

دعنا نجرب طريقة مختلفة، قد يكون هناك أي خيط في الصفحة الرئيسية يُوصلنا إلى الصفحة التي نريد. حاول الإطلاع على الكود المتعلق بالصفحة الرئيسية! ستلاحظ رابطًا مخفيا في آخر الصفحة!
hackthissite - realistec - 2 - 1
إذن دعنا نجرب: https://www.hackthissite.org/missions/realistic/2/update.php

وجدنا أخيرا بُغيتنا، صفحة للدخول إلى صفحة تحكم الموقع. يُوجد العديد من الطرق لمحاولة الدخول، منها تجربة عدد من كلمات المرور بأحد الأدوات المتوفرة، أو البحث عن ملف يحتوي على كلمات المرور في الموقع (في التحديات القادمة سنتحدث عن كلتا الطريقتين إن شاء الله). ولكن قبل تجربة أحدى تلك الطريقتين، جرب الطريقة الأكثر شيوعا وهي الـ SQL Injection.

دعنا أولا نتأكد أن هذه الصفحة معرضة لمثل هذا، أدخل (') في خانة اسم المستخدم وكلمة المرور! ستظهر لك رسالة: SQL Error إذن تخميننا كان صحيحا.

 

دعنا الآن نفكر، ما هي الـ SQL Query الذي يستخدمها هذا الموقع للقيام بالتأكد من صحة الباسورد.. تستطيع أن تجرب بإنشاء قاعدة بينات تحتوي على جدول واحد (وهو جدول الأدمن) وتقوم بالتجربة عليه أولا ثم التجربة في الموقع. هناك العديد من الحلول الصحيحة لهذا التحدي. أحداها أن تقوم بإدخال:

' OR 1=1 LIMIT 1/*

في خانة إسم المستخدم.

 

ملحق:

لماذا قمنا بإدخال

' OR 1=1 LIMIT 1/*

كما ذكرنا، عليك أولا أن تتوقع ما هي الـ Query المستخدمة. لنفرض مثلا أنها شئ كهذا:

select * from users where username = 'user' and password = 'pass';

من المتوقع أيضا أن الـ php تتأكد من عدد النتائج، فإذا كانت نتيجة واحدة اعتبرتها صحيحة. إذا قمت بإدخال 1=1 وحسب بدون LIMIT 1 ستقوم SQL بإرجاع جميع الجدول، لإن 1=1 صحيحة في كل الحالات! أما قيامنا بإدخال “*/” في آخر الـ Query فهي طريقة لإنهاء الـ Query بدون إكمالها. أي أن SQL سيعتبرها:

select * from users where username = ' ' or 1=1 LIMIT 1;

وسيقوم بإرجاع أول صف في الجدول دائما.