XSS مخفف Cross Site Scripting به حملات تزریق کد به صفحات وب گفته می شود، هکر ها از باگ های XSS استفاده می کنند تا اطلاعات کاربران یک سایت را بدون اطلاع خودشان به سرقت ببرند. در این مقاله داتیس نتورک شما را با حمله تزریق کد بیشتر آشنا می کنیم، همراه ما باشید.
شاید بپرسید مخفف Cross Site Scripting که می شود CSS ! پس چرا گفتیم XSS ؟
اگرچه مخفف CSS ، Cross Site Scripting میباشد اما با توجه به اینکه CSS به عنوان مخفف Cascading Style Sheets به کار برده میشود، به همین دلیل از XSS برای مخفف Cross Site Scripting استفاده میشود.
XSS چیست؟
Cross Site Scripting یکی از روش های حمله و نفوذ هکرها به وب سایت ها میباشد.
در این روش کدهای جاوا اسکریپت به سایت تزریق میشوند و هدف هکر بیشتر کاربرانی هستند که به سایت مراجعه کرده اند.
در واقع هکرها در این نوع حمله اطلاعات کاربران یک سایت را بدون اینکه خودشان متوجه شوند، به سرقت میبرند..!
در این حمله با باز کردن یک صفحه وب سایت، کلیک روی یک لینک و یا باز کردن یک ایمیل، کدی به صورت مخفی روی کامپیوتر کاربر اجرا میشود که میتواند اطلاعات مهمی را از سیستم کاربر سرقت کند.
هکرها با استفاده از این حمله کوکیها را سرقت میکنند و از طریق آنها به اطلاعات کاربران دسترسی پیدا میکنند.
هنگامی که کاربر وارد یک حساب اینترنتی مانند ایمیل، حساب بانکی یا حساب های دیگر میشود اطلاعاتی (کوکی ها) روی کامپیوتر کاربر ذخیره میشود..
به طور مثال امکان دارد پس از ورود اطلاعات یک کاربر مانند نام کاربری و رمز عبور در سایت یکی از بانکها یا موسساتی که در برابر XSS محافظت نشده اند، این اطلاعات توسط هکر، بدون اینکه کاربر آگاهی یابد، سرقت شود و سپس حساب بانکی کاربر مورد دستبرد واقع شود.
این روش در مورد بقیه حساب های کاربری اینترنتی هم امکان پذیر است.
چرا حملات XSS خطرناک هستند؟
حملات تزریق کد یا جاوا اسکریپت (Javascript)، به دلایل مختلفی خطرناک هستند. ازجمله:
دزدیدن کوکی ها:
هکر میتواند بسیار ساده، کوکیهای مرورگر کاربر را بدزدد.
از آنجایی که در کوکیها اطلاعاتی نظیر شناساگر نشست (Session) فعالِ مثلاً حساب کاربری فرد نوشته شده است، هکر میتواند با استفاده از این کوکیها و بدون وارد کردن حتی یک کاراکتر رمز، وارد حساب شما شود.
البته اگر کوکیهای حساس از طرف سایت اصلی به عنوان امن به مرورگر معرفی شوند، این کوکیها به دست هکر نخواهد افتاد (حداقل با روشهای عادی).
دزدیدن اطلاعاتی مثل رمز عبور:
اگر باگ کراس سایت اسکریپتینگ در صفحات حساسی مثل صفحه لاگین، جایی که ما رمز عبور خود را وارد میکنیم باشد، هکر به سادگی میتواند فیلد وارد کردن رمز عبور را مانیتور کرده و با هر بار تغییر مقدار، مقدار داخل آن را به سرور هکر بازگرداند و در نتیجه هکر اطلاعات بسیار حساس مثل نام کاربری و رمز عبور فرد را در دست داشته باشد.
ارسال درخواستهای جعلی:
هکر میتواند با تزریق کدی، درخواستهای تقلبی را از مرورگر کاربر رد و بدل کند.
در این صورت مرورگر کاربر را مانند یک سرور پراکسی در دست گرفته و به راحتی میتواند خود را پشت آن مخفی کند. همچنین میتواند از این طریق اقدام به DDoS کردن سرویسهای گوناگون کند.
مدیریت کل محتوای HTML صفحه:
هکر با استفاده از حملات تحت DOM میتواند محتوای صفحه را تغییر دهد.
این کار بخصوص در مباحث مربوط به مهندسی اجتماعی بسیار خطرناک است.
یا مثلاً میتواند از طریق API کدهایی نظیر زبان HTML5 استفاده کرده و کارهایی از قبیل شنود میکروفون، مشاهده وبکم، ردگیری مکان و … انجام دهد. البته همه این کارها به دانش مهندسی اجتماعی هکر نیاز دارد.
حملات XSS چگونه انجام میپذیرند؟
همانطور که گفته شد، ابتدا حمله کننده یک باگ یا آسیب پذیری بر روی یک سایت پیدا کرده سپس با تزریق کدهای خود آن را اکسپلویت میکند. تزریق کد میتواند به روشهای گوناگونی انجام بپذیرد.
مثلاً فرض کنید یک سایت قابلیت اضافه نموند محتوایی توسط کاربران را به یک صفحه میدهد، مثل قسمت نظرات یا کامنتهای یک مطلب. در سمت سرور، نحوه نمایش کامنتها مثلاً به صورت زیر است (کدها در زبان PHP هستند):
echo '<div class="comment">' . $commentBody . '</div>';
با فرض اینکه در متغیر commentBody، کامنتی که کاربران گذاشته اند قرار گرفته، درصورتی که یک کاربر نظری مثل متن زیر را بگذارد:
با تشکر از مطالب مفیدتون
کد تغییر یافته اینچنین خواهد شد:
echo '<div class="comment">' . "با تشکر از مطالب مفیدتون" . '</div>';
در نتیجه کدهای HTML زیر به مرورگر کاربر تحویل داده خواهد شد:
<div class="comment">با تشکر از مطالب مفیدتون</div>
و کاربرانی که آن مطلب را مشاهده میکنند، قادر خواهند بود تا کامنتی با محتوای “با تشکر از مطالب مفیدتون” را ببینند.
حال فرض کنید کاربر دیگر (در اینجا، حمله کننده) کامنتی با محتوای زیر را ارسال کند:
عالی بود <script>alert("You Are Hacked")</script>
چون در کدهای PHP گذاشته شده، هیچ فیلتری بر روی خروجی اعمال نمیشود، در سمت سرور پردازش به این صورت خواهد بود:
echo '<div class="comment">' . 'عالی بود <script>alert("XSS Bug Found")</script>' . '</div>';
و در نتیجه به مرورگر کاربرانی که آن مطلب را مشاهده میکنند کد زیر ارسال خواهد شد:
<div class="comment">عالی بود <script>alert("XSS Bug Found")</script></div>
و کاربر محتوای “عالی بود” را مشاهده خواهد کرد با این تفاوت که چون یک تگ <script> استفاده شده، مرورگر مقادیر داخل آن را با استفاده از موتور جاوا اسکریپت خود execute خواهد کرد و در نتیجه کاربر یک پیغام به صورت پاپ آپ حاوی مقدار “XSS Bug Found” را خواهد دید!
حال اگر از سمت سرور خروجی به درستی فیلتر شود، عبارت زیر فقط و فقط به عنوان یک نوشته چاپ میگردد و در نتیجه <script> نیز به عنوان تگ توسط مرورگر شناسایی نخواهد شد:
<div class="comment">عالی بود <script>alert("XSS Bug Found")</script></div>
ممکن است بگوئید که خب میشود با فیلتر کردن تگ <script> جلوی این باگ را گرفت اما به این سادگیها نیست. محتوای زیر را به عنوان Payload حمله در نظر بگیرید:
<div style="background-image: url(javascript:alert('XSS Bug Found'))">
در پی لود بالا از هیچ تگ <script> ای استفاده نکرده ایم با این حال با تزریق کردن آن، باز هم متن “XSS Bug Found” را خواهیم دید.
یک مثال دیگر:
سایتی را فرض کنید که با جستجو کردن مثلا عبارتی “cpu چیست” شما را به مسیری مانند زیر هدایت میکند (چون معمولاً از متد GET استفاده میکنند):
http://example.com/vul/?q=cpu+چیست
و از طرفی کدهای قسمت نتایج جستجوی آن به این صورت نوشته شده است (کد در زبان PHP است):
echo "متن جستجوی شما: " . $_GET["q"];
در کد بالا همراه با رشته “متن جستجوی شما: ” چیزی که در پارامتر q (در آدرس سایت مثال بالا) نوشته ایم، به مرورگر تحویل داده میشود.
با جسنجوی عبارت “cpu چیست” کد نوشته شده، متن زیر را تحویل ما خواهد داد:
متن جستجوی شما: cpu چیست
حال فرض کنید که یک کاربر دیگر (در اینجا، حمله کننده) بجای عبارت “cpu چیست”، کد دلخواه خود را اجرا کند که معمولاً کدهای جاوا اسکریپت هم شامل آنها میشود:
http://example.com/vul/?q=<script>alert("XSS Found Here")</script>
با رفتن به مسیر بالا، متوجه خواهیم شد که کدهای زیر به مرورگر کاربر تحویل داده خواهند شد:
متن جستجوی شما: <script>alert("XSS Found Here")</script>
با اینحال چون خروجی توسط کدهای سایت فیلتر نشده است و <script> یک تگ استاندارد برای مرورگر است، مقدار داخل آن توسط انجین جاوا اسکریپت مرورگر پردازش شده و از دید کاربر پنهان میشود. در نتیجه چیزی که کاربر میبیند به این صورت خواهد بود:
متن جستجوی شما:
به همراه یک پاپ آپ حاوی عبارت “XSS Found Here”.
حال اگر آن قسمت به درستی فیلتر شود، دقیقاً عین مقدار زیر برای کاربر نشان داده خواهد شد و چون فیلتر شده، <script> به عنوان یک تگ برای مرورگر شناخته نخواهد شد بلکه تنها یک نوشته خواهد بود:
متن جستجوی شما: <script>alert("XSS Found Here")</script>
انواع حملات Xss :
- کاربر بر روی یک لینک حاوی XSS کلیک کند.
- یک حفره امنیتی همیشگی در قسمت های عمومی سایت قرار گرفته باشد.
- حفره امنیتی ممکن است در سطح سیستم عامل یا شبکه ایجاد شده باشد.
- طراح سایت خودش کد مخرب را در صفحه قرار داده باشد.
- کاربر ایمیل حاوی XSS را باز کند.
آیا حملات XSS مربوط به خود کاربر میشود؟
اگر شخصی با استفاده از حمله XSS به صورت خودسرانه اسکریپتهای مخرب جاوا را روی سایت شما اجرا کند، امنیت وبسایت شما پایین آمده و در معرض خطر قرار میگیرد. XSS فقط مشکل کاربر نیست و هر خطر امنیتی که کاربر سایت شما را تهدید کند، خود شما را هم تهدید خواهد کرد.
منبع:
توی مقوله xss ما حتی میتونیم کدی رو تزریق کنیم که بتونیم از طریق سیستم طرف ارز دیجیتال استخراج کنیم ! و یا میتونیم یوزر و پسورد طرفو بدزدیم! یا اونو به صفحات فیشینگ هدایت کنیم (:
و مبحث xss فقط تو این چیزا رخ نمیده (: مثلا یه بابایی بود رفته بود رو بستر فایل فرمت ها اینکارو کرده بود (:
رو بستر xss ما حتی میتونیم یک بدافزار رو روی سیستم طرف آپلود کنیم (:
دیدم که میگم !
بله کاملا درسته، ممنون از اطلاعاتی که به اشتراک گذاشتید.