UNION-based SQL Injection برای استخراج داده از جدول دیگر
روش استفاده از عملگر UNION برای کشیدن داده از جدولهایی که در کوئری اصلی اصلاً حضور ندارند.
اگر خروجی یک کوئری آسیبپذیر مستقیماً در صفحه نمایش داده شود (مثل لیست محصولات)، میتوان با UNION SELECT ستونهایی از یک جدول دیگر (مثل جدول users) را به همان خروجی اضافه کرد.
گامهای عملی
- ابتدا با
ORDER BY Nتعداد دقیق ستونهای کوئری اصلی را پیدا کنید. - سپس
UNION SELECT NULL,NULL,...با همان تعداد ستون بفرستید تا نقطهی بازتاب هر ستون در صفحه مشخص شود. - در نهایت مقادیر واقعی (مثل
username,passwordاز جدول users) را بهجای NULLها قرار دهید.
نکتهی مهم
نوع دادهی هر ستون باید با نوع ستون اصلی سازگار باشد (مثلاً عدد بهجای NULL در ستونهای عددی)، وگرنه کوئری با خطا رد میشود.
راهحل
همان دفاع ریشهای Prepared Statements؛ علاوه بر آن، اصل حداقل دسترسی روی کاربر دیتابیس (بدون نیاز به خواندن جدولهای دیگر).