تكلمنا سابقاً عن إستغلال ثغرات SQL injection بشكل يدوي داخل تطبيقات php التي تعمل بقواعد بيانات MySQL , وتحدثنا أيضاً عن شرح برنامج SQLmap بشكل كامل , في هذا المقال إن شاء الله سوف نتكلم عن كيفية إستغلال ثغرات Sql injection لتطبيقات php من خلال قواعد postgreSQL  بإستخدام برنامج Sqlmap , كما سوف نتكلم عن كيفية تخطي بعض الأمور التي ينفذها Apache على بعض المجلدات , ومن ثم تكوين وتنفيذ Metasploit Meterpreter على الخادم للحصول على إتصال مباشر بيننا وبين الخادم.

بعد ما قمت بتحميل وتشغيل أحد مختبارات موقع pentesterlab الموجود على هذا الرابط , أصبحت جاهزاً للبدأ بتنفيذ الهجوم على المختبر ومحاولة إختراقه خلال عملية إختبار إختراق ممنهجة حسب العمليات التالية :

  1. جمع المعلومات حول تطبيق الويب وملقم الويب.
  2. إكتشاف وإستغلال ثغرة  SQL injection موجوده بالتطبيق.
  3. محاولة رفع php backdoor على الخادم وتخطي الحمايات الموجوده على عملية الرفع.
  4. تشغيل php backdoor وتنفيذ بعض الأوامر على الخادم.

حسناً , دعونا نبدأ بالمرحلة الأولى وهي جمع المعلومات حول تطبيق الويب والخادم , سوف نبدأ الأن بمعرفة نوع ملقم الويب من خلال عمل فحص Nmap سريع للمنفذ 80 من خلال الأمر التالي :

nmap_scan_port_80

لنلاحظ أن ملقم الويب هو Apache يعمل بالإصدار 2.2.16 ويعمل على نظام تشغيل Debian , هذه الأمور سوف تفيدنا جداً أثناء عملية إختبار الإختراق لمعرفة بعض الأمور بخصوص رفع الملفات وتخطي الحمايات وسوف نتكلم عنها لاحقاً.

الأن لنبدأ بإختبار إختراق التطبيق و سوف نبدأ بالصفحه الخاصة بعرض الصورة التي تسمى “cat.php” وهذه صورة لها :

cat1

 

الأن سوف نقوم بإدخال إشارة “single quotation” إلى الرابط في محاولة لإحداث خلل بالإستعلام الذي ربط الصورة بقاعدة البيانات وهذه الأمور سوف تقهمها فور تصفح التطبيق وفهم ألية عمله , وهذه الأمور لا تستطيع القيام بعملية إختبار إختراق ناجحه إلا في حال إتقانها , وإتقان فهم ألية عملت تطبيقات الويب يأتي من خلال تعلم تطوير تطبيقات الويب أو على الأقل معرفة أمور أساسية عنها , والصورة التالية توضح ظهور خلل فور إدخال “single quotation” على الرابط :

cat_2_error
هذا الخطأ يدل على وجود ثغرة Sql injection داخل التطبيق , والذي يؤكد لنا أنا قاعدة البيانات هي PostgerSQL هو ظهور الدالة pg_exec , الأن سوف نحاول التأكد من الثغرة من خلال معرفة عدد الأعمدة وسوف نبدأ بتنفيذ الإستعلام :

SELECT UNION 1,2

حيث سوف نبدأ بإدخال عامودين ومن ثم نقوم بالزياده حسب عدد الأعمدة , وسوف نشرح كيفية إستخراج إصدار قاعدة البيانات في حال الحصول على عدد صحيح للأعمدة , وهذه نتيجه تنفيذ الإستعلام :

cat_error_3

 

الخطأ في الصورة أعلاه يوضح أن عدد الأعمده المدخله لا يساوي عدد الأعمده الحقيقية لذلك وجب علينا زياده عدد الأعمده وسوف نقوم بزياده عدد الأعمدة إلى 3 , وهذه الصورة توضح نتيجة تنفيذ الإستعلام بعد زياده عدد الأعمده :

cat_error_4

 

ما زال الخطأ موجود ! , لذلك يجب أن نزيد عدد الأعمده إلى 4 ولنرى ماذا سوف يحصل بعد ذلك , وهذه الصورة توضح النتيجه بعد زيادة عدد الأعمدة إلى 4 :

cat_error_5

ممتاز ! هذا الخطأ يعني ان عدد الأعمده الصحيح هو 4 حسب ما أدخلنا وعليه فأننا جاهزون الأن لتنفيذ الخطوة الثانية من عملية الإستغلال وهي إستخراج العامود المصاب لتنفيذ الإستعلام فيه , الأن يجب علينا تحويل جميع الأرقام التي تشير إلى عدد الأعمدة إلى “Null” ومن ثم تعويض أمر لإستخراج إصدار قاعدة البيانات وهذه الصورة توضح العملية :

cat_error_6

ممتاز ! حسب ما هو موجود في الصورة تبين لنا إصدار قاعدة البيانات وبعض المعلومات الخاصه بها , وعلى هذا فإن الثغرة تعمل بشكل سليم , ويجب الأن أن نقوم بإستغلالها من خلال برنامج SQLmap للحصول على نتيجه قوية وسريعه والأن سوف أشرح كيفية إستغلال الثغرة من خلال برنامج SQLmap :

sqlmap_1

قمنا بتحديد الرابط المصاب ومن ثم قمنا بتحديد الخيار –dbs للحصول على جميع قواعد البيانات , ومن ثم الخيار –dbms  لتحديد قاعدة البيانات بأنها postgerSQL , والصورة التالية توضح نتيجة تنفيذ الأمر :sqlmap_db

كما نرى يوجد 3 قواعدبيانات , سوف نقوم بإستخراج الجداول من القاعدة public , والصورة التالية توضح القيام بهذه العملية :

sqlmap_tables

والناتج سوف يكون كما يلي :

sqlmap_public_results

جميل جداً , كما نلاحظ وجدنا الجدول users والذي بالطبع سوف يحتوي على العديد من المعلومات المفيده التي سوف نستخدمها للدخول إلى لوحة التحكم الخاصه بمدير الموقع , وفي ما يلي صورة توضح كيفية إستخراج الأعمده من الجدول users :

sqlmap_table_dumpوالصورة التالية توضح نتيجة إستخراج الأعمده الموجوده داخل هذا الجدول :

sqlmap_dump_column

 

الأن سوف نقوم بإستخراج المعلومات الموجوده بالأعمده هذه ومحاولة فك تشفير MD5 hash والدخول إلى لوحة مدير لموقع , والصورة التالية توضح هذه العملية :

dumped_data

وفي ما يلي نتيجه تنفيذ هذا الأمر :

sqlmap_final_data_dumped

 

في الصورة السابقة تم إستخراج معلومات الدخول وهي admin // P4ssw0rd سوف نسخدمها الأن للدخول للوحة التحكم وفي ما يلي صورة للوحه التحكم بعد عملية الدخول لها :

admin

سوف نقوم الأن بإضافة صورة جديده وسوف نحاول رفع php file يقوم بطباعة كلمة iSecur1ty لكي نتأكد من ان التطبيق يقوم برفع الملفات بشكل سليم وتنفيذها , وهذه صورة توضح الفورم المخصص لرفع الصور من داخل لوحة التحكم :

newسوف نحاول رفع الملف بالكود التالي ولنرى ما سوف يحصل :

test

بعد عملية رفع الملف ظهر لنا خطأ يفيد بأن البرنامج لا يقبل ملفات php , لذلك يجب علينا التفكير بطريقة لتخطي هذا الموضوع , وأبسطها هو رفع ملف بصيغة غير معرفة ومن ثم رفع ملف .htaccess يقوم بتنفيذ الملف بالصيغة الغير معروفة كملف php عادي , أي أن يوجه الملف لمفسر php على أنه ملف php عادي , وسوف نقوم بعمل php backdoor من خلال Metasploit  ورفعة بإسم “bc.iSecur1ty” وسوف نقوم بتجهيز ملف .htaccess يقوم على بترجمة الملفات بإمتداد iSecur1ty على أنها php file , وفي ما يلي الصور التي توضح ذلك :

bcالصورة أعلاه توضح تكوين php backdoor يقوم بعمل reverse connection وتنفيذ سطر أوامر Meterpreter سوف نقوم بتغير إسمه إلى bc.iSecur1ty ومن ثم تكوين .htaccess لتشغيل الملف بإمتداد .iSecur1ty , والأن سوف نقوم برفع bc.iSecur1ty ولنرى إن كان سوف يتنفذ أو لا قبل رفع .htaccess :

php_no_exec

كما نلاحظ لم يتنفذ السكربت ! لذلك سوف نقوم برفع .htaccess ومن ثم سوف يتنفذ السكربت بناءاً على طلب .htaccess بتشغيل الملفات ذات إمتداد .iSecur1ty كملفات php وهذه الصورة توضح العملية بعد رفع .htaccess الذي يحتوي على الكود التالي :

AddType

وهذه الصورة توضح كيفية الحصول على إتصال عكسي بعد تنفيذ السكربت ورفع .htaccess :

finish_it

كما نلاحظ أصدقائي بالفعل تم الحصول على إتصال عكسي بعد عملية رفع ملف .htaccess الذي يقوم بتشغيل ملفات  .iSecur1ty بكل سهولة , وبهذا تكون عملية إختبار الإختراق نجحت وتم إختراق النظام بعد فهم صحيح وعميق للنظام.

أتمنى أن يكون هذا المقال مفيد لكم وبإذن الله نلقاكم بمقالات أخرى 🙂