اسکریپت بین سایتی یا حمله (Cross Site Scripting (XSS چیست؟ با اقدامات پیشگیرانه جهت جلوگیری از وقوع آن آشنا شوید!
اصول امنیت وب در چند سال گذشته، عمدتاً به دلیل دسترسی آسان به ابزارهای مخرب، بازنگری کاملی داشته است. از حملات DDoS گرفته تا اجرای کد از راه دور، یک پلت فرم امنیتی کامل برنامه وب نیاز به بررسی مقصران برجسته مانند اسکریپت بین سایتی دارد. در حالی که حملات در اکثر موارد از سمت مشتری هستند، میتوان آنها را طوری پیکربندی کرد که از راه دور علیه امنترین پلتفرمها نیز کار کنند.
- مقاله مرتبط: آشنایی با انواع حملات سایبری + نحوه مقابله [54 حمله]
اسکریپت بین سایتی چیست؟
اسکریپت بین سایتی که با XSS نشان داده می شود، یک حمله تزریق کد در سمت مشتری است. مهاجم قصد دارد با قرار دادن کدهای مخرب در یک صفحه وب ساده یا برنامه آنلاین، اسکریپت های مضر را در مرورگر وب قربانی اجرا کند. حمله واقعی زمانی رخ می دهد که قربانی به صفحه وب یا برنامه آنلاین آلوده به کد مخرب برخورد کند. صفحه وب یا برنامه وب به عنوان وسیله ای برای ارسال اسکریپت مخرب به مرورگر کاربر عمل می کند.
هدف اصلی این حمله سرقت داده های شناسایی کاربر دیگر – کوکی ها، نشانه های جلسه و اطلاعات اضافی است. در بیشتر شرایط، از این تکنیک برای سرقت کوکیهای قربانی استفاده میشود. همانطور که همه میدانید، کوکیها به شما کمک میکنند تا به طور خودکار وارد شوید. در نتیجه، ممکن است با استفاده از کوکیهای دزدیده شده با هویتهای دیگر وارد شوید. این یکی از دلایلی است که باعث می شود این حمله به عنوان یکی از خطرناک ترین ها در نظر گرفته شود. ممکن است با استفاده از انواع زبان های برنامه نویسی سمت کلاینت انجام شود.
اکنون که ایده کلی در مورد حملات اسکریپت بین سایتی دارید، نحوه عملکرد این حملات و جریان کلی آنها را درک خواهید کرد. ضمنا اگر سایت شما مشکل امنیتی دارد، با خدمات افزایش امنیت سایت ما آن را بهبود دهید!
نحوه کار اسکریپت بین سایتی
به طور معمول، نحوه تعامل کاربر با یک وب سایت در تصویر زیر نشان داده شده است.
- کاربر آدرس وب سایت را در مرورگر وب وارد می کند.
- مرورگر اطلاعات مربوطه را از سرور میزبان وب سایت می پرسد.
- سرور داده ها را به مرورگر وب می فرستد، جایی که کاربر می تواند داده ها را بازیابی کند.
هنگامی که یک مهاجم کد خود را به یک صفحه وب تزریق می کند، معمولاً با سوء استفاده از یک ضعف در نرم افزار وب سایت، ممکن است اسکریپت خود را که توسط مرورگر قربانی اجرا می شود، تزریق کند. اتصال دوگانه مرورگر وب، به هکر اجازه می دهد تا به سرور یا کاربر نهایی حمله کند.
یکی دیگر از کاربردهای رایج حملات اسکریپت نویسی متقابل، زمانی است که آسیب پذیری در اکثر صفحات قابل دسترسی عمومی یک وب سایت وجود دارد. در این شرایط، هکرها می توانند با درج تبلیغات، درخواست های فیشینگ یا سایر اطلاعات مضر، کد خود را به کاربران وب سایت هدف قرار دهند.
با پوشش حملات XSS، شما انواع مختلف حملات XSS را که توسط هکرها استفاده میشود، خواهید دید.
انواع حملات XSS
Reflective: در این سناریو، payload مهاجم باید در درخواست ارسال شده به وب سرور گنجانده شود. مهاجمان از URL های مخرب، کلاهبرداری های فیشینگ و سایر تاکتیک های مهندسی اجتماعی برای فریب قربانی برای ارسال درخواست به سرور استفاده می کنند.
Persistent: مهاجم از XSS دائمی (ذخیره شده) برای تزریق مواد مخرب (Payload)، معمولا کد جاوا اسکریپت، به نرم افزار قربانی استفاده می کند. اگر اعتبار ورودی وجود نداشته باشد، کد مخرب به طور دائم توسط برنامه هدف، مانند پایگاه داده، ذخیره می شود.
DOM-Based: این حمله زمانی رخ می دهد که اسکریپت سمت سرویس گیرنده برنامه وب، داده های ارائه شده توسط کاربر را به DOM ارسال می کند. برنامه وب DOM را می خواند و به مرورگر می فرستد. هنگامی که داده های DOM بازخوانی می شود، بارگذاری بار اجرا می شود.
در حالی که انواع مختلفی از این حملات XSS وجود دارد، متخصصان امنیتی چندین اقدام پیشگیرانه را برای مبارزه با آنها توصیه می کنند. بنابراین، برخی از این مراحل را مرور کنید.
اقدامات پیشگیرانه برای حملات xss
چارچوبهای شخص ثالث: میتوانید برنامه وب خود را برای اسکریپت بین سایتی و سایر آسیبپذیریهای جدی با استفاده از مجموعههای امنیتی خودکار مانند Crashtest و Acunetix قبل از هر نسخه تجزیه و تحلیل کنید.
کد پاکسازی: پاکسازی ورودی کاربر، کاراکترهای اجرایی بالقوه را از داده ها حذف می کند. در عوض، ورودی ناخواسته کاربر را به یک قالب قابل استفاده تبدیل می کند و تضمین می کند که داده های دریافتی نمی توانند به عنوان کد اجرایی تعبیر شوند.
قوانین فرار: به جای تلاش برای تعیین اینکه آیا داده ها توسط کاربر ارائه شده و بنابراین به طور بالقوه در معرض خطر هستند یا خیر، باید اقدامات احتیاطی را انجام دهید و از داده ها صرف نظر از اینکه توسط کاربر ارائه شده است فرار کنید.
کدگذاری جاوا اسکریپت: از آنجایی که زمینهای که در آن می نویسید نوع کدگذاری مورد نیاز برای استفاده را مشخص می کند، رمزگذاری باید درست قبل از نوشتن داده های قابل کنترل توسط کاربر در صفحه انجام شود.
پیاده سازی CSP: یک خط مشی امنیت محتوا (CSP) می تواند مشخص کند که یک وب سایت مجاز به انجام کدام عملکرد است. این ممکن است قوی ترین رویکردی باشد که برای شما در دسترس است زیرا ممکن است از حملات XSS جلوگیری کند یا احتمال آنها را به میزان قابل توجهی به حداقل برساند.
استفاده از HTTPOnly Flag: اگر یک مرورگر وب که از HttpOnly پشتیبانی می کند، کوکی با پرچم HttpOnly و کد اسکریپت سمت کلاینت را کشف کند، سعی کند کوکی را بازیابی کند، مرورگر یک رشته خالی را برمی گرداند. این کار از ارسال کد مخرب (معمولاً XSS) به وبسایت مهاجم جلوگیری میکند و باعث شکست حمله میشود.
با بسیاری از جنبه های جدید در این مقاله، نمایش زنده نحوه عملکرد حملات XSS مفید خواهد بود. اکنون، به مجموعه چالش های XSS در بخش بعدی نگاه کنید.
نمایش حملات اسکریپت بین سایتی
شما مجموعهای از چالش ها را حل خواهید کرد که با سطوح مختلف حملات XSS سروکار دارند. در مجموع شش سطح وجود دارد. وب سایتی که می توان این حملات را در آن شروع کرد XSS Game است.
سطح 1:
در این چالش، ورودی کاربر بلافاصله بدون فرار کافی در صفحه گنجانده می شود. برای اجرای جاوا اسکریپت باید با برنامه آسیب پذیر زیر تعامل داشته باشید. برای مثال، میتوانید نوار URL پنجره آسیبپذیر را تغییر دهید یا اقداماتی را در داخل آن انجام دهید.
از آنجا که آنها حملات XSS غیر دائمی هستند، ما باید یک XSS منعکس شده را در برنامه وب اجرا کنیم و برای موفقیت آمیز بودن بار، باید در URL موجود باشد.
Payload: <script>alert(‘Level 1 Complete’)</script>
سطح 2:
هر متنی که ارسال می کنم به نظر می رسد یک بلوک نقل قول در منبع صفحه باشد. بنابراین همان تگ <script> از سطح 1 باید در اینجا کار کند، اما اینطور نیست. InnerHTML قطعه HTML ایجاد شده را به پیام اضافه می کند. بنابراین، وقتی مرورگر این قطعه HTML (متغیر HTML در کد قبلی) را تجزیه می کند، هیچ تگ اسکریپتی اجرا نخواهد شد.
راه حل در اینجا استفاده از رویدادها است. رویدادها به اندازه کافی قطعه جاوا اسکریپت تعریف شده را اجرا می کنند.
Payload: <img src=X onerror=”alert(‘Level 2 Complete’)”>
تزریق بالا تلاش میکند تصویری را بارگذاری کند که وجود ندارد و باعث یک رویداد OnError میشود. OneError عملکرد هشدار ما را اجرا می کند.
سطح 3:
وقتی روی یک برگه کلیک می شود، قطعه URL شماره برگه را نشان می دهد. مقدار بعد از تگ # بر عملکرد صفحه حاکم است. بنابراین یک ورودی است. در نتیجه، شما فقط باید یک payload ایجاد کنید که تگ <img> را برای اجرای جاوا اسکریپت تغییر دهد. در این مورد، شما از عنصر تصویر موجود استفاده میکنید و src را به چیزی که وجود ندارد تغییر میدهید و باعث میشود یک رویداد OnError با URL اجرا شود.
Payload: xxs.jpg’ onerror=’alert(“Level 3 done”)’/>
سطح 4:
از آنجایی که وب سایت دارای تایمر است، با قرار دادن اعداد در کادر، شمارش معکوس شروع می شود و پس از پایان آن، برنامه به شما اطلاع می دهد. مقدار ارائه شده در جعبه متن از طریق پارامتر تایمر URL به سرور ارسال می شود.
در رویداد OnLoad timer.html، تابع startTimer() فراخوانی می شود. با این حال، آرگومان تایمر مستقیماً به startTimer() ارائه می شود. Web-Application باید یک هشدار () پاپ آپ انجام دهد که از محتوای تابع startTimer بدون ایجاد اختلال در کد جاوا اسکریپت فرار کند. مقدار آرگومان مستقیماً بدون فیلتر کردن به startTimer() ارسال می شود. بنابراین، میتوانید سعی کنید یک تابع alert() را با تابع startTimer() در رویداد onload قرار دهید.
Payload: ‘);alert(‘Level 4 Complete
سطح 5:
می توانید منبع صفحه را بررسی کنید. مقدار ویژگی href پیوند «بعدی» «تأیید» است که با رشته جستجوی URL «بعدی» مطابقت دارد. با استفاده از پارامتر query “next”، می توانید کد جاوا اسکریپت را به ویژگی href پیوند “Next” اضافه کنید. در نهایت، اسکریپت زمانی که کاربر روی لینک کلیک می کند فعال می شود.
Payload: javascript:alert(‘Level 5 Complete’)
سطح 6:
نقص در کدی است که مقدار زیر تگ # را کنترل می کند. خط 45 مقدار زیر برچسب # را به عنوان نام ابزار می گیرد. در خط 48، این مقدار به طور مستقیم به تابع includeGadget() عرضه می شود.
تابع includeGadget() یک تگ <script> [خط 18] ایجاد می کند و از آرگومان URL (gadgetName) به عنوان ویژگی src تگ اسکریپت [خط 28] استفاده می کند. بنابراین شما کنترل کاملی بر عنصر HTML اسکریپت دارید.
Payload: https://xss-game.appspot.com/level6/frame#data:application/javascript,alert(‘Level 6 complete’)
در نهایت، شما تمام شش سطح چالش XSS ما را تکمیل کردید.
نتیجه
در این مقاله، یاد گرفتید که چگونه اسکریپت بین سایتی میتواند آسیبپذیریهای وبسایت، دستههای مختلف آن و برخی اقدامات پیشگیرانه را که میتواند به مدیران کمک کند از نرمافزار سرور خود در برابر سوءاستفاده محافظت کنند، شکار کند. با این حال، مبارزه با اسکریپت نویسی متقابل یک کار واحد در اقیانوس مهارت هایی است که یک هکر اخلاقی باید در آن مهارت داشته باشد.
پانا مارکتینگ آموزش امنیت سایبری سایت نیز ارائه می دهد که تمام زمینه های لازم برای یادگیری توسط هکرهای اخلاقی جدید و با تجربه را پوشش می دهد. آیا در مورد حملات اسکریپت بین سایتی سوالی دارید؟ لطفا نظرات و سوالات خود را در قسمت نظرات زیر مطرح کنید و ما با راه حل به آنها پاسخ خواهیم داد.