TOOL · ابزارها بهره‌برداری خودکار

SQLMap — اس‌کیو‌ال‌مپ

SQLMap

sqlmap یک ابزار خط فرمان متن‌باز است که تشخیص و بهره‌برداری از نقاط تزریق SQL از پیش مشکوک‌شده را خودکار می‌کند — نه کشف نقاط تزریق در سراسر یک برنامه — و فقط باید روی سامانه‌هایی با مجوز کتبی به کار رود.

تیم فنی پی‌هانتر

sqlmap چیست و چه کاری را خودکار می‌کند؟

sqlmap یک ابزار متن‌باز با مجوز GPLv2 است که پس از حدود بیست سال توسعه و مشارکت بیش از ۱۳۰ نفر، به استاندارد عملی خودکارسازی تزریق SQL تبدیل شده است. نکته‌ای که باید از همان ابتدا روشن باشد: sqlmap ابزار کشف نیست. کار آن، تشخیص عمیق و بهره‌برداری از نقطه‌ی تزریقی است که آزمونگر پیش‌تر مشکوک شده — نه پویش یک برنامه‌ی کامل برای یافتن اینکه کدام پارامتر آسیب‌پذیر است.

در زمان نگارش این مطلب نسخه‌ی جاری 1.10 با نام رمز «Tiarsus Helexina» است. sqlmap پنج تکنیک تزریق را پوشش می‌دهد: کور مبتنی بر بولین، کور مبتنی بر زمان، مبتنی بر خطا، مبتنی بر UNION و پرس‌وجوهای پشته‌ای (stacked). این ابزار بیش از ۴۰ backend پایگاه‌داده را پشتیبانی می‌کند، از MySQL و Oracle و PostgreSQL و SQL Server گرفته تا انبارهای داده‌ی ابری مدرن مثل Amazon Redshift، Snowflake و ClickHouse.

پس از تأیید تزریق، sqlmap می‌تواند نسخه‌ی DBMS را انگشت‌نگاری کند، اسکیما و جدول‌ها و ستون‌ها را شمارش کند، داده را استخراج کند، هش رمز عبور را بیرون بکشد و با دیکشنری بشکند، و در جایی که سطح دسترسی اجازه دهد فایل بخواند/بنویسد یا دستور سیستم‌عامل اجرا کند (--os-shell، --os-cmd).

جایگاه sqlmap در فرایند تست نفوذ

sqlmap در مرحله‌ی بهره‌برداری می‌نشیند، بعد از اینکه آزمونگر با کار دستی به یک نقطه‌ی مشکوک رسیده است. جریان کار حرفه‌ای این است:

  1. آزمونگر در Burp یک پارامتر را دستی آزمون می‌کند — مثلاً یک نقل‌قول تکی (') خطای پایگاه‌داده یا رفتار غیرعادی تولید می‌کند.
  2. همان درخواست کامل (با هدرها، کوکی نشست و بدنه) در یک فایل ذخیره می‌شود.
  3. sqlmap با آن فایل اجرا می‌شود تا تکنیک دقیق را بیابد و بهره‌برداری را عمق دهد.

چرا این ترتیب مهم است؟ چون sqlmap در حالت حدس زدن (-u روی یک آدرس خام) پرسروصدا و ناکارآمد است و اغلب نقاط تزریق پشت احراز هویت یا در جریان‌های چندمرحله‌ای را نمی‌بیند. کار دستی، نقطه‌ی تزریق را پیدا می‌کند؛ sqlmap آن را به یک PoC کامل تبدیل می‌کند. این تفاوت میان اسکن خودکار و تست نفوذ واقعی است.

فلگ‌های کلیدی و کارگاه عملی

فلگکارکرد
-uآدرس هدف (روش ضعیف‌تر؛ برای حدس زدن)
-rفایل درخواست ذخیره‌شده (روش حرفه‌ای)
--dataبدنه‌ی درخواست POST
-pتعیین پارامتر مشکوک برای تمرکز آزمون
--levelعمق آزمون (۱ تا ۵)
--riskپرمخاطره‌بودن payloadها (۱ تا ۳)
--techniqueمحدود کردن به تکنیک‌های خاص (B، T، E، U، S)
--dbsشمارش پایگاه‌داده‌ها
--tamperاسکریپت‌های دگرگون‌سازی payload برای دور زدن فیلتر
--batchپاسخ پیش‌فرض به همه‌ی پرسش‌ها (غیرتعاملی)

جریان حرفه‌ای با فایل درخواست ذخیره‌شده از Burp:

sqlmap -r request.txt -p id --level 2 --risk 1 --dbs

و پس از شناسایی پایگاه‌داده، شمارش جدول‌های یک پایگاه مشخص:

sqlmap -r request.txt -p id -D appdb --tables

درباره‌ی --level و --risk با احتیاط عمل کنید: مقادیر بالاتر از پیش‌فرض حجم عظیمی ترافیک تولید می‌کنند و payloadهای پرمخاطره (--risk 3) شامل عبارت‌هایی مثل OR-based هستند که می‌توانند داده را تغییر دهند. روی محیط عملیاتی، این پارامترها را محافظه‌کارانه نگه دارید.

اسکریپت‌های --tamper برای دور زدن WAF طراحی شده‌اند، اما در برابر WAFهای مدرن نتیجه‌شان نامطمئن است و نباید روی آن‌ها حساب باز کرد.

چه زمانی sqlmap ابزار اشتباهی است

یک آزمونگر خوب می‌داند sqlmap کجا کار نمی‌کند:

  • وقتی هنوز نقطه‌ی تزریق را پیدا نکرده‌اید. sqlmap کاشف نیست؛ ابتدا با کار دستی نقطه را بیابید.
  • تزریق مرتبه‌دوم (second-order). جایی که payload اکنون ذخیره می‌شود و بعداً در پرس‌وجوی دیگری اجرا می‌شود؛ sqlmap این را بدون پیکربندی صریح --second-url/--second-req نمی‌یابد.
  • NoSQL. تزریق در MongoDB و مشابه‌ها معنای متفاوتی دارد و sqlmap برای آن ساخته نشده.
  • بیشتر تزریق‌های واسطه‌ی ORM. بسیاری از انواع تزریق ORM خارج از توان sqlmap هستند.

و یک هشدار عملیاتی: sqlmap قابلیت مخرب دارد. --os-pwn payload روی سرور می‌ریزد و --level/--risk بالا ترافیک سنگین تولید می‌کند. در هر engagement، دامنه‌ی استفاده از این ابزار باید دقیقاً scope شده و مستند باشد.

مجوز و مسئولیت حقوقی

پیش‌شرط قطعی: مجوز کتبی

sqlmap ابزاری است که می‌تواند داده‌ی واقعی را استخراج و در مواردی سامانه را دستکاری کند. اجرای آن روی سامانه‌ای که مالک آن نیستید و مجوز کتبی آزمون آن را ندارید، تخلف است — بدون استثنا. این صفحه یک راهنمای دفاعی است، نه آموزش حمله: هدف، شناخت ابزار برای دفاع در برابر آن و برای آزمون قانونی سامانه‌های خودی است.

در یک engagement حرفه‌ای، پیش از هر اجرای sqlmap این‌ها باید موجود باشند: قرارداد آزمون امضاشده، دامنه‌ی مشخص (کدام میزبان‌ها، کدام پارامترها)، پنجره‌ی زمانی توافق‌شده و یک نقطه‌ی تماس اضطراری در سمت مشتری. payloadهای این صفحه صرفاً شکل مسئله را نشان می‌دهند (مثلاً ' OR '1'='1) و زنجیره‌ی بهره‌برداری واقعی نیستند.

راه درست دفاع، اجرای sqlmap علیه خودتان نیست، بلکه حذف ریشه‌ی تزریق است: کوئری پارامتری، جداسازی داده از دستور، و حساب پایگاه‌داده‌ی کم‌امتیاز. اگر می‌خواهید مطمئن شوید برنامه‌تان در برابر این کلاس آسیب‌پذیری امن است، تست نفوذ وب این ارزیابی را به‌صورت قانونی و کنترل‌شده انجام می‌دهد.

پرسش‌های متداول

آیا sqlmap نقاط تزریق را خودش پیدا می‌کند؟

نه به‌عنوان یک کاشف کامل. sqlmap برای تشخیص و بهره‌برداری از یک نقطه‌ی مشکوک‌شده ساخته شده است. جریان حرفه‌ای این است که نقطه را ابتدا با کار دستی در Burp پیدا کنید، سپس درخواست را با -r به sqlmap بدهید. حالت حدس زدن با -u پرسروصدا و ناکارآمد است.

آیا استفاده از sqlmap قانونی است؟

خود ابزار قانونی است، اما استفاده از آن فقط روی سامانه‌هایی که مالک آن‌ها هستید یا مجوز کتبی آزمون دارید مجاز است. اجرای آن علیه سامانه‌ی دیگران بدون اجازه تخلف است. در engagement حرفه‌ای، قرارداد امضاشده و scope مشخص پیش‌شرط قطعی است.

sqlmap در برابر WAF چطور عمل می‌کند؟

اسکریپت‌های --tamper برای دور زدن فیلتر طراحی شده‌اند، اما نتیجه‌شان در برابر WAFهای مدرن نامطمئن است. WAF هم به‌هرحال ریشه‌ی مشکل را رفع نمی‌کند؛ تنها راه‌حل قطعی تزریق SQL، کوئری پارامتری و جداسازی داده از دستور در کد است.

بهترین راه دفاع در برابر ابزارهایی مثل sqlmap چیست؟

حذف ریشه‌ی تزریق: استفاده از کوئری پارامتری (Prepared Statement)، اعتبارسنجی شناسه‌ها با فهرست سفید، و اجرای برنامه با یک حساب پایگاه‌داده‌ی کم‌امتیاز که دسترسی FILE و اجرای دستور ندارد. WAF فقط زمان می‌خرد، رفع نمی‌کند.

پیشگیری / رفع

نکات کلیدی و چارچوب مسئولانه‌ی استفاده:

  • فقط با مجوز کتبی. بدون قرارداد آزمون و scope مشخص، اجرا نکنید.
  • از -r با فایل درخواست ذخیره‌شده استفاده کنید، نه حدس زدن با -u؛ این هم دقیق‌تر است و هم نشست و هدرها را درست حفظ می‌کند.
  • ابتدا نقطه‌ی تزریق را دستی پیدا کنید؛ sqlmap ابزار عمق‌بخشی است، نه کشف.
  • --level و --risk را روی محیط عملیاتی محافظه‌کارانه نگه دارید؛ مقادیر بالا ترافیک عظیم و بالقوه مخرب تولید می‌کنند.
  • از --os-shell، --os-cmd و --os-pwn فقط در scope صریح و مستند استفاده کنید.
  • برای دفاع، به‌جای اجرای مکرر ابزار، ریشه را رفع کنید: کوئری پارامتری، اعتبارسنجی شناسه‌ها با فهرست سفید، و حساب DB با اصل کمترین امتیاز (بدون FILE، بدون xp_cmdshell).
  • نسخه‌ی ابزار و تاریخ اجرا را در گزارش ثبت کنید.

واژه‌های مرتبط

→ بازگشت به دانشنامه
PUT IT TO THE TEST

امنیت سامانه‌ی شما را
به مهاجمان واگذار نکنید

تیم پی‌هانتر با دیدِ یک مهاجم واقعی، این آسیب‌پذیری‌ها و ده‌ها مورد دیگر را روی دارایی‌های شما می‌سنجد.