برنامه نویسی ۷۲۲ بازدید

آسیب‌پذیری‌های برنامه‌های تحت وب یکی از مهم‌ترین نقاطی است که در مورد تست‌های نفوذ یا ارزیابی امنیتی مورد ملاحظه قرار دهید. با این که در برخی از زمینه‌های امنیتی نیازمند یک شبکه یا رایانه خانگی برای تست هستید؛ اما ایجاد یک وب‌سایت تست برای یادگیری امنیت برنامه‌های وب نیازمند رویکردی کاملاً متفاوت است. برای داشتن یک محیط امن برای یادگیری روش هک برنامه‌های وب، می‌توانید از OWASP Juice Shop استفاده کنید.

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

OWASP Juice Shop یک اپلیکیشن وب عمداً آسیب‌پذیر است که برای آموزش مسائل امنیتی به زبان جاوا اسکریپت نوشته شده است. این اپلیکیشن پر از چالش‌های هک با سطوح دشواری مختلف است که برای بهره‌برداری کاربر آماده شده است و هدف از آن ارائه روشی جذاب برای آغاز یادگیری امنیت برنامه‌های تحت وب بوده است.

سلب مسئولیت: توجه داشته باشید که این مقاله، صرفاً با اهداف آموزشی برای تامین حفاظت در برابر حمله‌های مختلف تهیه و انتشار یافته است و فرادرس در برابر هرگونه استفاده نادرست از این آموزش هیچ مسئولیتی را نمی‌پذیرد.

ارجاع به 10 پروژه برتر OWASP

10 پروژه برتر OWSAP یک سند است که از سوی پروژه باز امنیت برنامه‌های وب منتشر شده است. هدف از این سند فهرست‌بندی و بایگانی رایج‌ترین رخنه‌های امنیتی موجود در اپلیکیشن‌های وب است. این فهرست در نسخه 2017 خود به ترتیب زیر بوده است:

  • تزریق
  • اعتبار سنجی معیوب
  • افشای داده‌های حساس
  • نهادهای بیرونی XML (XXE)
  • کنترل دسترسی معیوب
  • پیکربندی نادرست امنیتی
  • اسکریپتینگ از طریق وب‌سایت (XSS)
  • deserialization نا امن
  • استفاده از اجزایی که آسیب‌پذیری‌های مشخص شده دارند
  • گزارش‌گیری و نظارت ناکافی

هر یک از این آسیب‌پذیری‌ها می‌توانند در همه انواع وب‌سایت‌های مختلف وجود داشته باشند و غالباً منجر به سوءاستفاده‌هایی از قبیل فیشینگ، انتقال غیرمجاز پایگاه داده، اسپم، توزیع بدافزار و دیگر موارد نقض حریم خصوصی و امنیت می‌شود. شما به عنوان یک توسعه‌دهنده وب باید این نوع حمله‌ها را شناسایی و درک کنید تا بتوانید از آن‌ها جلوگیری نمایید. اگر یک تست کننده نفوذ هستید، درک این دسته‌بندی‌های آسیب‌پذیری می‌تواند به بهبود مهارت‌های هک اپلیکیشن‌های وب کمک کند.

برای آغاز یادگیری این حمله‌ها می‌توانید کار خود را با نصب OWASP Juice Shop آغاز کنید که شامل همه آسیب‌پذیری‌های پروژه 10 آسیب‌پذیری مهم OWSAP است.

گام یکم: نصب داکر (Docker)

بر اساس اطلاعات وب‌سایت داکر، این نرم‌افزار «روشی برای اجرای برنامه‌ها در محفظه‌ای از نظر امنیتی مستقل به همراه همه وابستگی‌ها و کتابخانه‌ها ارائه می‌کند.» این بدان معنی است که ابزاری مانند OWASP Juice Shop که یک استک شبه سرور کاملاً مصنوعی است را می‌توان به سادگی بسته‌بندی و توزیع کرد.

با این که OWASP گزینه‌های معدودی همچون Node.js و واگرانت (Vagrant) برای نصب دارد؛ اما ساده‌ترین روش برای نصب بر وی لینوکس و مک‌اواس، استفاده از داکر است.

اگر در نصب داکر با مشکلی مواجه شدید یا سیستم‌عامل شما از داکر پشتیبانی نمی‌کند، Node.js نیز گزینه مناسبی محسوب می‌شود. دستورالعمل‌های نصب برای پلتفرم‌های دیگر نیز در مستندات Juice Shop ارائه شده‌اند.

داکر از ویندوز، مک‌اواس و لینوکس پشتیبانی می‌کند و گزینه‌های قابل دانلودی در صفحه نصب داکر ارائه شده است. دستورالعمل‌های نصب بر اساس پلتفرم فرق می‌کند؛ اما برای مثال راهنمای نصب داکر بر روی سیستم‌های مبتنی بر دبیان (Debian) مانند اوبونتو یا کالی را در ادامه ارائه کرده‌ایم.

برای آغاز نصب، ابتدا بسته‌های پیش‌نیاز که امکان استفاده apt-get از یک ریپازیتری بر روی HTTPS را فراهم می‌کنند، با اجرای دستور زیر در یک شبیه‌ساز ترمینال نصب کنید.

sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common

سپس کلید GPG داکر را اضافه کنید که امکان یکپارچه‌سازی بسته‌هایی که باید اعتبارسنجی شوند را فراهم می‌سازد.

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

اینک، می‌توانید ریپازیتری داکر را به سیستم خود اضافه کنید. اگر دستور زیر شکست بخورد می‌توانید از ویرایشگر متنی انتخابی خودتان برای ویرایش دستی فایل /etc/apt/sources.list نیز استفاده کنید. این فایل فهرست ریپازیتری بر روی سیستم‌هایی است که از نرم‌افزار مدیریت بسته APT بهره می‌گیرند. کافی است دستور زیر را که داخل گیومه قرار دارد به یک خط جدید فایل اضافه کنید و به جای «$(lsb_release -cs)» خروجی دستور lsb_release -cs را پس از اجرا روی سیستم جایگزین نمایید.

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"

وقتی ریپازیتری اضافه شد، می‌توانید داکر را به وسیله به‌روزرسانی ریپازیتری‌ها به‌روزرسانی کنید، سپس با استفاده از apt-get install می‌توانید این ابزار را نصب کنید. این کار از طریق اجرای دستور زیر قابل انجام است.

sudo apt-get update && sudo apt-get install docker-ce

اگر در حال استفاده از یک سیستم System-based هستید، می‌توانید سرویس داکر را با اجرای دستور زیرا آغاز کنید.

sudo systemctl start docker

گام دوم: نصب OWASP Juice Shop

زمانی که داکر نصب و اجرا شد، نخستین کاری که باید انجام دهیم این است که یک نسخه محلی از فایل‌های OWASP Juice Shop ایجاد کنیم. برای این کار دستور زیر را اجرا می‌کنیم.

docker pull bkimminich/juice-shop

سپس می‌توانیم Juice Shop را با اجرای دستور زیر و اتصال سرویس به پورت 3000 آغاز کنیم.

docker run --rm -p 3000:3000 bkimminich/juice-shop

زمانی که خط فرمان داکر عبارت «server listening on port 3000» را نمایش ‌دهد، سرویس آماده به کار خواهد بود.

root@navi ~# systemctl start docker
root@navi ~# docker pull bkimminich/juice-shop
Using default tag: latest
latest: Pulling from bkimminich/juice-shop
Digest: sha256: 056aa33f600adb143a1128e2ae42f4021f15d726347155ae4bdd37fba4e0c486
Status: Image is up to date for bkimminich/juice-shop:latest
root@navi ~# docker run --rm -p 3000:3000 bkimminich/juice-shop
> juice-shop@7.2.1 start /juice-shop
> node app
Server listening on port 3000

پس از اجرای دستور فوق، Juice Shop را می‌توانید مانند هر وب‌سایت دیگری بر روی مرورگر وب باز کنید. در لینوکس Shop در آدرس http://localhost:3000 قرار دارد. در مک‌اواس و ویندوز احتمالاً در آدرس http://192.168.99.100:3000 می‌توانید آن را بیابید.

اگر صفحه در مرورگر وب باز می‌شود و به درستی نمایش می‌یابد، نشان‌دهنده این است که Juice Shop آماده هک شدن است!

گام سوم: تحلیل HTML روی Juice Shop

یکی از ساده‌ترین روش‌های آغاز تحلیل یک اپلیکیشن وب، نگاه کردن به کد HTML یک صفحه وب است. برای این کار کافی است از کارکرد «View Page Source» مرورگر وب خود استفاده کنید که به طور معمول، در بخش «Developer Tools» یا بخشی با نام مشابه در منو قرار دارد.

HTML که اختصاری برای عبارت HyperText Markup Language است یک زبان برنامه‌نویسی به معنای متداول نیست، بلکه همان‌طور که نام آن نشان می‌دهد یک زبان نشانه‌گذاری است. برخلاف زبان‌های برنامه‌نویسی که رفتارهایی را به صورت پروسه‌ها و توالی دستورها تعریف می‌کنند، کد HTML ساده به طور عمده برای پوشش دیگر اجزای صفحه وب و تعیین محل قرارگیری آن‌ها در یک صفحه استفاده می‌شود. با این که HTML5 این کارکرد نسبتاً محدود را گسترش داده است و برخی قابلیت‌ها که به طور سنتی توسط جاوا اسکریپت و PHP ارائه می‌شوند را بر عهده گرفته است؛ ولی HTML همچنان به طور عمده برای تعیین ترکیب‌بندی صفحه‌های وب استفاده می‌شود.

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

یک نمونه از این نوع سرنخ‌ها در ادامه نشان داده شده است. با این که کد HTML خود هیچ گونه فرصت حمله فراهم نمی‌کند؛ اما فهرست فایل‌های جاوا اسکریپت که در صفحه و درون تگ «script» اشاره شده است، برخی کارکردهای پشت‌صحنه وب‌سایت را مشخص می‌کند که برخی از آن‌ها می‌توانند فضایی برای حمله ایجاد کنند.

با بررسی بیشتر کد ممکن است متوجه برخی صفحه‌های وب دیگر شویم که از این صفحه لینک شده‌اند. برخی از این صفحه‌ها در منوی هدر صفحه نمایش می‌یابد؛ اما برخی دیگر مانند صفحه «Score-board» در هدر نیست.

کشف لینکی مانند این می‌تواند منجر به درک بیشتر ساختار وب‌سایت شود، همچنین ممکن است داده‌هایی پیدا کنیم که می‌بایست خصوصی باشند.

گام چهارم: استفاده از سیستم Score Board

اگر لینکی که در گام قبلی کشف کردیم را دنبال کنید، به صفحه Score Board در Juice Shop می‌رسید. این اسکوربورد تنها یک صفحه استاتیک وب‌سایت نیست و زمانی که وظایف مختلف تکمیل می‌شوند، به‌روزرسانی می‌شود. در واقع تنها با کشف این صفحه، نخستین چالش حل شده است.

این صفحه به شما این واقعیت را گوشزد می‌کند که در حل یک چالش موفق بوده‌اید و همچنین متوجه می‌شوید که این هشدار در لاگ خط فرمان Juice Shop نیز وجود دارد.

> juice-shop@7.2.1 start /juice-shop
> node app
Server listening on port 3000
Solved challenge Score Board (Find the carefully hidden 'Score Board' page.)

زمانی که به اسکوربورد دسترسی یافتید می‌توانید برخی از اهداف این بخش را مشاهده کنید. در ستون سمت راست نیز می‌توانید ماوس خود را روی نشانگر وضعیت «unsolved» یعنی حل نشده ببرید تا توضیحات آن را ببینید و یا بر روی آیکونش کلیک کنید تا مستندات بیشتری را در مورد این چالش ببینید.

این همان قالبی است که در سراسر این فرایند حمله به Juice Shop استفاده شده است. چالش‌های مختلف بر اساس سطح دشواری تقسیم‌بندی می‌شوند و صفحه اسکوربورد راهنمای مناسبی برای تکمیل آن‌ها به ترتیبی منطقی ارائه می‌کند.

گام پنجم: استفاده از کنسول جاوا اسکریپت برای تحلیل سایت

روش دیگر برای آغاز درک ساختار و کارکرد سایت، استفاده از کنسول دولوپر مرورگر وب برای مشاهده اسکریپت‌هایی است که در حال اجرا هستند. دیباگر مرورگر وب نیز می‌تواند خطاهای بالقوه را به شما نشان دهد که برخی از آن‌ها می‌توانند وجود آسیب‌پذیری‌های امنیتی را ثابت کنند. همانند موردی که در ادامه نمایش یافته است، جاوا اسکریپت نیز در مواردی می‌تواند ما را در مسیر کشف اجزایی که قرار بوده است خصوصی باشند یاری کند. این اجزا می‌توانند چیزهایی مانند «Administration.html» در فایل جاوا اسکریپت «juice-shop.min.js.» باشند.

اگر این لینک را دنبال کنید به صفحه مدیریت «Administration» می‌رسید و بدین ترتیب در واقع چالش دوم را حل کرده‌اید!

توجه به جاوا اسکریپت درون Juice Shop با پیشروی در چالش‌ها و افزایش دشواری کار مفید خواهد بود. از این رو بهتر است که اجازه دهید کنسول دولوپر مرورگر وب باز بماند.

گام ششم: فراخوانی یک خطاب وب‌سایت

یک از اهداف اسکوربورد این است که خطایی را فراخوانی کنید که به طور صحیحی مدیریت نشده است. این نوع خطاها به طور کلی در نتیجه مدیریت ضعیف ورودی‌های غیر استاندارد رخ می‌دهند. با این که روش‌های مختلفی برای ایجاد این نوع خطاها درون Juice Shop وجود دارند؛ اما یک روش برای انجام این کار از طریق صفحه ورود (login) است.

ابتدا بر روی لینک Login در هدر وب‌سایت کلیک کنید. سپس با استفاده از این فرم وارد وب‌سایت شوید، اما به جای استفاده از نام کاربری، صرفاً یک آپستروف (‘) قرار دهید. در فیلد رمز عبور نیز می‌توانید هر چیزی که دوست دارید وارد کنید. زمانی که فرم تکمیل شد بر روی دکمه Login کلیک کنید.

خطایی خواهید دید که تقریباً به هیچ وجه خوانا نیست؛ اما درکی از ماهیت پشت پرده وب‌سایت ارائه می‌دهد. پس از این که این خطا نمایش یافت، چالش بعدی که به صورت «فراخوانی خطایی که به طور درستی مدیریت نشده است»، انجام یافته تلقی می‌شود و در اسکوربورد نمایش می‌یابد.

گام هفتم: استفاده از XSS ابتدایی

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

<script>alert("XSS")</script>

این اسکریپت کوتاه در صورتی که اجرا شود تنها یک کادر هشدار کوچک با متن «XSS» باز می‌کند. با این حال برخلاف صفحه ورود در این مورد به دنبال نوع دیگری از فرم هستیم. در این مورد به طور خاص بهتر است که به دنبال فرمی باشیم که یا به منظور بازگشت محتوایی به کاربر طراحی شده و یا فرمی که محتوایی را به طور مستقیم به وب‌سایت تحویل می‌دهد.

یک فرم ساده که می‌توانیم این حمله را بر روی آن تست کنیم، فرم جستجو است. کافی است رشته جاوا اسکریپت را در کادر متنی وارد کرده و دکمه search را بزنیم تا ببینیم چه اتفاقی رخ می‌دهد.

اگر این اسکریپت موفق باشد، کل دوره تکمیل می‌شود. بدین ترتیب مرحله نخست Juice Shop به پایان می‌رسد؛ اما همه چالش‌های دشوارتر نیز از فرمت مشابهی پیروی می‌کنند. OWSAP Juice Shop پلتفرم مناسبی برای یادگیری تست نفوذ به اپلیکیشن‌های وب است و هیچ ریسکی برای آسیب واقعی ندارد. تکمیل همه چالش‌ها به زمان نیاز دارد؛ اما می‌بایست همه تلاش خود را در این راه بگذارید تا به یک کارشناس امنیت برنامه‌های وب تبدیل بشوید.

اگر این نوشته مورد توجه شما قرار گرفته است، موارد زیر نیز احتمالاً برای شما جذاب خواهند بود:

==

بر اساس رای ۲ نفر
آیا این مطلب برای شما مفید بود؟
شما قبلا رای داده‌اید!
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.

«میثم لطفی» در رشته‌های ریاضیات کاربردی و مهندسی کامپیوتر به تحصیل پرداخته و شیفته فناوری است. وی در حال حاضر علاوه بر پیگیری علاقه‌مندی‌هایش در رشته‌های برنامه‌نویسی، کپی‌رایتینگ و محتوای چندرسانه‌ای، در زمینه نگارش مقالاتی با محوریت نرم‌افزار با مجله فرادرس همکاری دارد.

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد.

مشاهده بیشتر