شرح آسیب پذیری XSS


به این مطلب امتیاز دهید

در این بخش، توضیح خواهیم داد که XSS چیست، انواع مختلف آسیب پذیری های XSS را شرح می دهیم، و نحوه یافتن و جلوگیری از XSS را توضیح می دهیم.

آسیب پذیری cross-site scripting (همچنین به عنوان XSS شناخته می شود) یک آسیب پذیری امنیتی وب است که به هکر اجازه می دهد تا تعاملات کاربران با یک برنامه آسیب پذیر را به خطر می اندازد.  آسیب‌پذیری‌های XSS معمولاً به هکر این امکان را می‌دهند تا خود را به عنوان یک کاربر قربانی جا بزند، هر اقدامی را که کاربر قادر به انجام آن است انجام دهد و به هر یک از داده‌های کاربر دسترسی پیدا کند. اگر قربانی دسترسی بالایی به داخل برنامه داشته باشد، ممکن است هکر بتواند کنترل کاملی بر تمام عملکردها و داده های برنامه داشته باشد.

آسیب پذیری XSS با دستکاری یک وب سایت کد های جاوا اسکریپت مخرب را به کاربران بازگرداند. هنگامی که کد مخرب در داخل مرورگر قربانی اجرا می شود، هکر می تواند به طور کامل تعامل آنها با برنامه را به خطر بیندازد.

شما می توانید انواع آسیب پذیری XSS را با تزریق کدی که باعث می شود مرورگر شما جاوا اسکریپت دلخواه را اجرا کند، تایید کنید. استفاده از تابع ()alert برای این منظور از دیرباز متداول بوده است، زیرا کوتاه، بی ضرر است و هنگام فراخوانی موفقیت آمیز به سختی نمی توان آن را از دست داد. در واقع، شما اکثر آزمایشگاه های XSS ما را با فراخوانی alert() در مرورگر قربانی شبیه سازی شده حل می کنید.

متاسفانه، اگر از Chrome استفاده می کنید، مشکلی جزئی وجود دارد. از نسخه 92 به بعد (20 ژوئیه 2021)، iframe های مختلف از فراخوانی alert() جلوگیری می کنند. از آنجایی که از آنها برای ساختن برخی از حملات پیشرفته‌تر XSS استفاده می‌شود، گاهی اوقات باید متفاوت اکسپلویت خود را بنویسید. در این سناریو، ما تابع print() را توصیه می کنیم.

سه نوع اصلی از حملات XSS وجود دارد. 

  •  Reflected XSS، جایی که اسکریپت مخرب از درخواست فعلی HTTP می آید. 
  •  Stored XSS ، جایی که اسکریپت مخرب از پایگاه داده وب سایت می آید. 
  •  DOM XSS ، که در آن آسیب‌پذیری در کد سمت کلاینت به جای کد سمت سرور وجود دارد.

باگ Reflected XSS ساده ترین نوع XSS است. زمانی ایجاد می‌شود که یک برنامه داده‌ها را در یک درخواست HTTP دریافت می‌کند و آن داده‌ها را در پاسخ به روشی ناامن نمایش میدهد. در اینجا یک مثال ساده از آسیب پذیری  Reflect XSS  شده است:

https://insecure-website.com/status?message=All+is+well.

<p>Status: All is well.</p>

برنامه هیچ پروتکل دیگری از داده ها را انجام نمی دهد، بنابراین یک هکر می تواند به راحتی حمله ای مانند زیر بسازد:

https://insecure-website.com/status?message=<script>/*+Bad+stuff+here…+*/</script>

<p>Status: <script>/* Bad stuff here… */</script></p>

اگر کاربر از URL ساخته شده توسط هکر بازدید کند، اسکریپت هکر در مرورگر کاربر، در کنسول آن کاربر اجرا می شود. در آن مرحله، اسکریپت می تواند هر عملی را انجام دهد و هر داده ای را که کاربر به آن دسترسی دارد، بازیابی کند.

باگ Stored XSS  (همچنین به عنوان XSS دائمی یا مرتبه دوم شناخته می شود) زمانی ایجاد می شود که یک برنامه داده ها را از یک منبع نامعتبر دریافت می کند و آن داده ها را در پاسخ های HTTP بعدی خود به روشی ناامن شامل می شود.

داده های مورد نظر ممکن است از طریق درخواست های HTTP به برنامه ارسال شوند. به عنوان مثال، نظرات در مورد یک پست وبلاگ، نام مستعار کاربر در اتاق گفتگو، یا جزئیات تماس در مورد سفارش مشتری. در موارد دیگر، داده‌ها ممکن است از منابع غیرقابل اعتماد دیگر به دست آیند. به عنوان مثال، یک برنامه ایمیل وب که پیام های دریافت شده از طریق SMTP را نمایش می دهد، یک برنامه بازاریابی که پست های رسانه های اجتماعی را نمایش می دهد، یا یک برنامه نظارت بر شبکه که داده های بسته را از ترافیک شبکه نمایش می دهد.

در اینجا یک مثال ساده از آسیب پذیری Stored XSS  است. یک برنامه پیام رسان به کاربران امکان می دهد پیام هایی را ارسال کنند که برای سایر کاربران نمایش داده می شود:

<p>Hello, this is my message!</p>

برنامه هیچ پردازش دیگری از داده ها انجام نمی دهد، بنابراین یک هکر می تواند به راحتی پیامی ارسال کند که  سایر کاربران  می اکسپلویت کند:

<p><script>/* Bad stuff here… */</script></p>

باگ XSS مبتنی بر DOM (همچنین به عنوان DOM XSS شناخته می‌شود) زمانی ایجاد می‌شود که یک برنامه حاوی جاوا اسکریپت سمت سرویس گیرنده باشد که داده‌ها را از یک منبع نامعتبر به روشی ناامن پردازش می‌کند، معمولاً با نوشتن داده‌ها در DOM.

در مثال زیر، یک برنامه کاربردی از مقداری جاوا اسکریپت برای خواندن مقدار از یک فیلد ورودی و نوشتن آن مقدار در یک عنصر در HTML استفاده می کند:

var search = document.getElementById(‘search’).value;

var results = document.getElementById(‘results’);

results.innerHTML = ‘You searched for: ‘ + search;

اگر هکر بتواند مقدار فیلد ورودی را کنترل کند، می‌تواند به راحتی یک مقدار مخرب بسازد که باعث می‌شود اسکریپت خودش اجرا شود:

You searched for: <img src=1 onerror=’/* Bad stuff here… */’>

در یک حالت معمولی، فیلد ورودی از بخشی از درخواست HTTP پر می‌شود، مانند پارامتر  URL، که به همر اجازه می‌دهد حمله را با استفاده از یک URL مخرب، به همان شیوه‌ای که  Reflected XSS  ارائه کند.

هکر که از یک آسیب‌پذیری XSS سوء استفاده می‌کند، معمولاً می‌تواند:

  1. دسترسی کامل به حساب کاربران 
  2. انجام هر عملی را که کاربر قادر به انجام آن است انجام دهد. 
  3. هر داده ای که کاربر می تواند به آن دسترسی داشته باشد را بخواند. 
  4. اطلاعات ورود کاربر را بررسی کند. 
  5. دیفیس وب سایت را انجام دهد.
  6.  قابلیت های تروجان را به وب سایت تزریق کند.

تأثیر واقعی یک حمله XSS به طور کلی به ماهیت برنامه، عملکرد و داده های آن و وضعیت کاربر در معرض خطر بستگی دارد.

 

بدون دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.