🔐 SQL Injection چیست؟
تزریق SQL (SQL Injection) یکی از رایجترین و خطرناکترین آسیبپذیریهای امنیتی است که زمانی رخ میدهد که ورودی کنترلنشدهٔ کاربر مستقیماً داخل یک کوئری SQL قرار بگیرد.
در این حالت، مهاجم میتواند منطق کوئری را تغییر دهد و به دادهها دسترسی غیرمجاز پیدا کند، آنها را تغییر دهد یا حتی حذف کند.
در سناریوهای شدیدتر، SQLi میتواند به اجرای دستورات در سطح سیستمعامل سرور منجر شود.
🧨 انواع SQL Injection
1. Classic / Error‑Based SQLi
استفاده از پیامهای خطای SQL که با جزئیات نمایش داده میشوند برای استخراج ساختار دیتابیس (جداول، ستونها و …).
2. Blind SQLi
هیچ خروجی یا خطای مستقیمی وجود ندارد؛ مهاجم نتیجهٔ کوئری را از طریق رفتار برنامه (True / False) استنتاج میکند.
3. Time‑Based Blind SQLi
مبتنی بر ایجاد تأخیر زمانی (مثل SLEEP() یا WAITFOR) برای تشخیص درست یا نادرست بودن شرطها.
4. Out‑of‑Band SQLi
استفاده از کانالهای ارتباطی جانبی مثل DNS یا HTTP Callback برای دریافت داده؛ زمانی کاربرد دارد که نه خروجی وجود دارد و نه تفاوت زمانی قابل تشخیص.
5. Second‑Order SQLi
ورودی مخرب ابتدا در دیتابیس ذخیره میشود و در مرحلهای دیگر (مثلاً هنگام پردازش بعدی) باعث اجرای تزریق SQL میگردد.
📍 SQL Injection کجا اتفاق میافتد؟
ا SQLi میتواند در هر نقطهای رخ دهد که اپلیکیشن بر اساس ورودی کاربر به دیتابیس کوئری میزند، از جمله:
💠فرمهای لاگین
💠 فیلدهای جستجو
💠فیلترها (دستهبندی، تاریخ و …)
💠پارامترهای GET و POST
💠فیلدهای مخفی (Hidden Fields)
💠هدرهای HTTP (User‑Agent، Referer و …)
💠کوکیها
🕵️ شناسایی SQL Injection
تستهای ساده اولیه:
' OR '1'='1
' OR 1=1 --
تستهای پیشرفتهتر (Time‑Based):
' AND SLEEP(5) --
' AND (SELECT 1 FROM dual WHERE SLEEP(5)) --
تستهای منطقی (Boolean‑Based):
' AND 1=1 -- → رفتار عادی
' AND 1=2 -- → رفتار متفاوت
در سناریوهای Blind باید به این نشانهها توجه کرد:
💠 تأخیر زمانی
💠 تفاوت در محتوای صفحه
💠 تغییر HTTP Status Code
💠 تغییر الگوی درخواستهای شبکه
🗄 شناسایی نوع پایگاه داده (Database Engine)
تشخیص دیتابیس بکاند برای طراحی Payload دقیقتر حیاتی است:
MySQL
SELECT version();
SLEEP(5)
PostgreSQL
SELECT current_database();
pg_sleep(5)
MSSQL
SELECT @@version;
WAITFOR DELAY '00:00:05'
Oracle
SELECT banner FROM v$version;
DBMS_LOCK.SLEEP(5)
🔍 شما تا حالا با کدام نوع SQL Injection در پروژه یا تست نفوذ واقعی برخورد داشتهاید؟ تجربتون را در کامنتها به اشتراک بگذارید.
#باگ_بانتی
🆔 @TryHackBox
🆔 @TryHackBoxOfficial
🆔 @TryHackBoxStory
🆔 @RadioZeroPod