تست برای آسیب پذیری تزریق SQL

حملات تزریق SQL خطرات فوق العاده ای را برای برنامه های وب به وجود می آورد که بر روی یک پایگاه داده پایگاه داده برای تولید محتوای پویا بستگی دارد. در این نوع حمله، هکرها یک برنامه وب را در تلاش برای تزریق دستورات SQL خود به موارد صادر شده توسط پایگاه داده دستکاری می کنند. برای مثال، مقاله SQL Injection Attacks را در پایگاه های داده مشاهده کنید. در این مقاله، ما به روش های مختلفی که می توانید برنامه های کاربردی وب خود را آزمایش کنید، تعیین کنید که آیا آنها به حملات تزریق SQL آسیب پذیر هستند.

اسکن سیستم تزریق SQL

یک امکان استفاده از یک اسکنر آسیب پذیر وب وب خودکار مانند HP WebInspect، AppScan IBM یا Hailstorm Cenzic است. این ابزارها همه راه های آسان و خودکار برای تجزیه و تحلیل برنامه های وب خود را برای آسیب پذیری بالقوه تزریق SQL ارائه می دهد. با این حال، آنها بسیار گران هستند، در حال اجرا تا 25000 $ در هر محل.

آزمون تزریق دستی SQL

توسعه دهنده برنامه ضعیف چیست؟ در واقع شما می توانید برخی از آزمون های اساسی را برای ارزیابی برنامه های وب خود برای آسیب پذیری SQL تزریق با استفاده از چیزی بیش از یک مرورگر وب اجرا کنید. اولا، یک کلمه احتیاط: تستهایی که من توصیف میکنم فقط به نقصهای پایه SQL Injection نگاه میکنم. آنها تکنیک های پیشرفته را شناسایی نمی کنند و برای استفاده از آنها تا حدودی خسته کننده هستند. اگر بتوانید آن را پرداخت کنید، با یک اسکنر خودکار بروید. با این حال، اگر شما نمیتوانید این برچسب قیمت را مدیریت کنید، آزمایش دستی یک قدم بزرگ است.

ساده ترین راه برای ارزیابی اینکه آیا یک برنامه آسیب پذیر است، آزمایش حملات تزریق بی خطر است که در صورتی که موفق شوند، پایگاه های داده خود را آسیب نخواهند گذاشت اما شما مدارک لازم برای حل مشکل را ارائه می دهید. به عنوان مثال، فرض کنید یک برنامه وب ساده داشته باشید که یک فرد را در پایگاه داده نگاه می کند و به عنوان یک نتیجه اطلاعات تماس را فراهم می کند. این صفحه ممکن است از قالب URL زیر استفاده کند:

http://myfakewebsite.com/directory.asp؟lastname=chapple&firstname=mike

ما می توانیم فرض کنیم که این صفحه جستجوی پایگاه داده را انجام می دهد، با استفاده از پرس و جو مشابه موارد زیر:

SELECT phone FROM دایرکتوری WHERE Lastname = 'chapple' و firstname = 'مایک'

بیایید کمی با این آزمایش کنیم. با فرض ما در بالا، ما می توانیم یک تغییر ساده را به URL که برای حملات تزریق SQL آزمایش می کند، ایجاد کنیم:

http://myfakewebsite.com/directory.asp؟lastname=chapple&firstname=mike'+AND+(select+count(*)+from+fake)+٪3e0+OR+'1'٪3d'1

اگر برنامه وب به درستی در مقابل تزریق SQL محافظت نشده باشد، به سادگی این نام جعلی را به عبارت SQL که علیه پایگاه داده اجرا می کند، به وجود می آورد:

SELECT phone FROM دایرکتوری WHERE Lastname = 'chapple' و firstname = 'مایک' و (تعداد را انتخاب کنید (*) از جعلی)> 0 OR '1' = '1'

متوجه خواهید شد که نحو در بالا کمی متفاوت از URL اصلی است. من آزادی تبدیل متغیر کدگذاری شده URL را برای معادلهای ASCII خود کردم تا پیروی از مثال ساده تر شود. برای مثال،٪ 3d کدگذاری URL برای شخصیت '=' است. من همچنین برخی از خطوط را برای اهداف مشابه اضافه کردم.

ارزیابی نتایج

تست زمانی اتفاق می افتد که سعی کنید صفحه وب را با نشانی اینترنتی ذکر شده در بالا بارگذاری کنید. اگر برنامه ی وب به خوبی رفتار شود، قبل از انتقال پرس و جو به پایگاه داده، از نقل قول های ورودی از ورودی خارج می شود. این به سادگی یک جستجوی عجیب و غریب برای کسی که نامی دارد که شامل یک دسته از SQL است! یک پیام خطا از برنامه مشابه یک زیر خواهید دید:

خطا: هیچ کاربری با نام مایک + AND + (انتخاب + تعداد (*) + از + جعلی) +٪ 3e0 + OR + 1٪ 3d1 Chapple!

از سوی دیگر، اگر برنامه به تزریق SQL آسیب پذیر باشد، این بیانیه را مستقیما به پایگاه داده منتقل می کند، که در نتیجه یکی از دو گزینه است. اول، اگر سرور شما پیام های خطای دقیق را فعال کرده باشد (که نباید آن را داشته باشید)، می بینید چیزی شبیه به این است:

مایکروسافت OLE DB Provider برای خطاهای رانندگان ODBC '80040e37' [مایکروسافت] [ODBC درایور SQL سرور] [SQL Server] نام شیء نامعتبر است 'جعلی'. /directory.asp خط 13

از طرف دیگر، اگر وب سرور شما پیغام های خطای جزئی را نمایش نمی دهد، یک خطای عمومی تر را دریافت خواهید کرد، مانند:

خطای سرور داخلی سرور با یک خطای داخلی یا تنظیمات اشتباه مواجه شد و قادر به تکمیل درخواست شما نبود. لطفا با مدیر سرور تماس بگیرید تا زمان وقوع خطا و هر چیزی که ممکن است انجام داده اید را مطلع کنید که ممکن است باعث خطا شود. اطلاعات بیشتر در مورد این خطا ممکن است در ورود به سیستم خطای سرور موجود باشد.

اگر یکی از دو خطا را در بالا دریافت کنید، برنامه شما به حمله تزریق SQL آسیب پذیر است! بعضی از مراحل که می توانید برای محافظت از برنامه های خود در برابر حملات SQL Injection محافظت کنید عبارتند از: