دوره SEC542 – بخش سی و هشتم

دوره آموزشی SEC542

در این بخش از دوره آموزشی SEC542 از موسسه SANS به آشنایی با اکسپلویت نمودن آسیب پذیری XSS می پردازیم.

اکسپلویت‌های معمول با XSS

از روش های رایج اکسپلویت نمودن آسیب پذیری XSS می‌توان به خواندن کوکی‌ها، redirect کردن کاربر به صفحه‌ای دیگر و تغییر محتوای یک صفحه، اشاره کرد. درواقع قادر خواهید بود تقریبا هر کد سمت کلاینتی (مانند کدهای JavaScript) را اجرا نمائید.

خواندن کوکی‌ها

کوکی‌ها حاوی اطلاعات ارزشمندی از session یک کاربر هستند. این اطلاعات می‌تواند شامل session ID، session token یا اطلاعاتی حساسی باشد که اپلیکیشن اشتباها بر روی کلاینت ذخیره کرده است. به کد زیر دقت کنید:

کد بالا اطلاعات کوکی یک کلاینت را دزدیده و آن را به وب‌سایت مهاجم ارسال می‌کند.

همانطور که می‌بینید اسکرپیت بالا شامل یک تگ image است که URL آن به سایت مهاجم اشاره می‌کند. با اجرای این اسکریپت در اپلیکیشن هدف، مقدار کوکی‌ها به URL اضافه می‌شود. مثلا اگر مقدار کوکی session ID برابر 42 باشد، آنگاه URL بصورت زیر درمی‌آید:

evil.site/42

در این مرحله، مرورگر کاربر بطور خودکار تلاش می‌کند تا عکس موجود در اسکریپت را لود کند. طبیعتا عکس لود نمی‌شود (بصورت یک X قرمز به کاربر نشان داده می‌شود یا اگر سایز عکس را 1×1 قرار داده باشیم، کاربر آن را اصلا نمی‌بیند). درخواستی که در این مرحله ارسال می‌شود، در لاگ‌های evil.site ظاهر می‌شود.

ادمین evil.site یک پیام خطای 404 می‌بیند که در آدرس درخواستی خود مقادیر کوکی قربانی را شامل می‌شود. بنابراین با بررسی لاگ‌های سایت evil.site، کوکی‌ها به دست می‌آیند.

بنابراین نتیجه اجرای اسکریپت، ارسال دیتای کاربر به سایت مهاجم از طریق درخواست‌های HTTP است.

Cookie Catcher

در بخش قبل راجع به دریافت کوکی‌های قربانیان از طریق لاگ‌های HTTP صحبت کردیم. در اینجا کدی را می‌بینیم که توسط Tom Liston نوشته شده و با اجرای آن بر روی یک سرور، مقادیر کوکی را از درخواست‌ها خوانده و آن‌ها را در یک فایل در مسیر /tmp/cookiedump می‌نویسد.

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

کد مذکور در زیر قابل مشاهده است.

Redirecting a User

یکی از کارهای دیگری که می‌توانیم از طریق آسیب‌پذیری XSS و با استفاده از کدهای JavaScript انجام دهیم، هدایت کاربر به یک صفحه دیگر (یک سایت آلوده تحت کنترل مهاجم) می‌باشد. به کد زیر دقت کنید:

این کد مسیر نمایش مرورگر را عوض می‌کند. در مثال بالا، مرورگر کاربر به آدرس www.sec542.org هدایت می‌شود. این آدرس می‌تواند هر صفحه یا سایت دیگری بر روی اینترنت باشد.

با استفاده از redirection، مهاجم می‌تواند سایت‌هایی که کاربر باز می‌کند را کنترل کند. در تکنیک phishing نیز از این حمله استفاده می‌شود. بدین صورت که قربانی، وارد سایت اصلی و معتبر (که دارای آسیب پذیری XSS است) شده و سپس با اجرا شدن کد JavaScript به سایت دیگری redirect می‌شود.

رایت آپ های آسیب پذیری XSS

توجه کنید که اگر بتوانیم کد redirection در اپلیکیشن تزریق کنیم، آنگاه این امکان را نیز داریم کدی تزریق کنیم که مقصد ارسال اطلاعات فرم لاگین را تغییر دهد.

برای مثال، کاربر واقعا وارد سایت اصلی بانک خود می‌شود اما چون صفحه لاگین آن به XSS آسیب‌پذیر است، بجای ارسال فرم لاگین به سرور بانک، اطلاعات حساس کاربر به سایت مهاجم ارسال می‌گردد. کد زیر نمونه تغییر آدرس یک فرم می‌باشد:

External Scripts

تمام مثال‌هایی که تا به اینجا بررسی کردیم، مربوط به تزریق اسکریپت‌های کوچک در اپلیکیشن آسیب‌پذیر هستند. از آنجائیکه معمولا طول فیلدهای ورودی محدودیت دارد (مثلا 100 کاراکتر)، بنابراین تزریق اسکریپت‌های طولانی جهت انجام کارهای مخرب معمولا دشوار می‌گردد.

JavaScript با ارائه قابلیت لود اسکریپت از سایت‌های دیگر (remote)، مشکل ما را حل می‌کند. در مثال زیر، با فراخوانی اسکریپت از یک سایت دیگر، اقدام به پیاده‌سازی حملات از قبل طراحی شده خود می‌نمائیم:

Evasion

خیلی از سایت‌ها طوری پیکربندی شده‌اند که ورودی‌های مخرب شناخته شده را بلاک کنند. این کار با blacklist کردن رشته‌ها انجام می‌شود. اما blacklist ها اغلب بایپس می‌شوند.

از آنجائیکه زبان‌های HTML و JavaScript انعطاف‌پذیری بالایی دارند، راه‌های بسیار زیادی برای ارائه یک دیتا با اشکال مختلف را پیش روی ما قرار می‌دهند. این قابلیت به ما اجازه می‌دهد مکانیزم‌های بلاک کردن را دور بزنیم.

برترین سایت در زمینه تکنیک‌های دور زدن XSS، برگه تقلب XSS به نشانی زیر می‌باشد:

www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet

مثال اول Evasion

یک پیاده‌سازی معمول XSS، نشان دادن یک alert box بر روی صفحه می‌باشد:

در ادامه دو روش بایپس filtering را مشاهده می‌کنید:

اولین روش از تگ image استفاده کرده و در source عکس کد JavaScript نوشته است. روش دیگر از یک تگ بهم ریخته (malformed) image استفاده می‌کند که با وجود نادرست بودن، اکثر مرورگرهای مدرن آن را رندر می‌کنند.

مثال دوم Evasion

از متدهای دیگر بایپس، استفاده از encoding های مختلف پیلود می‌باشد. به مثال‌های زیر دقت کنید. در اولین مثال از HTML entities و در دومی از Hex encoding استفاده شده است.

مطالب این بخش توسط سرکار خانم فهیمه رضایی تهیه شده است.

درباره نویسنده: احسان نیک آور

ممکن است دوست داشته باشید