تزریق اس کیوال یا SQL Injection نوعی از حملات سایبری است که هکر با یک سری دستورات SQL، عملیاتی را در دیتابیس وب سایت آسیب پذیر انجام می دهد. در ادامه این مقاله شما را با مفهوم و انواع حمله های SQL Injection آشنا خواهیم کرد، همراه داتیس نتورک باشید.
SQL Injection چیست؟
تزریق اس کیوال نوعی از حملات سایبری است که هکر با یک سری دستورات SQL، عملیاتی را در دیتابیس وب سایت آسیب پذیر انجام می دهد.
تزریق به پایگاه داده یا دیتابیس نوعی از حملات وب است که در آن فرد حمله کننده یا هکر میتواند اقدام به اجرا کردن دستورات دلخواه و مخرب خود بر روی پایگاه داده وب سایت مورد هدف کند.
در این حمله، هکر با استفاده از دانش خود (یا تنها با استفاده از یک برنامه ساده!) میتواند از نقض های امنیتی موجود در کدهای نوشته شده توسط برنامه نویس سایت استفاده کرده و به اصطلاح آنها را اکسپلویت کند.
چون در این حمله هکر درواقع به کد اسکیوال، کد دلخواه خود را اضافه میکند، تزریق SQL نام گرفته است.
یک حمله موفق اس کیو ال اینجکشن میتواند به راحتی سبب افشای دادههای مهم در دیتابیس (ازجمله رمزهای عبور، اطلاعات فردی کاربران و …)، اضافه کردن دادههای دلخواه حمله کننده به دیتابیس یا حذف کردن دادههای خاص از دیتابیس گردد.
در واقع این حمله به علت اشتباهات و مشکل امنیتی در برنامه نویسی به وجود می آید .
برنامه های کاربری تحت وب که از بانک های اطلاعاتی و فرم ها استفاده میکنند مورد تهدید این حمله خواهند بود که میتواند موجب افشای داده های حساس موجود در دیتابیس مانند رمزهای عبور کاربران و … ،حذف اطلاعات و اضافه کردن داده های مختلف شود.
روش های نفوذ از طریق تزریق به دیتابیس
سه روش برای نفوذ از طریق sql injection وجود دارد :
- Union یا اجتماع : ساده ترین و معمول ترین روش در حملات تزریق به پایگاه داده است که در تمام پایگاه داده ها قابل اجرا میباشد ، اما با استفاده از فایروال می توان از این روش حمله جلوگیری کرد.
- Blind sql injection : این نوع حمله با وجود اینکه زمانبر است ولی برای هکرها بهترین نتیجه را خواهد داشت. زیرا که با فایروال هم قابل جلوگیری نبوده و همچنین بر روی تمام دیتابیس ها قابل پیاده سازی است . در این روش تمام کارها با true و false انجام شده و کاراکتر به کاراکتر دیتاها را بدست می آوریم .
- Error : در این روش هکر دستوراتی را اجرا میکند تا پایگاه داده یکسری ارور نمایش بدهد تا از همین ارورها بتواند اطلاعاتی را بدست آورد. با بستن نمایش ارور توسط وب سرور میتوان از این نوع حمله جلوگیری کرد.
چگونگی اجرای SQL injection در وب سایت
شیوه ی کار SQL injection یا تزریق دیتابیس به این صورت است که فرد مهاجم یا هکر در فرم های تعبیه شده بر روی وب سایت و در فیلدهایی که به جمع آوری اطلاعات کاربران می پردازد اقدام به ورود کدهای مخرب SQL می کند.
پس از ورود اطلاعات توسط کاربر در این فرم ها ، کدهای مخرب عمل می کنند و به جای اجرای SQL اصلی، کدهای مخربی که مهاجمین وارد کرده اند اجرا می شوند.
روش SQL injection به شیوه های مختلف بر روی سایت ها اجرا می شود و به نوع سرویس هاست و پایگاه داده ی تعبیه شده بر روی وب سایت بستگی دارد.
چرا که به طور عمده برخی از بانک های اطلاعاتی حساسیت هایی بر روی کاراکترهای خاص دارند که هکرها با شناسایی این مساله می توانند اقدام به تولید و ورود آنها به بخش های مختلف وب سایت کنند.
نحوه عملکرد SQL Injection
روش حمله بدین صورت است که هکر به عنوان یک بازدیدکننده سایت ، در فرمهای سایت در فیلدی که باید اطلاعات خود را وارد کند ، میتواند کوئری های مخرب خود را وارد و به دیتابیس ارسال کند.
بدین صورت به جای اجرا شدن کد اصلی sql ، کد وارد شده هکر اجرا خواهد شد.
پس زمانیکه این باگ در یک نرم افزار وجود داشته باشد ، هکر خواهد توانست دستورات خود را در پایگاه داده اجرا کند.
نوع اطلاعات ورودی در SQL Injection به نوع سرویس هاستینگ و دیتابیس بستگی دارد و هر دیتابیسی به یک سری کاراکترهای خاص حساس است.
به عنوان مثال:
Mysql در هاست لینوکس به کاراکتر ‘ و چند کاراکتر دیگر حساس است.
فرض کنید شما یک برنامه نویس سمت وب هستید و قصد دارید با دیتابیس از طریق دستورات SQL ارتباط برقرار کنید.
چون همانطور که میدانید استفاده از زبان SQL برای برقراری ارتباط با دیتابیس ضروری است.
کد زیر را فرض کنید که در زبان PHP نوشته شده است:
$sql_statement = "SELECT * FROM users WHERE name = '" . $_GET["name"] . "'";
دستور بالا مقدار فیلد یا همان پارامتر username که توسط متد GET، متدی که پارامترها در مسیر URL مشخص میشوند، از طرف کاربر به سرور ارسال شده را در بین دو علامت ‘ قرار میدهد (تا توسط سرور SQL به عنوان رشته حروفی شناخته شود) و پس از آن فرض کنید که مقدار موجود در متغیر $sql_statement قرار است اجرا شود.
فرض کنید که کاربر فیلد name را به صورت عادی مثل مقدار زیر پر کند.
مسیر از طریق متد GET به این شکل خواهد شد:
http://example.com/vul.php?name=Amin
در این صورت Query موجود در متغیر sql_statement به این صورت خواهد بود:
$sql_statement = "SELECT * FROM users WHERE name = 'Amin'";
و کوئری (حرف همزه به دلیل فونت سایت مانند ن نشان داده میشود) بدون مشکل اجرا خواهد شد.
در دیتابیس فیلد name با رشته Amin مقایسه خواهد شد و در جایی که نتیجه یافت شد، همه فیلدها (*) برای بقیه کدها در دسترس خواهد بود.
حال فرض کنید که کاربر (در اینجا، حمله کننده) فیلد name را به صورت زیر پر کند:
http://example.com/vul.php?name=' UNION UPDATE users SET email = 'hacker@example.com' WHERE name = 'admin'
حال این مقدار را جایگزین پارامتر username متد POST میکنیم. متغیر کوئری ما به این شکل خواهد بود:
$sql_statement = "SELECT * FROM users WHERE name = '' UNION UPDATE users SET email = 'hacker@example.com' WHERE name = 'admin'";
کوئری بالا هم اجرا خواهد شد ولی با این تفاوت که در واقع هکر کوئری دلخواه خود را اجرا کرده است!
در دیتابیس فیلد name با رشته خالی جستجو خواهد شد ولی چیزی پیدا نخواهد شد، تا اینجا برای هکر مهم نیست. اما هکر با استفاده از دستور UNION، کوئری دوم خود را نیز اجرا میکند و در کوئری دوم، ایمیل کاربر admin (که به احتمال زیاد تمامی دسترسیهای موجود را دارد) را به ایمیل دلخواه تغییر (UPDATE) میدهد.
امیدواریم مقاله آشنایی با مفهوم و انواع حملات تزریق اس کیوال مفید بوده باشد.
داتیس نتورک را در شبکه های اجتماعیدنبال کنید.