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 در مرحلهی بهرهبرداری مینشیند، بعد از اینکه آزمونگر با کار دستی به یک نقطهی مشکوک رسیده است. جریان کار حرفهای این است:
- آزمونگر در Burp یک پارامتر را دستی آزمون میکند — مثلاً یک نقلقول تکی (
') خطای پایگاهداده یا رفتار غیرعادی تولید میکند. - همان درخواست کامل (با هدرها، کوکی نشست و بدنه) در یک فایل ذخیره میشود.
- 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 فقط زمان میخرد، رفع نمیکند.
