در تصویر زیر مجموعه ای از دستورات و فلگ های کاربردی Sqlmap در لینوکس را میتوانید ملاحظه فرمایید.

این ابزار از کاربردی ترین ابزارهای Sql Injection می باشد که یکی از مهلک ترین آسیب پذیری های وب سایتها می باشد.

SQL Injection به معنی تزریق کد SQL است که یک روش قدیمی برای حمله به سایت هایی است که از بانک های اطلاعاتی و فرم ها استفاده می کنند. روش این حمله به این صورت است که هکر در فرم های سایت، در فیلدی که باید اطلاعات خود را وارد کند، کد های مخرب SQL را وارد می کند و چون این کد ها در زمان اجرا تفسیر می شوند سیستم به جای اجرا کردن کد SQL اصلی، کد مورد نظر هکر را اجرا می کند.

ین آسیب‌پذیری از راه‌های گوناگونی پدید می‌آید. یک طریق فیلترنشدن کراکترهای (” و ‘) است. برای مثال:

statement = "SELECT * FROM users WHERE name = '" + userName + "';"

کار این کد استخراج اطلاعات یک نام کاربری (که به متغیر داده می‌شود) از جدول users است. اما نفوذگر می‌تواند با دادن مقدارهایی هوشمندانه به متغیر userName، سبب اجرای دستورهایی متفاوت از آنچه موردنظر کدنویس بوده‌است بشود. برای مثال با وارد کردن این کد به عنوان ورودی:

' OR 'a'='a

کد نهایی اینچنین رندر می‌شود:

SELECT * FROM users WHERE name = '' OR 'a'='a';

همچنین می‌توان با یکی از این سه روش، ادامهٔ کد را کامنت گرفت:[۲]

' OR 'a'='a' -- '
' OR 'a'='a' ({ '
' OR 'a'='a' /* '

که نتیجه چنین است:

SELECT * FROM users WHERE name = '' OR 'a'='a' -- ';

مثلاً ممکن است در کدی، ادامهٔ کد، مربوط به بررسی گذرواژه باشد. در آن حالت با این کار آن بخش از کد، کامنت گرفته می‌شود و پردازش نمی‌شود. به این ترتیب نفوذگر بدون واردکردن گذرواژه از مانع می‌گذرد.

یا مثلاً واردشدن چنین عبارتی:

a'; DROP TABLE users; SELECT * FROM userinfo WHERE 't' = 't

سبب حذف جدول users و نیز استخراج تمام اطلاعات جدول userinfo می‌شود.

این ورودی به صورت دستور SQL زیر رندر و مشخص می‌شود:

SELECT * FROM users WHERE name = 'a';DROP TABLE users; SELECT * FROM userinfo WHERE 't' = 't';

در حالی که بسیاری از پیاده‌سازی‌های SQL Server امکان اجرای چندین دستور را در یک فراخوان، مانند این مثال، فراهم می-کنند، برخی از رابط‌های برنامه کاربردی SQL مثل تابع؛ ()mysql_query در زبان PHP به دلایل امنیتی اجازه این عملیات را نمی‌دهند. این محدودیت باعث جلوگیری از تزریق Queryهای کاملاً مجزا از هم توسط مهاجمان می‌شود، اما نمی‌تواند مانع تغییر Queryها شود.

بهترین راه مقابله با حملات SQL Injection چک کردن ورودی ها قبل از ارسال آنها به پایگاه داده به عنوان یک Query است. میتوانید ورودی فرم ها را به کمک روشهای مختلف چک کنید که حاوی کارکترهای غیرمجاز نباشند.

sqlmap commands 1