سلام دوستان عزیزم
آسیب پذیری قدیمی sql injection تا به امروز باعث حمله و نفوذ به وبسایت های متعددی شده است و میتوان به جراعت گفت یکی پر خطر ترین آسیب پذیری های وب تاکنون بوده است در این تاپیک تصمیم گرفتن ضمن معرفی کامل این آسیب پذیری به انوع حملات آن بپردازم و روش های بای پس مختلف را قرار دهم ، پیدا کردن آسیب پذیری برای یک نفوذگر پایان کار نیست بلکه نحوه استفاده و اسخراج داده به واسطه آن آسیب پذیری نکته مهم استفاده از این آسیب پذیری هست برنامه نویسان میتوانند از داده های قرار گرفته برای بالا بردن امنیت نرم افزار های تحت وب خود استفاده نمایند .
بر اساس تجربه شخصی تاکنون 70 % تارگت هایی که برای امنیت نرم افزار های تحت وب خود به پیش ما مراجعه کردند توسط این آسیب پذیری مورد حمله قرار گرفتند وقتی ui طراحی شده و یا اهمیت وبسایت هدف را مشاهده میکنیم حداقل انتظاری که از نرم افزار تحت وب مورد استفاده انتظار میرود رفع آسیب پذیری های حساس مثل همین SQL میباشد ...
با ما همراه باشید :
تزریق SQL: آسیب پذیری ها و پیشگیری از تزریق SQL
حملات تزریق SQL ، حملات SQLi نیز نامیده می شوند ، نوعی آسیب پذیری در کد وب سایت ها و برنامه های وب است که به مهاجمین اجازه می دهد تا فرایندهای back-end را ربوده و به اطلاعات محرمانه پایگاه های اطلاعاتی شما دسترسی پیدا کنند و یا آنها را استخراج و حذف کنند.
اگرچه حملات SQLi می تواند آسیب زننده باشد ، اما اگر بدانید چطور آنها را در برنامه نویسی فیلتر کنید ، به راحتی میتوان از آنها جلوگیری کرد. در این پست ، اصول یافتن و خنثی سازی این آسیب پذیری ها را در کد برنامه شما آموزش خواهیم داد.
حمله SQL Injection چیست؟
SQL یا Structured Query Language ، زبان استاندارد برای تعامل با پایگاه های ارتباطی است. در برنامه ها و انواع دیگر برنامه نویسی ، از پایگاه داده برای ذخیره داده های کاربر مانند نام کاربری و رمزهای عبور استفاده می شود. پایگاه های داده همچنین اغلب موثرترین و امن ترین راه حل برای ذخیره انواع دیگر داده ها از پست ها و نظرات وبلاگ عمومی به شماره های حساب بانکی محرمانه هستند.
عبارات SQL اغلب از آرگومان ها برای انتقال داده ها از کاربران به یک پایگاه داده ایمن یا بالعکس استفاده می کنند. تا زمانی که مقادیر موجود در این آرگومانهای SQL توسط کاربر با استفاده از دستورات فیلتر کننده یا آسیب پذیر ایمن نشود ، مهاجمان می توانند از مکانهایی که برنامه شما با یک پایگاه داده با استدلال SQL ارتباط برقرار می کند برای دسترسی به اطلاعات محرمانه و سایر مناطق امن استفاده کنند.
مهاجمان با حمله SQL Injection چه کاری می توانند انجام دهند؟
حملات SQLi از نقاط ضعف کد در نقطه دسترسی به پایگاه داده استفاده می کند. با ربودن این کد ، مهاجمان می توانند به داده های ایمن دسترسی ، اصلاح و حتی حذف کنند.
وقتی حملات SQLi موفقیت آمیز باشد ، مهاجمان می توانند:
بدون رمز ورود به یک برنامه یا جلوی وب سایت وارد شوید.
دسترسی ، استخراج و حذف داده های ذخیره شده از پایگاه های داده ایمن.
سوابق پایگاه داده خود را ایجاد کرده و یا سوابق موجود را اصلاح کرده و در را برای حملات بعدی باز کنید.
آناتومی حمله تزریق SQL
در مرحله شناسایی ، که مستلزم تحقیق برای شناسایی و انتخاب اهداف است ، مهاجمان به دنبال مکان هایی در برنامه شما می گردند که بتوانند مقادیر غیر منتظره را به عبارات SQL منتقل کنند. سرکوب پیام های خطا به سادگی کافی نیست ؛ روش های متداول برای کشف آسیب پذیری های SQL شامل افزودن نقل قول ها ' و علامت های ویرگول ; به داده های ورودی کاربر و جستجوی پیام های خطایی است که اطلاعات مربوط به ساختار پایگاه داده و طرح های نامگذاری را برمی گرداند.
اینگونه نیست که شما همیشه در مقابل یک شخص قرار می گیرید که باید به آن احتیاط کنید. حملات تزریق SQL به راحتی خودکار می شوند ، این بدان معناست که شما هم در نیروی مغز و هم در ابزار اسکن به بهترین دفاع نیاز دارید. هنگامی که آسیب پذیری ها را در برنامه شما پیدا کردند ، مهاجمان عبارات SQL خود را ایجاد می کنند و از آنها برای دستکاری رفتار برنامه شما استفاده می کنند. اگر حمله آنها موفقیت آمیز باشد ، مهاجمان می توانند به داده های محرمانه ، عملکردهای اداری یا سایر مناطق امن برنامه شما دسترسی پیدا کنند.
مطالعات موردی و پیامدها
حملات SQLi به دلیل سادگی آنها معمول است. آنها می توانند پیامدهای ویرانگری برای شما و کاربران شما به همراه داشته باشند.
در سال 2016 ، افشاگر ناشناس 11.5 میلیون اسناد محرمانه از موساك فونسكا ، یك شركت حقوقی پاناما درز كرد. مهاجمان قادر به سو statements استفاده از عبارات SQL در سیستم مدیریت محتوای شرکت و دیگر معماری شبکه ناامن برای دسترسی به بانک اطلاعاتی شرکت و بارگیری پرونده های محرمانه بودند. انتشار این اسناد نه تنها شرم آور بود ، بلکه پیامدهای حقوقی قابل توجهی نیز برای مشتریان به همراه داشت.
در سال 2009 ، اتباع روسیه و ایالات متحده از حملات SQLi برای دسترسی به 160 میلیون شماره کارت اعتباری از Heartland Payment Systems استفاده کردند که در آن زمان بزرگترین تخلف در اطلاعات مالی بود. مهاجمان شماره کارتهای دزدیده شده را در بازار سیاه فروختند و سایر مجرمان به سرعت اسکناس های صدها میلیون دلاری را تحویل گرفتند و به شرکتها و افراد آسیب رساندند.
حتی MySQL ، ارائه دهنده محبوب SQL ، در سال 2011 از حمله SQLi به وب سایت خود رنج برد که صدها نام کاربری و هش رمز عبور را منتشر کرد. این واقعیت که یک ارائه دهنده SQL می تواند قربانی حملات SQLi شود ، نشان می دهد که هیچ کس در برابر آن ایمنی ندارد و مهاجمان تمام تلاش خود را برای استفاده از کد ناامن انجام خواهند داد.
در سال 2021 وبسایت فیس بوک مورد حمله Sqli قرار گرفت که منجر به استخراج اطلاعات کاربری بیش از میلیونها کاربر شد این وبسایت هر چند از سیاست های امنیتی قدرتمندی استفاده میکرد اما در نهایت نفوذگر توانست بانک داده را استخراج کند و در در نهایت پابلیک کند .
وبسایتها مورد حمله Sql قرار میگرند و فیلتر های امنیتی نیز بای پس میشوند این بسته به نوع تخصص و حمله نفوذگر دارد تا به اینجا باید بدانید هیچ وبسایتی از این خطر ایمن نیست ...
جلوگیری از حملات تزریق SQL
علیرغم خطرات قابل توجه حملات SQLi ، جلوگیری از آنها آسان است هنگامی که برخی از بهترین روشهای کدگذاری ایمن را که شامل روشهای اساسی است ، یاد بگیرید:
آسیب پذیری ها را کشف کنید
آسیب پذیری ها را ترمیم کنید
آسیب پذیری ها را برطرف کنید
کاهش تأثیر
تست کلید کشف آسیب پذیری در کد شما است. ابزارهای قوی مانند تجزیه و تحلیل پویا (DAST) را که از خارج به برنامه مانند مهاجم نگاه می کند و ابزارهای تجزیه و تحلیل ایستا (SAST) را که به دنبال آسیب پذیری در سطح کد هستند ، انتخاب کنید. به دنبال مناطقی باشید که برنامه شما به یک پایگاه داده متصل است (مناطق استرینگی که ارتباط با خانه های دیتابیس را برقرار میکنند همانند قسمت عددی انتهای لینک ها و یا ورودی های قابل بررسی توسط دیتابیس ) و سعی کنید مقادیر غیرمعمول را به آن منتقل کنید. به عنوان مثال ، اگر مقداری را وارد کنید که شامل یک ' باشد ، آیا برنامه شما با آن شخصیت به عنوان داده کاربر رفتار می کند یا با آن به عنوان کد رفتار می کند؟ اگر یک تست توتولوژی (مانند OR 1 = 1 ) را در ورودی خود بگنجانید ، آیا می توانید مانند اینکه رمز ورود معتبری وارد کرده اید ، دسترسی پیدا کنید؟
هنگامی که آسیب پذیری ها را کشف کردید ، نوبت به اصلاح آنها می رسد. بهترین راه برای انجام این کار استفاده از پارامترها در هر زمان نیاز به ایجاد درخواست SQL به یک پایگاه داده ، وارد کردن مقادیر متغیرهایی در دستورات خود و سپس انتقال مقادیر ورودی کاربر به عبارات در زمان اجرا است. اگر زبان برنامه نویسی شما از پارامترها پشتیبانی نمی کند ، می توانید قبل از انتقال آن به پایگاه داده ، با پاک سازی یا فرار از ورودی ، کد خود را اصلاح کنید. این به برنامه شما این امکان را می دهد که ورودی کاربر به جای کدی که باید اجرا کند ، داده است.
کاهش نیز یک فرایند مهم برای کمک به کاهش خطر است ، اما بدون پرداختن به نقص اساسی. به عنوان مثال ، به جای اینکه به کد برنامه خود بپردازید ، ممکن است با بررسی حساب های پایگاه داده مورد استفاده برنامه و اطمینان از کمترین میزان امتیاز لازم برای خواندن یا درج داده ها در پایگاه داده ، نقصی را کاهش دهید.
توسعه دهندگان هوشمند ، توسعه امن
حملات SQLi می تواند عواقب شدیدی را به دنبال داشته باشد ، چنانچه عوامل تهدید کنترل شوند ، از پایین آمدن برنامه یا وب سایت شما تا درز اطلاعات محرمانه مشتریان.
خوشبختانه در برابر حملات SQLi به راحتی محافظت می شود. شما باید به دنبال آسیب پذیری هایی باشید که در آن مهاجمین ممکن است کد SQL خود را تزریق کنند و سپس با استفاده از دستورات آماده شده ، ORMS و سایر استراتژی ها ، این آسیب پذیری ها را ترمیم کنند. اگر عبارات آماده در دسترس نباشند ، می توانید آسیب پذیری ها را با پاک کردن یا فرار از ورودی کاربر قبل از انتقال آن به یک پایگاه داده در یک درخواست SQL ، اصلاح کنید. سرانجام ، تصویب امتیازات دسترسی به پایگاه داده هوشمند می تواند تعداد و شدت حملات SQLi را قبل از اینکه برنامه شما به اجرای نمایش داده شود ، کاهش دهد.
توسعه برنامه به معنی تفکر در مورد آسیب پذیری ها و بهترین اقدامات امنیتی در هر مرحله از مراحل است.
ادامه دارد ...
آسیب پذیری قدیمی sql injection تا به امروز باعث حمله و نفوذ به وبسایت های متعددی شده است و میتوان به جراعت گفت یکی پر خطر ترین آسیب پذیری های وب تاکنون بوده است در این تاپیک تصمیم گرفتن ضمن معرفی کامل این آسیب پذیری به انوع حملات آن بپردازم و روش های بای پس مختلف را قرار دهم ، پیدا کردن آسیب پذیری برای یک نفوذگر پایان کار نیست بلکه نحوه استفاده و اسخراج داده به واسطه آن آسیب پذیری نکته مهم استفاده از این آسیب پذیری هست برنامه نویسان میتوانند از داده های قرار گرفته برای بالا بردن امنیت نرم افزار های تحت وب خود استفاده نمایند .
بر اساس تجربه شخصی تاکنون 70 % تارگت هایی که برای امنیت نرم افزار های تحت وب خود به پیش ما مراجعه کردند توسط این آسیب پذیری مورد حمله قرار گرفتند وقتی ui طراحی شده و یا اهمیت وبسایت هدف را مشاهده میکنیم حداقل انتظاری که از نرم افزار تحت وب مورد استفاده انتظار میرود رفع آسیب پذیری های حساس مثل همین SQL میباشد ...
با ما همراه باشید :
تزریق SQL: آسیب پذیری ها و پیشگیری از تزریق SQL
حملات تزریق SQL ، حملات SQLi نیز نامیده می شوند ، نوعی آسیب پذیری در کد وب سایت ها و برنامه های وب است که به مهاجمین اجازه می دهد تا فرایندهای back-end را ربوده و به اطلاعات محرمانه پایگاه های اطلاعاتی شما دسترسی پیدا کنند و یا آنها را استخراج و حذف کنند.
اگرچه حملات SQLi می تواند آسیب زننده باشد ، اما اگر بدانید چطور آنها را در برنامه نویسی فیلتر کنید ، به راحتی میتوان از آنها جلوگیری کرد. در این پست ، اصول یافتن و خنثی سازی این آسیب پذیری ها را در کد برنامه شما آموزش خواهیم داد.
حمله SQL Injection چیست؟
SQL یا Structured Query Language ، زبان استاندارد برای تعامل با پایگاه های ارتباطی است. در برنامه ها و انواع دیگر برنامه نویسی ، از پایگاه داده برای ذخیره داده های کاربر مانند نام کاربری و رمزهای عبور استفاده می شود. پایگاه های داده همچنین اغلب موثرترین و امن ترین راه حل برای ذخیره انواع دیگر داده ها از پست ها و نظرات وبلاگ عمومی به شماره های حساب بانکی محرمانه هستند.
عبارات SQL اغلب از آرگومان ها برای انتقال داده ها از کاربران به یک پایگاه داده ایمن یا بالعکس استفاده می کنند. تا زمانی که مقادیر موجود در این آرگومانهای SQL توسط کاربر با استفاده از دستورات فیلتر کننده یا آسیب پذیر ایمن نشود ، مهاجمان می توانند از مکانهایی که برنامه شما با یک پایگاه داده با استدلال SQL ارتباط برقرار می کند برای دسترسی به اطلاعات محرمانه و سایر مناطق امن استفاده کنند.
مهاجمان با حمله SQL Injection چه کاری می توانند انجام دهند؟
حملات SQLi از نقاط ضعف کد در نقطه دسترسی به پایگاه داده استفاده می کند. با ربودن این کد ، مهاجمان می توانند به داده های ایمن دسترسی ، اصلاح و حتی حذف کنند.
وقتی حملات SQLi موفقیت آمیز باشد ، مهاجمان می توانند:
بدون رمز ورود به یک برنامه یا جلوی وب سایت وارد شوید.
دسترسی ، استخراج و حذف داده های ذخیره شده از پایگاه های داده ایمن.
سوابق پایگاه داده خود را ایجاد کرده و یا سوابق موجود را اصلاح کرده و در را برای حملات بعدی باز کنید.
آناتومی حمله تزریق SQL
در مرحله شناسایی ، که مستلزم تحقیق برای شناسایی و انتخاب اهداف است ، مهاجمان به دنبال مکان هایی در برنامه شما می گردند که بتوانند مقادیر غیر منتظره را به عبارات SQL منتقل کنند. سرکوب پیام های خطا به سادگی کافی نیست ؛ روش های متداول برای کشف آسیب پذیری های SQL شامل افزودن نقل قول ها ' و علامت های ویرگول ; به داده های ورودی کاربر و جستجوی پیام های خطایی است که اطلاعات مربوط به ساختار پایگاه داده و طرح های نامگذاری را برمی گرداند.
اینگونه نیست که شما همیشه در مقابل یک شخص قرار می گیرید که باید به آن احتیاط کنید. حملات تزریق SQL به راحتی خودکار می شوند ، این بدان معناست که شما هم در نیروی مغز و هم در ابزار اسکن به بهترین دفاع نیاز دارید. هنگامی که آسیب پذیری ها را در برنامه شما پیدا کردند ، مهاجمان عبارات SQL خود را ایجاد می کنند و از آنها برای دستکاری رفتار برنامه شما استفاده می کنند. اگر حمله آنها موفقیت آمیز باشد ، مهاجمان می توانند به داده های محرمانه ، عملکردهای اداری یا سایر مناطق امن برنامه شما دسترسی پیدا کنند.
مطالعات موردی و پیامدها
حملات SQLi به دلیل سادگی آنها معمول است. آنها می توانند پیامدهای ویرانگری برای شما و کاربران شما به همراه داشته باشند.
در سال 2016 ، افشاگر ناشناس 11.5 میلیون اسناد محرمانه از موساك فونسكا ، یك شركت حقوقی پاناما درز كرد. مهاجمان قادر به سو statements استفاده از عبارات SQL در سیستم مدیریت محتوای شرکت و دیگر معماری شبکه ناامن برای دسترسی به بانک اطلاعاتی شرکت و بارگیری پرونده های محرمانه بودند. انتشار این اسناد نه تنها شرم آور بود ، بلکه پیامدهای حقوقی قابل توجهی نیز برای مشتریان به همراه داشت.
در سال 2009 ، اتباع روسیه و ایالات متحده از حملات SQLi برای دسترسی به 160 میلیون شماره کارت اعتباری از Heartland Payment Systems استفاده کردند که در آن زمان بزرگترین تخلف در اطلاعات مالی بود. مهاجمان شماره کارتهای دزدیده شده را در بازار سیاه فروختند و سایر مجرمان به سرعت اسکناس های صدها میلیون دلاری را تحویل گرفتند و به شرکتها و افراد آسیب رساندند.
حتی MySQL ، ارائه دهنده محبوب SQL ، در سال 2011 از حمله SQLi به وب سایت خود رنج برد که صدها نام کاربری و هش رمز عبور را منتشر کرد. این واقعیت که یک ارائه دهنده SQL می تواند قربانی حملات SQLi شود ، نشان می دهد که هیچ کس در برابر آن ایمنی ندارد و مهاجمان تمام تلاش خود را برای استفاده از کد ناامن انجام خواهند داد.
در سال 2021 وبسایت فیس بوک مورد حمله Sqli قرار گرفت که منجر به استخراج اطلاعات کاربری بیش از میلیونها کاربر شد این وبسایت هر چند از سیاست های امنیتی قدرتمندی استفاده میکرد اما در نهایت نفوذگر توانست بانک داده را استخراج کند و در در نهایت پابلیک کند .
وبسایتها مورد حمله Sql قرار میگرند و فیلتر های امنیتی نیز بای پس میشوند این بسته به نوع تخصص و حمله نفوذگر دارد تا به اینجا باید بدانید هیچ وبسایتی از این خطر ایمن نیست ...
جلوگیری از حملات تزریق SQL
علیرغم خطرات قابل توجه حملات SQLi ، جلوگیری از آنها آسان است هنگامی که برخی از بهترین روشهای کدگذاری ایمن را که شامل روشهای اساسی است ، یاد بگیرید:
آسیب پذیری ها را کشف کنید
آسیب پذیری ها را ترمیم کنید
آسیب پذیری ها را برطرف کنید
کاهش تأثیر
تست کلید کشف آسیب پذیری در کد شما است. ابزارهای قوی مانند تجزیه و تحلیل پویا (DAST) را که از خارج به برنامه مانند مهاجم نگاه می کند و ابزارهای تجزیه و تحلیل ایستا (SAST) را که به دنبال آسیب پذیری در سطح کد هستند ، انتخاب کنید. به دنبال مناطقی باشید که برنامه شما به یک پایگاه داده متصل است (مناطق استرینگی که ارتباط با خانه های دیتابیس را برقرار میکنند همانند قسمت عددی انتهای لینک ها و یا ورودی های قابل بررسی توسط دیتابیس ) و سعی کنید مقادیر غیرمعمول را به آن منتقل کنید. به عنوان مثال ، اگر مقداری را وارد کنید که شامل یک ' باشد ، آیا برنامه شما با آن شخصیت به عنوان داده کاربر رفتار می کند یا با آن به عنوان کد رفتار می کند؟ اگر یک تست توتولوژی (مانند OR 1 = 1 ) را در ورودی خود بگنجانید ، آیا می توانید مانند اینکه رمز ورود معتبری وارد کرده اید ، دسترسی پیدا کنید؟
هنگامی که آسیب پذیری ها را کشف کردید ، نوبت به اصلاح آنها می رسد. بهترین راه برای انجام این کار استفاده از پارامترها در هر زمان نیاز به ایجاد درخواست SQL به یک پایگاه داده ، وارد کردن مقادیر متغیرهایی در دستورات خود و سپس انتقال مقادیر ورودی کاربر به عبارات در زمان اجرا است. اگر زبان برنامه نویسی شما از پارامترها پشتیبانی نمی کند ، می توانید قبل از انتقال آن به پایگاه داده ، با پاک سازی یا فرار از ورودی ، کد خود را اصلاح کنید. این به برنامه شما این امکان را می دهد که ورودی کاربر به جای کدی که باید اجرا کند ، داده است.
کاهش نیز یک فرایند مهم برای کمک به کاهش خطر است ، اما بدون پرداختن به نقص اساسی. به عنوان مثال ، به جای اینکه به کد برنامه خود بپردازید ، ممکن است با بررسی حساب های پایگاه داده مورد استفاده برنامه و اطمینان از کمترین میزان امتیاز لازم برای خواندن یا درج داده ها در پایگاه داده ، نقصی را کاهش دهید.
توسعه دهندگان هوشمند ، توسعه امن
حملات SQLi می تواند عواقب شدیدی را به دنبال داشته باشد ، چنانچه عوامل تهدید کنترل شوند ، از پایین آمدن برنامه یا وب سایت شما تا درز اطلاعات محرمانه مشتریان.
خوشبختانه در برابر حملات SQLi به راحتی محافظت می شود. شما باید به دنبال آسیب پذیری هایی باشید که در آن مهاجمین ممکن است کد SQL خود را تزریق کنند و سپس با استفاده از دستورات آماده شده ، ORMS و سایر استراتژی ها ، این آسیب پذیری ها را ترمیم کنند. اگر عبارات آماده در دسترس نباشند ، می توانید آسیب پذیری ها را با پاک کردن یا فرار از ورودی کاربر قبل از انتقال آن به یک پایگاه داده در یک درخواست SQL ، اصلاح کنید. سرانجام ، تصویب امتیازات دسترسی به پایگاه داده هوشمند می تواند تعداد و شدت حملات SQLi را قبل از اینکه برنامه شما به اجرای نمایش داده شود ، کاهش دهد.
توسعه برنامه به معنی تفکر در مورد آسیب پذیری ها و بهترین اقدامات امنیتی در هر مرحله از مراحل است.
ادامه دارد ...
نظر