در این بخش ، اسکریپت های ذخیره شده در سایت را توضیح می دهیم ، تأثیر حملات XSS ذخیره شده را شرح می دهیم و نحوه یافتن آسیب پذیری های ذخیره شده XSS را بیان می کنیم.
برنامه نویسی متقاطع ذخیره شده چیست؟
اسکریپت های سایت ذخیره شده (همچنین به عنوان XSS مرتبه دوم یا مداوم شناخته می شود) هنگامی بوجود می آید که یک برنامه از یک منبع غیرقابل اعتماد دریافت می کند و داده های موجود در پاسخ های HTTP بعدی خود را به روشی ناامن شامل می شود.
فرض کنید یک وب سایت به کاربران اجازه می دهد تا نظرات خود را در پست های وبلاگ ارسال کنند ، که به سایر کاربران نمایش داده می شود. کاربران نظرات را با استفاده از درخواست HTTP مانند موارد زیر ارسال می کنند:
پست/پست/نظر http/1. 1 میزبان: آسیب پذیر-website. com طول محتوا: 100 postid = 3 & نظر = این+پست+بسیار+مفید است. & name = carlos+montoya و ایمیل = carlos ٪ 40normal-user. net
پس از ارسال این اظهار نظر ، هر کاربر که از پست وبلاگ بازدید می کند ، موارد زیر را در پاسخ برنامه دریافت می کند:
این پست بسیار مفید بود.
با فرض اینکه برنامه هیچ پردازشی دیگر از داده ها را انجام نمی دهد ، یک مهاجم می تواند یک اظهار نظر مخرب مانند این ارائه دهد:
در صورت درخواست مهاجم ، این اظهار نظر URL رمزگذاری می شود:
هر کاربر که از پست وبلاگ بازدید می کند ، اکنون موارد زیر را در پاسخ برنامه دریافت می کند:
اسکریپت تهیه شده توسط مهاجم در زمینه جلسه خود با برنامه ، در مرورگر کاربر قربانی اجرا خواهد شد.
تأثیر حملات XSS ذخیره شده
اگر یک مهاجم بتواند اسکریپتی را که در مرورگر قربانی اجرا می شود ، کنترل کند ، در این صورت معمولاً می توانند آن کاربر را به طور کامل سازش کنند. مهاجم می تواند هر یک از اقداماتی را که برای تأثیر آسیب پذیری های منعکس شده XSS اعمال می شود ، انجام دهد.
از نظر استثماری ، تفاوت اصلی بین XSS منعکس شده و ذخیره شده در این است که یک آسیب پذیری XSS ذخیره شده حملات را که در درون خود برنامه هستند ، امکان پذیر می کند. مهاجم نیازی به یافتن یک روش خارجی برای القاء سایر کاربران برای ایجاد درخواست خاص حاوی سوء استفاده از آنها ندارد. در عوض ، مهاجم سوء استفاده های خود را در خود برنامه قرار می دهد و به سادگی منتظر است تا کاربران با آن روبرو شوند.
ماهیت خودآزمایی سوء استفاده از اسکریپت های متقاطع ذخیره شده به ویژه در شرایطی که آسیب پذیری XSS فقط بر کاربرانی که در حال حاضر وارد برنامه می شوند ، تأثیر می گذارد. اگر XSS منعکس شود ، این حمله باید به موقع به پایان برسد: کاربر که باعث می شود درخواست مهاجم را در زمانی که وارد سیستم نشده اند ، به خطر بیاندازد ، به خطر نمی افتد. در مقابل ، اگر XSS ذخیره شود ، کاربر تضمین می شود که در زمان برخورد با بهره برداری وارد سیستم شود.
بیشتر بخوانید
XSS ذخیره شده در زمینه های مختلف
انواع مختلفی از اسکریپت های متقاطع ذخیره شده وجود دارد. محل داده های ذخیره شده در پاسخ برنامه ، تعیین می کند که چه نوع بار بار برای بهره برداری از آن مورد نیاز است و همچنین ممکن است بر تأثیر آسیب پذیری تأثیر بگذارد.
علاوه بر این ، اگر برنامه قبل از ذخیره سازی ، هرگونه اعتبار سنجی یا پردازش دیگری را روی داده ها انجام دهد ، یا در نقطه ای که داده های ذخیره شده در پاسخ ها گنجانیده شده است ، این به طور کلی تأثیر می گذارد که نوع بار XSS مورد نیاز است.
بیشتر بخوانید
نحوه یافتن و آزمایش آسیب پذیری های ذخیره شده XSS
بسیاری از آسیب پذیری های ذخیره شده XSS را می توان با استفاده از اسکنر آسیب پذیری وب Burp Suite یافت.
آزمایش آسیب پذیری های ذخیره شده XSS به صورت دستی می تواند چالش برانگیز باشد. شما باید تمام "نقاط ورود" مربوطه را آزمایش کنید که از طریق آن داده های قابل کنترل مهاجم می توانند پردازش برنامه را وارد کنند و تمام "نقاط خروج" که ممکن است در پاسخ های برنامه ظاهر شود.
نقاط ورود به پردازش برنامه شامل موارد زیر است:
- پارامترها یا داده های دیگر در رشته پرس و جو URL و بدنه پیام.
- مسیر پرونده URL.
- هدر درخواست HTTP که ممکن است در رابطه با XSS منعکس شده قابل بهره برداری نباشند.
- هر مسیر خارج از باند که از طریق آن یک مهاجم می تواند داده ها را به برنامه تحویل دهد. مسیرهایی که وجود دارد کاملاً به عملکردی که توسط برنامه اجرا می شود بستگی دارد: یک برنامه وب داده داده های دریافت شده در ایمیل را پردازش می کند. برنامه ای که یک فید توییتر را نشان می دهد ممکن است داده های موجود در توییت های شخص ثالث را پردازش کند. و یک جمع کننده خبری شامل داده های منشا در سایر وب سایت ها خواهد بود.
نقاط خروج برای حملات XSS ذخیره شده همه پاسخهای HTTP ممکن است که در هر شرایطی به هر نوع کاربر برنامه بازگردانده می شوند.
اولین قدم برای آزمایش آسیب پذیری های ذخیره شده XSS ، یافتن پیوندها بین نقاط ورود و خروج است ، به موجب آن داده های ارسال شده به یک نقطه ورود از یک نقطه خروج منتشر می شوند. دلایل چالش برانگیز این امر این است:
- داده های ارسال شده به هر نقطه ورود می توانند در اصل از هر نقطه خروج منتشر شوند. به عنوان مثال ، نام های صفحه نمایش داده شده توسط کاربر می توانند در یک گزارش حسابرسی مبهم ظاهر شوند که فقط برای برخی از کاربران برنامه قابل مشاهده است.
- داده هایی که در حال حاضر توسط برنامه ذخیره می شوند ، به دلیل سایر اقدامات انجام شده در برنامه ، در معرض بازنویسی قرار می گیرند. به عنوان مثال ، یک تابع جستجو ممکن است لیستی از جستجوهای اخیر را نشان دهد ، که به سرعت جایگزین می شوند زیرا کاربران جستجوهای دیگر را انجام می دهند.
برای شناسایی جامع پیوندهای بین نقاط ورود و خروج ، شامل آزمایش هر جابجایی به طور جداگانه ، ارسال یک مقدار خاص به نقطه ورود ، حرکت مستقیم به نقطه خروج و تعیین اینکه آیا مقدار در آنجا ظاهر می شود. با این حال ، این رویکرد در یک برنامه با بیش از چند صفحه عملی نیست.
در عوض ، یک رویکرد واقع بینانه تر این است که به طور سیستماتیک از طریق نقاط ورود به داده ها کار کنید ، یک مقدار خاص را به هر یک ارسال کنید و پاسخ های برنامه را برای تشخیص مواردی که مقدار ارسال شده ظاهر می شود ، نظارت کنید. توجه ویژه ای به توابع برنامه مربوطه ، مانند نظرات در پست های وبلاگ می تواند توجه شود. هنگامی که مقدار ارسال شده در یک پاسخ مشاهده می شود ، باید تعیین کنید که آیا داده ها در واقع در درخواست های مختلف ذخیره می شوند ، بر خلاف اینکه به سادگی در پاسخ فوری منعکس می شوند.
هنگامی که پیوندهای بین نقاط ورود و خروج را در پردازش برنامه مشخص کرده اید ، باید هر پیوند به طور خاص آزمایش شود تا تشخیص دهد که آیا آسیب پذیری XSS ذخیره شده وجود دارد. این شامل تعیین زمینه در پاسخ است که داده های ذخیره شده در آن ظاهر می شود و آزمایش های مناسب نامزد XSS را که در آن زمینه قابل استفاده است ، آزمایش می کند. در این مرحله ، روش آزمایش به طور گسترده ای مانند یافتن آسیب پذیری های منعکس شده XSS است.
آیا می خواهید پیشرفت خود را پیگیری کنید و تجربه یادگیری شخصی تری داشته باشید؟(رایگان است!)