این نوع حمله که همانطور که از نامش پیداست از ساختار اسکریپت نویسی استفاده می کند ، به نرم افزارهای تحت وب از طریق اسکریپت نویسی حمله می کند. هدف اصلی این نوع حمله بدست آودن اطلاعات از کاربران و کلاینت هایی است که به سرور متصل می شود . اگر نرم افزار تحت وبی دارای مشکل باشد و هکر بتواند اسکریپت مخرب خود را در فرم های نرم افزار وارد کند.
کاربر یا کلاینت ها به محض متصل شدن به سرور آلوده کد مخرب مورد نظر هکر را از طریق مرورگر اجرا کرده و سیستم خود را آلوده می کنند ، مرورگرها توانایی تشخیص این را ندارند که اسکریپتی که بر روی کامپیوتر آنها اجرا می شود آلوده است یا خیر ؟ بعد از اینکه اسکریپت مخرب بر روی کامپیوتر هدف اجرا شد ، مرورگر کلاینت آلوده تابع دستوراتی خواهد بود که هکر صادر می کند بنابراین هر دستوری که هکر بخواهد را می تواند به مرورگر آلوده ارسال و اطلاعات مورد نیاز خود را دریافت کند.
?
مخفف کلمه Cross-Site Scripting بصورت CSS می باشد اما این مخفف به دلیل اینکه با ساختاری به نام CSS که در طراحی وب وجود دارد شباهت دارد به XSS تغییر داده شد. اکثر کدهایی که توسط هکر ها در نرم افزارهای تحت وب وارد می شود که در سمت کلاینت اجرا شود معمولا به زبان جاوا اسکریپت نوشته می شود.
و سپس به سرور تزریق یا Inject می شود. اگر کمی با ساختار طراحی صفحات وب پویا یا داینامیک آشنایی داشته باشید متوجه می شوید که درخواست ها در سرور اجرا می شوند و نتیجه به سمت کلاینت ارسال می شود . همیشه در هر جا نامی از Inject کردن شنیدید ، به این معناست که حمله از طریق وارد کردن اطلاعات به درون یک فیلد اطلاعاتی انجام می شود. XSS که به نام XSS Injection نیز معروف است نیز از این مورد استثناء نیست .
در این نوع حمله هکر به دنبال فیلد های ورود اطلاعاتی می گردد که در وب سایت مورد نظر قرار دارد و در صورت عدم رعایت موارد امنیتی مناسب در وب سرور می تواند به آن وب سایت حمله کند. بیشتر اطلاعاتی که از طریق XSS بدست می آید از طریق Cookie هایی است که کلاینت بر روی مرورگر خود بر جای می گذارد.
در صورتیکه برنامه نویس وب سایت شما در فیلد های ورودی اطلاعات خود اعتبارسنجی یا Validation را انجام ندهد ، آن وب سایت مستعد بروز حملات XSS خواهد بود. حملات XSS خود به دو دسته بندی تقسیم می شوند که به عنوان انعکاس و ذخیره شناخته می شوند ، در حملات از نوع انعاکاس هکر یک حفره امنیتی و راهی برای استفاده از آن پیدا می نماید تا کاربر ناشناس را به یک برنامه وب دارای آسیب پذیری XSS هدایت کند.
در این هنگام حمله انجام شده است. این حمله به وسیله یک سری از پارامترهای URL که با URL ارسال می شوند، انجام می شود. هکر URL مخرب را با پارامترهای موجود در URL برای کاربر ارسال می کند. این URL معمولا از طریق ایمیل، وبلاگ ها یا انجمن ها و یا هر روش ممکن دیگری برای کاربر فرستاده می شود.
?
شاید تصور شود که کاربر بر روی لینک های ناشناس کلیک نمی کند، بنابراین مشکلی برای او پیش نمی آید. اما باید توجه نمود که با استفاده از JavaScript حتی با بازنمودن یک ایمیل و حتی مشاهده یک سایت، حمله XSS انجام می شود. به علاوه در این نوع حمله معمولا URL ها با متدهایی مثل Hex و یا هر متد کدگذاری دیگری که URL ها را بصورت معتبر نمایش می دهد، کدگذاری می شوند.
در حملات از نوع ذخیره ، هکر کدهای مخربی را که یک کاربر در آینده آنها را فراخوانی می کند ذخیره می نماید. در واقع یک کاربر ندانسته به کدهای مخرب برخورد می نماید و کدهای مخرب اجرا می شوند. مسئله اینجاست که هنگام ذخیره سازی کدها و همچنین هنگام واکشی آنها اعتبارسنجی ورودی ها و خروجی ها انجام نشده است.
نکته حائز اهمیت این است که حتی درصورت اعتبارسنجی یا Validation کدها در هنگام ذخیره نمودن آنها، چک نمودن خروجی ها و اعتبار سنجی آنها نیز لازم است. چراکه به این ترتیب کدهای مخرب ناشناخته در طی فرایند اعتبار سنجی ورودی، کشف خواهند شد. یک کاربر معمولا از راه های مختلفی مورد حملات XSS قرار می گیرد که از آن جمله می توانیم به باز کردن یک صفحه وب سایت ، کلیک کردن بر روی یک لینک و همچنین حتی باز کردن یک ایمیل ساده اشاره کنیم.
همانطور که می دانید واژه SQL مخفف کلمه Structured Query Language می باشد که زبانی برای برقرار ارتباط با پایگاه های داده می باشد ، این زبان می تواند برای انجام پرسش و پاسخ یا Query گرفتن از پایگاه های داده ای مانند MSSQL یا MySQL یا Oracle یا هر پایگاه داده مشابهی مورد استفاده قرار بگیرد.
همانطور که قبلا هم اشاره کردیم هرگاه نامی از Injection یا تزریق به گوشمان خورد بلافاصله باید به این فکر بیوفتیم که می توانیم دستورات تعریف نشده ای را به سمت سرور مقصد ارسال و پاسخ دلخواه خود را بدست بیاوریم. ساختار کاری حملات SQL Injection به این صورت است که هرگاه فیلد ورود و خروج اطلاعاتی وجود داشته باشد که در پس زمینه آن یک پایگاه داده باشد .
می توانیم با وارد کردن دستورات غیرمعمول زبان SQL در این فیلد ها پاسخ هایی از سرور مورد نظر دریافت کنیم که حاوی اطلاعات حساس می باشند. در خصوص حملات SQL Injection در مقاله ای بصورت جداگانه و مفصل بحث خواهیم کرد و هدف در اینجا صرفا شناسایی این نوع حمله است.
یکی از فیلدهایی که در وب سایت ها بسیار مورد حملات SQL Injection قرار می گیرد ، فیلد Forgot Password یا فراموشی رمز عبور است. از این فیلد زمانی استفاده می شود که کاربر رمز عبور خود را فراموش کرده است و می خواهد با وارد کردن ایمیل خود ، رمز عبور را بازیابی کند تا بتواند مجددا وارد وب سایت بشود. فرض را بر این بگیرید که یک هکر در این فیلد یک ایمیل با قالب نادرست را وارد می کند .
پاسخی که از پایگاه داده یا سرور بازگردانده می شود ممکن است حاوی اطلاعاتی باشد که چگونگی اعتبارسنجی درخواست داده شده را بررسی می کند ، در این لحظه هکر فیلد ایمیل را با دستورات SQL ای که بر اساس داده های بدست آمده است پر می کند و برای سرور ارسال می کند ، سرور این دستورات را پردازش کرده و خروجی را اعلام می کند ، فرص کنید که دستور زیر در یک پایگاه داده دارای نقطه ضعف امنیتی وارد شده باشد :
SELECT fieldlist FROM table WHERE field = ‘whatever’ or ‘a’=‘a’
در این حالت و با وارد کردن دستور بالا توسط هکر ، کلیه ایمیل هایی که در پایگاه داده وجود دارد به نمایش در می آیند. برای انجام چنین حملاتی هکر می بایست دارای دانش فنی نسبتا خوبی در خصوص پایگاه های داده و به ویژه زبان SQL داشته باشد ، این نوع حمله از خطرناکترین نوع حملاتی است که امروزه به وب سایت ها و نرم افزارهای تحت وب انجام می شود. برای جلوگیری از انجام شدن چنین حملاتی نیز می توان از روش های اعتبارسنجی یا Input Validation در فرم ها استفاده کرد. در خصوص دستور بالا می توانید اطلاعاتی را در جدول زیر پیدا کنید هر چند این بحث بسیار فراتر از مبحث این مقاله می باشد.
whatever’ AND email IS NULL;- شناسایی فیلدهای مختلف موجود در دیتابیس whatever’ AND 1=(SELECT COUNT(*) FROM tabname);- شناسایی نام جدول های دیتابیس whatever’ OR full_name LIKE ‘%tosinso.com%’ پیدا کردن کاربرانی با مشخصات تعیین شده whatever’; DROP TABLE members;- تمامی اطلاعات موجود در جدول حذف می شوند
وب سرورها نیز مانند ساختار فایلی که در سیستم عامل وجود دارد دارای سلسله مراتب می باشند ، وب سرورها معمولا دسترسی به ریشه یا root دایرکتوری های خود را محدود می کنند ، کاربران در این حالت می توانند به دایرکتوری های زیر مجموعه دسترسی پیدا کنند اما نمی توانند به مرحله بالاتر که ریشه است دسترسی پیدا کنند ، همچنین نمی توانند بصورت موازی از پوشه های کنار دستی نیز استفاده کنند و صرفا به محلی ارجاع داده می شوند که به آن دسترسی دارند.
برخی اوقات به علل مختلف که بارزترین آنها سهل انگاری مدیر وب سرور است ، دسترسی های مناسب برای پوشه ریشه در نظر گرفته نمی شود و همین امر می تواند باعث شود مهاجم به دایرکتوری ریشه وب سرور دسترسی پیدا کند. Directory Traversal یا Path Traversal سوء استفاده از همین نقاط ضعفی است که در سطوح دسترسی یا عدم اعتبارسنجی داده های ورودی کاربر به ویژه نام فایل ها در وب سرور است که در نهاید می تواند باعث شود مهاجم با وارد کردن کاراکترهای مشخصی به Parent Directory یا پوشه بالاسری دسترسی پیدا کند.
هدف اینگونه حملات دسترسی پیدا کردن به فایل هایی است که نبایستی بصورت عمومی در دسترس قرار بگیرند ، در این حمله در نهایت هکر می تواند فایل های موجود در قسمت محدود شده یا Restricted را دستکاری کند و نتیجه لازم را بگیرد. حملات نوع Directory Traversal به حملات /.. یا dot dot slash ، Directory Climbing و Backtracking نیز معروف می باشند. برخی از انواع این نوع حملات به نام canonicalization attacks نیز معروف می باشند.
?
تزریق دستورات یا Command Injection که به Shell Injection و Code Injection نیز معروف است یکی دیگر از حملاتی است که می توان به وب سرورها و نرم افزارهای کاربردی تحت وب انجام داد. هدف اصلی Command Injection وارد کردن و اجرا کردن کدها و دستورات مد نظر مهاجم در نرم افزار دارای نقطه ضعف امنیتی است .
در چنین مواقعی نرم افزاری که کدها و دستورات وارد شده ناخواسته را اجرا می کند درکی از این ندارد که کد وارد شده مخرب است یا نیست و هر دستور ورودی از Shell را به عنوان یک دستور مجاز از طرف کاربر سیستم برداشت می کند. دستورات در محیطی وارد می شوند که سطح دسترسی برابر سطح دسترسی نرم افزار کاربردی دارد .
این نوع حمله در مواقعی که شما اعتبارسنجی ورود اطلاعات را در برنامه نویسی خود ندیده اید که در اصطلاح به آن Input Validation می گویند انجام می شود و می تواند از پارامترهایی مثل فرمهای ورود و خروج اطلاعات ، کوکی ها ، Http Header ها و غیره استفاده کند.در اصطلاح هک به دسترسی پیدا کردن به خط فرمان سیستم قربانی Shell گرفتن نیز می گویند.
?
در Command Injection مهاجم دستورات مورد نظر خود را در خط فرمان سیستم قربانی اجرا می کند ، اما در Code Injection مهاجم کدهای مد نظر خود را در نرم افزار کاربردی که وجود دارد قرار می دهد که به جای کد اصلی نرم افزار اجرا شود ، در این حالت بدون نیاز به اجرا دستور خاصی با اجرا شدن اصل نرم افزار کدهای مخرب مورد نظر هکر اجرا خواهند شد ، سطح دسترسی کدهای اجرایی در اینجا برابر سطح دسترسی نرم افزار کاربردی خواهد بود. اکثر کرم های اینترنتی از این حالت برای انتشار و اجرا شدن استفاده می کنند . آنها از نقاط ضعف سیستم عامل استفاده می کنند و خود را به نرم افزارهای مختلف می چسبانند