سلام عزیزانم در خدمتتون هستم با مقاله ای در مورد نحوه شناسایی باگ XSS در نرم افزار های تحت وب و تکنیک های جدیدی که در باگ بونتی ها تاکنون استفاده شده است . XSS چیست؟
Cross-Site Scripting (XSS) رایج ترین آسیب پذیری کشف شده در برنامه های وب است. وقتی مهاجم قادر به اجرای JavaScript سمت مشتری است در مرورگر کاربر دیگر رخ می دهد. XSS به دلایلی یک کلاس اشکال بسیار جالب و پویاست.شدت آن بسته به نوع کاربرد و زمینه می تواند در هر نقطه ای آموزنده تا حیاتی باشد ، در بعضی از زمینه ها می تواند منجر به اجرای دستور از راه دور شود ، با توجه به ماهیت پویای کلاس اشکال ، جلوگیری از ایجاد آن از نقطه نظر توسعه دشوار است ، آسیب پذیری های پیچیده تر XSS بیشتر با استفاده از ابزارهای خودکار مورد نفوذ قرار میگیرند ، به دست آوردن XSS در یک برنامه آسیب پذیر ممکن است به مهاجم توانایی این را بدهد که :
کوکی را بدزدید و به آنها امکان کنترل کامل جلسه کاربر را بدهید
خط مشی همان منبع (SOP) را دور بزنید ، به آنها اجازه می دهد کارهای حساس را انجام دهند ، مثل اینکه کاربر قربانی ثبت شده باشند
برای مثال در اطلاعات قابل مشاهده توسط کاربر قربانی میتوانید نفوذ کنید
در بدترین سناریو ، این آسیب پذیری ممکن است به عنوان کرم زنجیر زده شود تا کاربران را تحت تأثیر قرار دهد.
علت اصلی آسیب پذیری های XSS
XSS هنگامی رخ می دهد که وقتی ورودی کاربر به درستی بازگردانده نشود (فیلتر غیر صحیح) ، به شما اجازه می دهد JavaScript سمت کلاینت تزریق شود ، به گونه ای که اجازه اجرای آن را می دهد.
مثال اساسی
برای درک کامل معنی همه اینها ، بیایید نگاهی به یک مثال اساسی بیندازیم. در زیر کد HTML و PHP برای یک برنامه بسیار اساسی (و آسیب پذیر) آورده شده است.
اگر می خواهید این کار را دنبال کنید ، یک پوشه جدید خالی در جایی ایجاد کنید ، سپس کد فوق را در فایلی بنام index.php قرار دهید در حالی که داخل آن فهرست هستید ، از خط فرمان php -S localhost: 8000 را اجرا کنید ، سپس در مرورگر خود به http://localhost:8000/?name=hakluke مراجعه کنید.
این مقدار را دریافت خواهید کرد :
شما می توانید "hakluke" را به هر آنچه در URL بخواهید تغییر دهید و دوباره در برنامه منعکس شود. و وقتی می گویم "هر آنچه می خواهید" معنای واقعی کلمه هر چیزی است. به عنوان مثال ، اگر می خواهیم متن را پررنگ کنیم ، می توانیم استفاده کنیم
بطور مثال :
یک کد ساده html خطرناک نیست تا زمانی که در جایی لود شود که ممنوع است و برنامه نویس بطور صحیح آن را فیلتر نکرده باشد؟ بیایید سعی کنیم یک تصویر را جاسازی کنیم:
در حال حاضر ، شما ممکن است مشکل را ببینید. متنی که در قسمت نام وارد شده است ، به جای چاپ به عنوان متن عادی ، به عنوان HTML معتبر تفسیر می شود.
اگر از خود می پرسید که چرا٪ نمادها و اعداد در URL وجود دارد ، این فقط کدگذاری URL است. به ما امکان می دهد بدون شکستن URL ، هر کاراکتر را در یک URL قرار دهیم. یک مثال متداول٪ 20 است که به یک شخصیت فضایی ترجمه می شود. بدیهی است که فضای موجود در URL ها ایده آل نخواهد بود زیرا این URL را به دو کلمه تقسیم می کند ، در عوض از "٪ 20" استفاده می کنیم. به راحتی می توانید رشته های رمزگذاری شده URL را با استفاده از ابزاری آنلاین مانند این مورد رمزگذاری یا رمزگشایی کنید.
توانایی تزریق جاوا اسکریپت در اینجا همان چیزی است که آن را به جای تزریق خسته کننده HTML قدیمی ، به یک آسیب پذیری XSS تبدیل می کند.
انواع XSS
XSS اشکال مختلفی دارد ، اما می توانیم همه آنها را به چند دسته تقسیم کنیم.
REFLECTED XSS
XSS منعکس شده هنگامی رخ می دهد که جاوا اسکریپت به یک درخواست تزریق می شود ، و مستقیماً در پاسخ منعکس و اجرا می شود.
XSS پایدار / ذخیره شده | PERSISTENT/STORED XSS
"مداوم" یا "ذخیره شده" XSS هنگامی رخ می دهد که JavaScript تزریق شده مانند یک پایگاه داده در جایی ذخیره شود. پس از تنظیم میزان بارگیری ، بارگیری در صفحه ای آسیب پذیر منعکس خواهد شد ، خواه درخواست حاوی محموله باشد یا نه.
DOM XSS
DOM XSS زمانی اتفاق می افتد که تزریق توسط JavaScript سمت مشتری منعکس شود. علت آن با سایر انواع XSS کمی متفاوت است ، اما میزان بهره برداری و شدت آن تقریباً یکسان است.
SELF XSS
Self-XSS شکلی غیر مضر از XSS است که در آن می توانید XSS را تزریق کنید اما فقط به صفحه ای که می توانید مشاهده کنید ، یعنی فقط JavaScript را می توانید در متن مرورگر خود اجرا کنید. این نوع XSS شاخص عملکرد بد توسعه است ، اما به خودی خود قابل استفاده نیست. در برخی موارد ، ما می توانیم self-XSS را با آسیب پذیری دیگری مانند CSRF به زنجیره درآوریم و آن را قابل بهره برداری کنیم ، اما این برای پست وبلاگ دیگری است.
زمینه همه چیز است | Context is Everything
هنگامی که شروع به بررسی تعداد متن های مختلفی می کنید که ورودی کاربر به آنها تزریق می شود ، مشخص می شود که تشخیص آسیب پذیری های XSS به صورت خودکار دشوار است. بیایید نگاهی بیندازیم به چند زمینه مختلف که ممکن است با آنها روبرو شوید.
INSIDE NORMAL HTML TAGS
DOUBLE QUOTED HTML TAG ATTRIBUTES
SINGLE QUOTED HTML TAG ATTRIBUTES
UNQUOTED HTML TAG ATTRIBUTES
HTML COMMENTS
HTML EVENT HANDLERS
URLS
لیست فوق جامع نیست ، زمینه های بسیاری وجود دارد که در تلاش برای کشف آسیب پذیری های XSS با آنها روبرو خواهید شد. مهمترین چیز این است که شما از زمینه ای که به آن تزریق می کنید آگاه باشید و ایده ای در مورد چگونگی فرار یا سو استفاده از آن زمینه برای دستیابی به XSS دارید.
ادامه دارد ...
Cross-Site Scripting (XSS) رایج ترین آسیب پذیری کشف شده در برنامه های وب است. وقتی مهاجم قادر به اجرای JavaScript سمت مشتری است در مرورگر کاربر دیگر رخ می دهد. XSS به دلایلی یک کلاس اشکال بسیار جالب و پویاست.شدت آن بسته به نوع کاربرد و زمینه می تواند در هر نقطه ای آموزنده تا حیاتی باشد ، در بعضی از زمینه ها می تواند منجر به اجرای دستور از راه دور شود ، با توجه به ماهیت پویای کلاس اشکال ، جلوگیری از ایجاد آن از نقطه نظر توسعه دشوار است ، آسیب پذیری های پیچیده تر XSS بیشتر با استفاده از ابزارهای خودکار مورد نفوذ قرار میگیرند ، به دست آوردن XSS در یک برنامه آسیب پذیر ممکن است به مهاجم توانایی این را بدهد که :
کوکی را بدزدید و به آنها امکان کنترل کامل جلسه کاربر را بدهید
خط مشی همان منبع (SOP) را دور بزنید ، به آنها اجازه می دهد کارهای حساس را انجام دهند ، مثل اینکه کاربر قربانی ثبت شده باشند
برای مثال در اطلاعات قابل مشاهده توسط کاربر قربانی میتوانید نفوذ کنید
در بدترین سناریو ، این آسیب پذیری ممکن است به عنوان کرم زنجیر زده شود تا کاربران را تحت تأثیر قرار دهد.
علت اصلی آسیب پذیری های XSS
XSS هنگامی رخ می دهد که وقتی ورودی کاربر به درستی بازگردانده نشود (فیلتر غیر صحیح) ، به شما اجازه می دهد JavaScript سمت کلاینت تزریق شود ، به گونه ای که اجازه اجرای آن را می دهد.
مثال اساسی
برای درک کامل معنی همه اینها ، بیایید نگاهی به یک مثال اساسی بیندازیم. در زیر کد HTML و PHP برای یک برنامه بسیار اساسی (و آسیب پذیر) آورده شده است.
کد:
<html> <head><title>MyApp</title></head> <body> Welcome to MyApp, <?php echo $_GET['name']; ?> </body> </html>
این مقدار را دریافت خواهید کرد :
شما می توانید "hakluke" را به هر آنچه در URL بخواهید تغییر دهید و دوباره در برنامه منعکس شود. و وقتی می گویم "هر آنچه می خواهید" معنای واقعی کلمه هر چیزی است. به عنوان مثال ، اگر می خواهیم متن را پررنگ کنیم ، می توانیم استفاده کنیم
بطور مثال :
کد:
http://localhost:8000/?name=%3Cb%3Ehakluke%3C/b%3E
یک کد ساده html خطرناک نیست تا زمانی که در جایی لود شود که ممنوع است و برنامه نویس بطور صحیح آن را فیلتر نکرده باشد؟ بیایید سعی کنیم یک تصویر را جاسازی کنیم:
کد:
http://localhost:8000/?name=%3Cimg%20src=%22https://www.bugcrowd.com/wp-content/uploads/2019/04/bugcrowd-logo.svg%22%3E
در حال حاضر ، شما ممکن است مشکل را ببینید. متنی که در قسمت نام وارد شده است ، به جای چاپ به عنوان متن عادی ، به عنوان HTML معتبر تفسیر می شود.
اگر از خود می پرسید که چرا٪ نمادها و اعداد در URL وجود دارد ، این فقط کدگذاری URL است. به ما امکان می دهد بدون شکستن URL ، هر کاراکتر را در یک URL قرار دهیم. یک مثال متداول٪ 20 است که به یک شخصیت فضایی ترجمه می شود. بدیهی است که فضای موجود در URL ها ایده آل نخواهد بود زیرا این URL را به دو کلمه تقسیم می کند ، در عوض از "٪ 20" استفاده می کنیم. به راحتی می توانید رشته های رمزگذاری شده URL را با استفاده از ابزاری آنلاین مانند این مورد رمزگذاری یا رمزگشایی کنید.
توانایی تزریق جاوا اسکریپت در اینجا همان چیزی است که آن را به جای تزریق خسته کننده HTML قدیمی ، به یک آسیب پذیری XSS تبدیل می کند.
انواع XSS
XSS اشکال مختلفی دارد ، اما می توانیم همه آنها را به چند دسته تقسیم کنیم.
REFLECTED XSS
XSS منعکس شده هنگامی رخ می دهد که جاوا اسکریپت به یک درخواست تزریق می شود ، و مستقیماً در پاسخ منعکس و اجرا می شود.
XSS پایدار / ذخیره شده | PERSISTENT/STORED XSS
"مداوم" یا "ذخیره شده" XSS هنگامی رخ می دهد که JavaScript تزریق شده مانند یک پایگاه داده در جایی ذخیره شود. پس از تنظیم میزان بارگیری ، بارگیری در صفحه ای آسیب پذیر منعکس خواهد شد ، خواه درخواست حاوی محموله باشد یا نه.
DOM XSS
DOM XSS زمانی اتفاق می افتد که تزریق توسط JavaScript سمت مشتری منعکس شود. علت آن با سایر انواع XSS کمی متفاوت است ، اما میزان بهره برداری و شدت آن تقریباً یکسان است.
SELF XSS
Self-XSS شکلی غیر مضر از XSS است که در آن می توانید XSS را تزریق کنید اما فقط به صفحه ای که می توانید مشاهده کنید ، یعنی فقط JavaScript را می توانید در متن مرورگر خود اجرا کنید. این نوع XSS شاخص عملکرد بد توسعه است ، اما به خودی خود قابل استفاده نیست. در برخی موارد ، ما می توانیم self-XSS را با آسیب پذیری دیگری مانند CSRF به زنجیره درآوریم و آن را قابل بهره برداری کنیم ، اما این برای پست وبلاگ دیگری است.
زمینه همه چیز است | Context is Everything
هنگامی که شروع به بررسی تعداد متن های مختلفی می کنید که ورودی کاربر به آنها تزریق می شود ، مشخص می شود که تشخیص آسیب پذیری های XSS به صورت خودکار دشوار است. بیایید نگاهی بیندازیم به چند زمینه مختلف که ممکن است با آنها روبرو شوید.
INSIDE NORMAL HTML TAGS
کد:
<p>{{injection}}</p>
کد:
<input type="text" value="{{injection}}">
کد:
<input type="text" value='{{injection}}'>
کد:
<input type="text" value={{injection}}>
کد:
<!-- {{injection}} -->
کد:
<img src=x onerror="{{injection}}">
کد:
<a href="{{injection}}">click me</a>
ادامه دارد ...
نظر