Blind SQL Injection مبتنی بر زمان (Time-Based)
وقتی هیچ خطا و هیچ دادهای در پاسخ دیده نمیشود، اما میتوان با تاخیر عمدی، درستی یک شرط را تشخیص داد.
در Blind SQLi، پاسخ سرور هیچ تفاوت ظاهری ندارد؛ اما میتوان با دستوراتی مثل IF(condition, SLEEP(5), 0) (در MySQL) شرط دلخواه را تست کرد: اگر پاسخ ۵ ثانیه طول کشید، شرط درست بوده.
نحوهی استخراج داده
- با شرطهایی مثل
SUBSTRING(password,1,1)='a'حرفبهحرف رمز عبور (یا هر دادهی دیگر) استخراج میشود. - این کار دستی بسیار کند است؛ در عمل ابزارهایی مثل sqlmap این فرآیند را خودکار میکنند.
چرا مهم است
نبود خطای قابلمشاهده بهمعنای امن بودن نیست؛ تاخیر پاسخ هم یک کانال نشتی داده (side-channel) کامل است.
راهحل
Prepared Statements همچنان تنها راه ریشهای؛ محدودسازی زمان اجرای کوئری در سطح دیتابیس هم میتواند این تکنیک را کندتر (نه غیرممکن) کند.
تمرین عملی در آزمایشگاههای SQL Injection — Blind / Second-Order ›