تسلط بر زبان برنامه نویسی جاوا اسکریپت مهارتی ارزشمند برای علاقهمندان به دنیای «تست نفوذ» (Penetration Testing | Pen Test) است، زیرا این زبان بهطور گسترده در برنامههای کاربردی مُدِرن تحت وب استفاده میشود. با اتخاذ تاکتیکها و ترفندهای مهاجمان و به وسیله جاوا اسکریپت میتوان نقایص امنیتی را شناسایی کرد و اقدامات متقابل مناسب را برای کاهش خطرات پیشنهاد داد. این رویکرد از جاوا اسکریپت به عنوان «جاوا اسکریپت سیاه» شناخته میشود.
دقت داشته باشید این مقاله صرفاً با هدف آموزش تهیه و تنظیم شده است و مجله تم آف هیچگونه مسئولیتی درباره هرگونه استفاده غیرمجاز از آن ندارد. شرایط استفاده از مجله تم آف را میتوانید به صورت کامل در این لینک مطالعه کنید.
مقدمه جاوا اسکریپت سیاه
جاوا اسکریپت نوعی زبان برنامه نویسی محبوب در وب است که آن را به هدفی اصلی برای مجرمان سایبری تبدیل میکند. استفاده گسترده و اجرای آن در سمت دستگاه کاربر یا مشتری فرصتهایی را برای حملههای سایبری مختلف ایجاد میکند. با این حال، با دانش اولیه جاوا اسکریپت، میتوان آسیبپذیریهایی مانند «اسکریپتنویسی بین سایتی» (Cross-Site Scripting | XSS) و «جعل درخواست بینسایتی» (Cross-Site Request Forgery | CSRF) را کشف و از آنها برای بهبود امنیت پلتفرم مد نظر خود استفاده کرد.
دانستن مهارتهای جاوا اسکریپت سیاه به کاربران کمک میکند تا از برنامههای کاربردی خود بهتر محافظت کنند. در این مطلب از «مجله تم آف» این بار قصد داریم جاوا اسکریپت را از دیدگاه امنیت شبکه و اینترنت مورد بررسی قرار داده و فرصتها و تهدیدهای آن را در فضای دیجیتال بررسی کنیم.
چرا یادگیری جاوا اسکریپت لازم است؟
جاوا اسکریپت یکی انواع زبانهای برنامه نویسی قدرتمند و پرکاربرد محسوب میشود که در برنامه نویسی وب مدرن به ضرورتی غیرقابلانکار تبدیل شده است. جاوا اسکریپت به توسعهدهندگان اجازه میدهد تا محتوای تعاملی و پویا برای وبسایتها و برنامههای کاربردی وب ایجاد کنند. این زبان برنامه نویسی محبوب به عنوان نوعی زبان سمت کلاینت، مستقیماً در مرورگر وب کاربر اجرا میشود و صفحات وب را پاسخگوتر کرده و تجربه کلی کاربر را بهبود میبخشد.
با جاوا اسکریپت، توسعهدهندگان میتوانند عناصر «HTML» را دستکاری کرده، «مدل شیء سند» (DOM) را کنترل کنند و با سایر فناوریهای وب مانند «CSS» تعامل داشته باشند. این عناصر رابط کاربری غنی، اعتبار سنجی فرم و بهروزرسانی محتوای پویا را ارائه میدهند که همگی برای توسعه وب مدرن بسیار مهم هستند.
انعطافپذیری، سهولت استفاده و سازگاری جاوا اسکریپت با پلتفرمهای مختلف، آن را به ابزاری حیاتی برای توسعهدهندگان وب تبدیل کرده است. در واقع، طبق نظرسنجی توسعهدهندگان «Stack Overflow» در سال۱۴۰۰ (۲۰۲ میلادی)، جاوا اسکریپت برای دهمین سال متوالی محبوبترین زبان برنامه نویسی در بین توسعهدهندگان بوده است.
آیا متخصصان جاوا اسکریپت می توانند به هکرهای اخلاقی تبدیل شوند؟
توسعهدهندگان جاوا اسکریپت این فرصت منحصربهفرد را برای تبدیل شدن به «هکرهای اخلاقی» (Ethical hacker) یا «هکرهای کلاه سفید» (White Hat Hacker) دارند تا دانش خود از این زبان را با مهارتهای پیشرفته «امنیت سایبری» (Cybersecurity) ترکیب کنند. توسعهدهندگان با درک مفاهیم امنیتی، شناسایی حفرههای امنیتی و آسیبپذیریهای رایج و آشنایی با ابزارهای مرتبط، پروتکلهای شبکه و سیستمهای عامل، میتوانند به هکرهای اخلاقی تبدیل شوند. در کل زبان برنامه نویسی جاوا اسکریپت شامل فرصتها و تهدیدهای زیادی در دنیای هک و امنیت است.
نحوه عملکرد جاوا اسکریپت به چه صورت است؟
قبل از اینکه درباره جاوا اسکریپت سیاه توضیحاتی ارائه شود، آشنایی با نحوه کار این زبان در برنامههای کاربردی وب خالی از لطف نیست، برای این کار باید با ابزار کنسول توسعهدهنده مرورگر آشنا شد. این ابزار داخلی در مرورگرهای وب به کاربران امکان میدهد کدهای HTML ،CSS و جاوا اسکریپت در حال اجرا را در صفحات وب بررسی، عیبیابی و تجزیهوتحلیل کنند.
دسترسی به کنسول توسعهدهنده در مرورگر فرایندی آسان است که طبق دستورات زیر انجام میشود:
- برای مرورگر کروم: کلیدهای میانبر «Ctrl + Shift + J» در ویندوز و لینوکس یا کلیدهای میانبر «Cmd + Opt + J» در مک
- فایرفاکس: کلیدهای میانبر «Ctrl + Shift + K» در ویندوز و لینوکس یا کلیدهای میانبر «Cmd + Opt + K» در مک
- مرورگر سافاری: فعال کردن منوی «Develop» در تنظیمات و زدن کلیدهای «Cmd + Opt + C»
نکته: در همه مرورگرها کافی است مرورگر را باز و با کلیک راست، گزینه «Inspect» یا «Inspect Element» را انتخاب کنیم.
با کنسول توسعهدهنده، میتوان مشکلاتی را که ممکن است در کدهای جاوا اسکریپت ایجاد شود، شناسایی و دیباگ کرد. همچنین با استفاده از این ابزار میتوان نگاه دقیقتری به نحوه ساخت اپلیکیشنهای وب داشت و آسیبپذیریهای امنیتی احتمالی را شناسایی کرد؛ بنابراین یادگیری جاوا اسکریپت سیاه چه برای کاربران و توسعهدهندگان عادی جاوا اسکریپت و چه برای هکرهای اخلاقی مهارتی لازم و ضروری محسوب میشود.
کاربرد کنسول توسعه دهنده در مرورگر برای جاوا اسکریپت سیاه چیست؟
کنسول توسعهدهنده ابزار قدرتمندی است که تبها و پنلهای مختلفی را برای اهداف مختلف فراهم و آن را به ابزاری ضروری برای توسعهدهندگان وب و هکرهای اخلاقی تبدیل میکند.
در ادامه مهمترین بخشهای این ابزار کاربردی در مرورگر آورده شده است:
- «عناصر» (Elements یا Inspector): این تب به کاربر امکان میدهد HTML و CSS صفحه وب را بررسی و اصلاح کند. میتوان از آن برای بررسی ساختار صفحه و ایجاد تغییرات در کد به صورت فوری استفاده کرد.
- «کنسول» (Console): با این تب میتوان دستورات جاوا اسکریپت را اجرا و پیامهای خطا یا گزارشها را مشاهده کرد. همچنین میتوان از آن برای آزمایش کد جاوا اسکریپت و تعامل با عناصر صفحه وب نیز بهره برد.
- «منابع» (Sources یا Debugger): این تب برای اشکالزدایی کدهای جاوا اسکریپت ضروری است. میتوان از آن برای تعیین نقاط شکست، اجرای گامبهگام اشکالزدایی و رفع مشکلات کدها استفاده کرد.
- «شبکه» (Network): تب Network به کاربر اجازه میدهد تا درخواستهای شبکه را نظارت کرده و گلوگاههای عملکردی را تجزیهوتحلیل کند. میتوان از آن برای مشاهده ترافیک شبکه ایجاد شده به وسیله صفحه وب و بهینهسازی عملکرد آن استفاده کرد.
با کنسول توسعهدهنده، میتوان بینشی در مورد نحوه تعامل جاوا اسکریپت با سایر فناوریهای وب کسب کرد و میتوان اشکالزدایی و بهینهسازی برنامههای کاربردی وب یا جستجوی آسیبپذیریها را با آن آموخت. با استفاده از قابلیتهای کنسول توسعهدهنده، میتوان برنامههای تحت وب قویتری توسعه داد و امنیت آنها را در برابر تهدیدات سایبری حفظ کرد.
شناسایی آسیب پذیری ها در جاوا اسکریپت سیاه چگونه انجام می شود؟
شناسایی آسیبپذیریهای امنیتی در برنامههای کاربردی وب، گام مهمی در تضمین محافظت از آنها در برابر حملات مخرب محسوب میشود. یکی از راههای شناسایی این آسیبپذیریها، استفاده از ابزارهای آزمایش امنیتی مانند «Burp Suite» و «OWASP ZAP» است.
در این بخش از مطلب آموزش جاوا اسکریپت سیاه، تمرکز روی ابزار OWASP ZAP قرار دارد که نوعی اسکنر امنیتی برنامه وب اپن سورس محبوب به حساب میآید که به وسیله جامعه OWASP توسعهیافته و صفحه اصلی این برنامه به صورت زیر است:
OWASP ZAP به شناسایی مشکلات امنیتی بالقوه در برنامههای کاربردی وب کمک میکند و توصیههایی برای رفع مشکلات ارائه میدهد. برای شروع استفاده از OWASP ZAP، میتوان آن را از وبسایت رسمی دانلود [+] و مراحل زیر را دنبال کرد:
- اگر از «Kali Linux» استفاده میشود، ابتدا باید با استفاده از sudo apt update %% sudo apt upgrade
در ترمینال، مطمئن شد که OWASP ZAP به روز شده است.
- OWASP ZAP را باید از منوی برنامه یا با تایپ عبارت «Zaproxy» در ترمینال راهاندازی و تنظیمات لازم مانند URL هدف و تنظیمات پراکسی را پیکربندی کرد.
- هنگامی که OWASP ZAP پیکربندی شد، میتوان با اجرای اسکن و تجزیهوتحلیل نتایج، آسیبپذیریهای جاوا اسکریپت برنامه وب را شناسایی کرد.
زمانی که OWASP ZAP تنظیم و پیکربندی شد، میتوان با انتخاب دکمه «Attack» یا انتخاب گزینه «Spider» از منوی «Tools» اسکن را آغاز کرد. این کار فرآیند «کرال کردن یا خزش» (Crawl کردن) در برنامه وب برای یافتن هرگونه آسیبپذیری امنیتی احتمالی را آغاز میکند. این ویژگی برای شناسایی آسیبپذیریهایی مانند «اسکریپتنویسی بین سایتی» (Cross-Site Scripting | XSS) و جعل «درخواست بینسایتی» (Cross-Site Request Forgery |CSRF) حیاتی است که معمولاً به وسیله مهاجمان مورد سوءاستفاده قرار میگیرند. با انجام اسکنهایی مانند این، میتوان به طور بالقوه خطرات احتمالی را در برنامههای کاربردی وب شناسایی کرد و آنها را کاهش داد.
پس از پایان اسکن، OWASP ZAP فهرستی از آسیبپذیریهای کشف شده در تب «Alerts» را ایجاد میکند. هر هشدار، خلاصهای از نوع آسیبپذیری شناسایی شده، شدت آن و توضیح مختصری را ارائه میدهد. پرچمهای رنگی راه آسانی برای درک شدت آسیبپذیری هر نوع هشداری را ارائه میدهند. با کلیک بر روی هر هشدار، میتوان جزئیات بیشتری را مشاهده کرد و عمیقتر آسیبپذیری را مورد بررسی قرار داد. در زیر ما برای URL تستی هشدارهای زیر را دریافت کردهایم.
اگر کاربر بخواهد آسیبپذیریهای شناسایی شده را با جزئیات بیشتری بررسی کند، میتواند برگههای «درخواست» (Request) و «پاسخ» (Response) را بررسی کرده تا درخواستهای HTTP و پاسخهای مرتبط با هر آسیبپذیری را مشاهده کند.
این اطلاعات به کاربر کمک خواهد کرد مکان دقیق آسیبپذیری را در کد برنامه وب مربوطه پیدا کند. به این ترتیب، میتوان نحوه عملکرد آسیبپذیری را درک کرد و اقدامات مناسبی را برای رفع آن انجام داد. همچنین در پنل خروجی برای هر آسیبپذیری نیز اطلاعات کاملی ارائه خواهد شد.
با دنبال کردن مراحل ذکر شده در بالا، میتوان از OWASP ZAP برای شناسایی آسیبپذیریهای بالقوه جاوا اسکریپت سیاه در برنامههای وب استفاده کرد. این فرآیند اغلب شامل بررسی رویدادهای جالبی مانند درخواستهای «POST» و تجزیهوتحلیل کدها برای درک نحوه تعامل بخشهای مختلف برنامه با یکدیگر است. توجه به این نکته مهم است که OWASP ZAP تنها یکی از ابزارهای موجود برای کمک به شناسایی آسیبپذیریها در برنامههای وب به حساب میآید. ابزارهای متعدد دیگری نیز برای تست نفوذ موجود هستند که هر کدام نقاط قوت و ضعف خود را دارند.
بهره برداری از آسیبپذیری های امنیتی
در این بخش از آموزش جاوا اسکریپت سیاه، ۲ آسیبپذیری رایج در برنامههای کاربردی وب یعنی «Reflected XSS | Cross-Site Scripting» و «CSRF | Cross-Site Request Forgery» بررسی خواهند شد. برای نشان دادن فرآیند بهرهبرداری، از «Damn Vulnerable Web Application | DVWA» استفاده شده است که نوعی برنامه وب آسیبپذیر برای اهداف یادگیری طراحی شده به حساب میآید.
تفاوت اصلی بین Reflected XSS و CSRF این است که چگونه حمله انجام میشود و آیا کاربر قبلاً در برنامه وب احراز هویت شده است یا خیر. Reflected XSS نوعی «Payload» غیر پایدار است که به وسیله کد جاوا اسکریپت تزریق شده به مرورگر از طریق URL تحویل داده میشود و از آسیبپذیری برنامه وب در اجرای اسکریپتهای ارسال شده به وسیله کاربر سوء استفاده میکند. این روش نیازی به احراز هویت قربانی در برنامه تحت وب ندارد، البته اگر احراز هویت اتفاق بیوفتد، میتواند منجر به سوءاستفادههای سطح بالاتری هم بشود.
از سوی دیگر، CSRF معمولاً شامل Payload ناپایدار است که به وسیله فایل HTML ساخته شده با درخواستی جعلی به وسیله URL تحویل داده میشود. این آسیبپذیری کمتر رایج است. CSRF از اعتمادی که برنامه وب به مرورگر احراز هویت قربانی دارد سوء استفاده میکند تا امکان ارسال درخواست جعلی را به عنوان اقدامی قابلاعتماد فراهم کند. این سناریو برای حمله موفقیتآمیز به قربانی متکی خواهد بود که قبلاً این فرد قربانی در آن برنامه وب احراز هویت کرده است.
حمله XSS با جاوا اسکریپت سیاه
«Reflected Cross-Site Scripting (XSS)» نوعی آسیبپذیری به حساب میآید که از سال ١٣٦٨ (۱۹۹۰ میلادی) وجود داشته است و همچنان نوعی مشکل رایج امنیتی برنامههای وب محسوب میشود. همانطور که گفته شد، این آسیبپذیری زمانی اتفاق میافتد که مهاجم کد جاوا اسکریپت مخرب را به وبسایتی تزریق میکند و تاثیر آن کد در مرورگر کاربر منعکس میشود. این کار میتواند منجر به دسترسی غیرمجاز به دادههای حساس و سایر فعالیتهای مخرب شود.
حملات XSS زمانی اتفاق میافتند که یک برنامه وب به درستی ورودی کاربر را پاکسازی یا فیلتر نمیکند. این بدان معنی است که برنامه اجازه میدهد تا دستور script
یا %3script%3e
(URL رمزگذاری شده) را از ورودی کاربر در زمانی که انتظار نمیرود اجرا کند و آن را برای حمله XSS باز میگذارد. مهاجم میتواند از «Reflected XSS» برای سرقت دادههای حساس مانند اعتبارنامه ورود و اطلاعات کوکی جلسه استفاده کند. پس از به دست آوردن آن، فرد مهاجم میتواند از اطلاعات برای اهداف مخرب بهره ببرد.
در این بخش از آموزش جاوا اسکریپت سیاه، مراحل مربوط به آزمایش آسیبپذیری XSS، راهاندازی «سرور شنود» (Listen Server) و بهرهبرداری از آسیبپذیری با حملهای چند مرحلهای بررسی خواهد شد. این کار درک بهتری را از نحوه استفاده مهاجمان از آسیبپذیریهای XSS در برنامههای تحت وب به کاربران میدهد. این حمله در سه مرحله زیر انجام خواهد شد:
- آزمایش دستی برای آسیبپذیری
- راه اندازی برای حمله
- بهره برداری از XSS منعکس شده یا Reflected XSS
١. آزمایش دستی XSS
یکی از راههای تشخیص آسیبپذیری برنامه وب، آزمایش دستی آن است. روش دستی شامل استفاده از جاوا اسکریپت سیاه در فیلدهای ورودی یا فرم برای دیدن اینکه آیا میتواند دستورات را اجرا کند یا خیر خواهد بود. با این حال، بسیاری از تکنیکهای آزمایش دستی دیگر در دسترس هستند، از جمله آنهایی که در برگه تقلب «XSS Filter Evasion» به وسیله شرکت OWASP فهرست شده است. مراحل آزمایش دستی در ادامه خواهند آمد.
١. راه اندازی DVWA
مراحل راه اندازی DVWA برای آزمایش جاوا اسکریپت سیاه به صورت زیر است:
- دانلود DVWA از مخزن «GitHub» [+] یا استفاده از دستور sudo apt install dvwa
در ترمینال کالی لینوکس
- راهاندازی وب سرور میزبان
- دسترسی به برنامه به وسیله آدرس http://localhost/dvwa
در مرورگر
- ورود به سایت با اطلاعات کاربری از قبل موجود
- رفتن به بخش «Reflected XSS» از زیر دسته «XSS» در برنامه
٢. شناسایی آسیبپذیری جاوا اسکریپت سیاه
مرحله دوم در بهرهبرداری از Reflected XSS شناسایی آسیبپذیری است. این شامل مشاهده فیلدهای ورودی کاربر و بررسی کد منبع صفحه وب آسیبپذیر در کنسول توسعه دهنده خواهد بود. با انجام این کار، میتوان فیلدهای ورودی را پیدا کرد که امکان دارد مستعد حمله Reflected XSS باشند.
در مورد DVWA، میتوان فیلد ورودی را در بخش «Reflected XSS» در دسته «XSS» شناسایی کرد. هنگامی که فیلد ورودی پیدا شد، میتوان فرم را با نام کاربری خود پر کرد و دکمه «Submit» را زد تا پاسخ مورد انتظار نمایان شود. این عمل به کاربر اطمینان میدهد که فیلد ورودی آسیبپذیر را به درستی شناسایی کرده است.
٣. ساخت اسکریپت مخرب
در قدم سوم نوبت به ایجاد اسکریپتی با هدف انجام حمله XSS فرا میرسد. این کد جاوا اسکریپت سیاه که به عنوان Payload شناخته میشود باید به فیلد ورودی شناسایی شده از قبل تزریق شود. برای مثال اسکریپ زیر نوعی قطعه کد جاوا اسکریپت سیاه برای انجام حمله XSS است.
Example payload:
۴. بهره برداری از آسیبپذیری جاوا اسکریپت سیاه
در این مرحله باید اسکریپت ایجاد شده را در قسمت آسیبپذیر شناسایی شده مانند تصویر زیر وارد کرد:
هشدار مربوطه پس از اینکه اسکریپت در فیلد مربوطه وارد و ارسال شد، نمایش داده میشود و تایید خواهد شد که آسیبپذیری وجود دارد. تصویر زیر بیانگر این موضوع است.
مثال فوق نمونهای اساسی و ساده از شناسایی آسیبپذیری در فیلدهای ورودی و فرمها بود که میتوان با جاوا اسکریپت سیاه از آن سوء استفاده کرد. با این حال اجرای یک اعلامیه یا پاپآپ مانند مثال فوق چندان تهدید جدی به حساب نمیآید. در مرحله بعد، به شرح روش پیشرفتهتری از جاوا اسکریپت سیاه برای انجام حمله XSS پرداخته میشود که مجرمان سایبری از این روش برای آسیب زدن به وبسایتها استفاده میکنند.
٢. راه اندازی حمله XSS با جاوا اسکریپت سیاه
در این مرحله، روش حمله پیشرفتهتری ارائه میشود که برای انجام این کار به راهاندازی سرور شنود با استفاده از «نود جی اس» (Node.js) و «Express» نیاز است. این سرور دادههای ارسال شده به وسیله Payload ،XSS را که در مراحل بعد از آن استفاده میشود، ضبط میکند. این مرحله بررسی اجمالی و سریع عناصر اصلی سرور شنود را پوشش میدهد تا به خوانندگان این مطلب در درک نحوه گرفتن ورودی کاربر کمک کند.
١. نصب نود جی اس
قدم اول برای انجام حمله پیشرفتهتر با XSS، نصب «نود جی اس» (Node.Js) است. برای این کار باید برنامه رسمی آن را از سایت اصلی نود جی اس [+] دانلود کرد. همچنین بعد از نصب، برای اطمیان از درستی فرایند نصب باید دستور node -v
در ترمینال برای نشان دادن نسخه نصب شده آن وارد شود.
٢. ساخت پروژه نود جی اس
در این مرحله و پس از نصب نود جی اس باید یک پروژه نود جی اس ایجاد شود که برای انجام این کار لازم است مراحل زیر را دنبال کنیم:
- باز کردن ترمینال یا خط فرمان
- رفتن به دایرکتوری مد نظر پروژه
- اجرای دستور mkdir listening-server
برای ساخت پوشه پروژه
- رفتن به پوشه ساخته شده با دستور cd listening-server
- مقداردهی اولیه و راهاندازی پروژه Node.js جدید با تنظیمات پیشفرض با دستور npm init -y
نکته: مراحل ساخت پروژه در ویندوز و لینوکس فرایندی مشابه است.
٣. نصب Express
قدم بعدی در این حمله XSS با جاوا اسکریپت سیاه، نصب فریمورک Express با وارد کردن دستور زیر در ترمینال است.
npm install
۴. ساخت اسکریپت سرور
در این مرحله باید فایلی با پسوند js
ایجاد شود که در اینجا فایل نام برده، server.js
نام دارد. این فایل باید در دایرکتوری یا پوشه سرور شنود قرار بگیرد. فایل server.js
حاوی کدهای زیر است:
const express = require('express');
const app = express();
const port = 3000;
app.get('/log', (req, res) => {
const receivedData = req.query.data;
if (receivedData) {
console.log(`URL received: ${req.protocol}://${req.get('host')}${req.originalUrl}`);
console.log(`Data received: ${receivedData}`);
} else {
console.log('URL received, but data is undefined');
}
res.sendStatus(200);
});
app.listen(port, () => {
console.log(`Listening server running at http://localhost:${port}`);
});
کد بالا نوعی پروژه ساده Node.js است که با استفاده از برنامه Express نوعی سرور شنود راه اندازی میکند. سرور به درخواست GET
در پورت 3000
گوش میدهد و دادههای ارسال شده به وسیله پارامتر پرسوجو در URL را ضبط میکند. کد بالا ماژول express
برای ایجاد نمونه برنامه استفاده کرده و سپس شماره پورت را برای سرور تنظیم میکند تا با استفاده از دستور const port = 3000
به آن گوش دهد. هنگامی که سرور با استفاده از app.listen (port)
شروع به کار کرد، منتظر درخواستهای دریافتی میماند.
مسیر /log
برای گرفتن دادههای ارسال شده در پارامتر query
درخواست ورودی تنظیم شده است. اگر داده دریافت شود، همراه با URL کامل (با دادهها به عنوان پرسوجو) ثبت میشود. همچنین در کدهای بالا، تابع console.log()
برای چاپ این دادهها در کنسول استفاده خواهد شد. اگر هیچ دادهای پیدا نشد یا خطایی رخ داد، کنسول پیامی را ثبت میکند که دادهها تعریف نشدهاند. به طور کلی، کدهای فوق راهی ساده برای گوش دادن به درخواستهای دریافتی و گرفتن دادهها از آنها ارائه میدهد که برای آزمایش اثربخشی حملات XSS مفید است.
٥. اجرای سرور شنود
کد مرحله قبل را باید با دستور زیر در ترمینال اجرا کرد:
node server.js
خروجی دستور بالا به صورت زیر است:
در بخش بالا با موفقیت نوعی سرور گوش دادن با استفاده از Node.js و Express راهاندازی شد تا دادههای ارسال شده را به وسیله XSS payload
ضبط کند. اکنون که سرور در http://localhost:3000
راهاندازی و اجرا شده است، آماده دریافت و ثبت دادهها از Payload خواهد بود.
برای آزمایش اینکه آیا همهچیز به درستی کار میکند، میتوان XSS payload
را در صفحات آسیبپذیر اجرا و دادههای دریافتی را در گزارشهای سرور مشاهده کرد. کدهای بالا را میتوان به راحتی تغییر داد تا انواع دیگر اطلاعات مانند کوکیها، URLها و دادههای حساس دیگر را بسته به نیاز خود دریافت کنیم.
بهره برداری از XSS منعکس شده
در این مرحله، تکنیک پیشرفتهای برای بهرهبرداری از آسیبپذیری Reflected XSS بهمنظور جذب ورودی حساس کاربر، مانند اعتبارنامه ورود و ارسال آن به سروری استفاده خواهد شد که توسط مهاجم کنترل میشود. برای نشان دادن این تکنیک، یک بار دیگر از DVWA استفاده شده است.
١. مراجعه به بخش Reflected XSS
برای دستیابی به بخش گفته شده باید مراحل زیر را دنبال کرد:
- باز کردن DVWA در مرورگر وب با وارد کردن آدرس http://localhost/dvwa
در آن
- ورود به حساب کاربری از قبل ساخته شده یا ایجاد حساب کاربری جدید
- مراجعه به زیر بخش Reflected XSS در زیر بخش XSS
٢. ساخت Payload
در این بخش از آموزش جاوا اسکریپت سیاه برای بهرهبرداری از Reflected XSS باید Payload ساخته شود. این Payload باید بتواند ورودی کاربر را بگیرد و آن را به سروری ارسال کند که به تازگی راهاندازی شده است. پس از اجرا، این Payload قادر خواهد بود اطلاعات وارد شده به وسیله کاربر را در فیلدهای فرمی خاص بازیابی کرده و به سرور شنود ارسال کند. سپس میتوان از لاگ سرور به این دادهها دسترسی داشت. فایل Payload حاوی کدهای زیر است:
کد جاوا اسکریپت سیاه بالا شامل تابعی به نام sendData()
میشود که مسئول ارسال دادههای گرفته شده به سرور شنودی است که قبلاً تنظیم شده بود. علاوه بر این، در کد فوق، نوعی شنونده رویداد به دکمه Submit
اضافه شده است تا فرم ارسالی متوقف شده و ورودی کاربر را ضبط کند. Payload بالا دادهها را به سرور شنودی ارسال میکند که به صورت محلی روی پورت 3000
اجرا میشود.
٣: سوم استفاده از آسیبپذیری با جاوا اسکریپت سیاه
در این مرحله باید به بخش Reflected XSS در DVWA بازگشت و برای اطمینان از وجود آسیبپذیری، «سطح امنیتی» (Security Level) را روی سطح «پایین» (Low) در DVWA تنظیم کرد. سپس باید Payload در بخش What’s your name
شود.
حال باید روی دکمه Submit کلیک کنیم. URL موجود در نوار آدرس اکنون اسکریپت حاوی Payload به عنوان نوعی پارامتر پرس و جو خواهد بود. این آدرسی است که باید برای قربانی ارسال شود.
۴. تحویل Payload
اکنون URL با Payload دستکاری شده است. در گام بعدی تحویل آن به قربانی مورد نظر خواهد بود. این کار را میتوان به وسیله تکنیکهای مختلف مهندسی اجتماعی، مانند ارسال ایمیل فیشینگ یا به عنوانی پیامی در رسانههای اجتماعی و غیره انجام داد. پیام باید بهگونهای ساخته شود که قربانی وسوسه شود تا روی پیوند حاوی URL کلیک کند.
هنگامی که قربانی روی پیوند کلیک میکند، Payload جاوا اسکریپت سیاه اجرا میشود و به مهاجم این امکان را میدهد که ورودی کاربر را رهگیری و ضبط کرده و آن را به سرور مشخص شده ارسال کند.
٥. دسترسی به ورودی ضبط شده
پس از تحویل Payload به قربانی و اجرای آن، ورودی کاربر ضبط شده به سرور لاگ مورد نظر ارسال میشود. برای دسترسی به دادههای گرفته شده، باید گزارشهای موجود در سرور را بررسی کرد. دادهها به عنوان پارامتر پرسوجو به URL اضافه میشوند.
این حمله نشان میدهد که چگونه میتوان از آسیبپذیری Reflected XSS برای گرفتن ورودی حساس کاربر، مانند اعتبارنامه ورود و ارسال آن به سروری تحت کنترل مهاجم استفاده کرد. اگرچه این Payload خاص، مستقیماً کوکیهای جلسه را نمیگیرد، اما همچنان میتواند دادههای کاربر را به خطر بیندازد و منجر به دسترسی غیر مجاز شود.
حمله CSRF با جاوا اسکریپت سیاه
در دنیای امنیت، برنامههای کاربردی وب، «جعل درخواست بین سایتی» (Cross-Site Request Forgery) یا به اختصارCSRF، نوعی آسیبپذیری جدی است که میتواند به وسیله مهاجمان برای فریب کاربران برای انجام اقدامات ناخواسته در وبسایتها مورد سوء استفاده قرار گیرد. این نوع درخواست میتواند زمانی اتفاق بیفتد که کاربری قبلاً در سایت احراز هویت شده باشد و مهاجم از تکنیکهای مهندسی اجتماعی برای دستکاری اطلاعات هویتی کاربر برای انجام اقدامات بدون اطلاع او استفاده کند.
برای درک جزئیات CSRF، در این بخش از آموزش جاوا اسکریپت سیاه با راهاندازی DVWA روی دستگاه یا سرور محلی، نوعی حمله به DVWA انجام خواهد شد.
١. ورود به DVWA
قدم اول برای انجام این حمله جاوا اسکریپت سیاه ورود به برنامه DVWA است. فرایند ورود به برنامه مانند بالا خواهد بود با این تفاوت که این بار باید تب «DVWA Security» انتخاب شود و همچنین سطح امنیتی را روی «پایین» (Low) یا «متوسط» (Medium) تنظیم کرد. حال برای اعمال تغییرات باید روی دکمه «Submit» کلیک کنیم.
٢. دسترسی به فرم آسیب پذیر CSRF
قدم دوم، دسترسی به فرم آسیبپذیر CSRF است که در منوی سمت چپ، روی گزینه CSRF قرار دارد. برای این هدف باید صفحه را بررسی و فرمی را پیدا کرد که کاربران میتوانند رمز عبور خود را تغییر دهند.
نکته: با استفاده از گزینه «Test Credentials» میتوان مطمئن شد که نام کاربری و رمز عبور کار میکند.
٣. تجزیه و تحلیل فرم آسیب پذیر
برای تجزیه و تحلیل فرم آسیبپذیر، روی عنصر فرم (به عنوان مثال فیلد ورودی رمز عبور یا دکمه «Change») راست کلیک کرده و باید «Inspect» را از منو انتخاب کرد. با این کار ابزارهای توسعهدهنده مرورگر با کد HTML مربوطه که قبلاً برجسته شده بود باز میشود. حال تگ form
را باید در کد HTML پیدا کرد تا اطلاعات لازم مانند عملکرد فرم، متد و نام فیلدهای ورودی برای ایجاد سوء استفاده CSRF جمع آوری شوند.
بیایید نگاهی دقیقتر به قسمتهای مختلف فرم و معنای آنها بیندازیم که این قسمتها به صورت موارد زیر هستند:
- Form action: ویژگی action
در تگ form
نشانی اینترنتی را مشخص میکند که دادههای ارسالی را دریافت خواهد کرد. در مثالی که از آن استفاده شده، action
روی #
تنظیم شده است، به این معنی که دادهها به همان صفحه ارسال میشوند. با این حال، هنگام اجرای واقعی اکسپلویت، باید #
را با URL واقعی صفحه آسیبپذیر جایگزین کرد.
- «Form method»: ویژگی method
نحوه ارسال دادهها به سرور را تعیین میکند. در این حالت، method
بر روی GET
تنظیم میشود، به این معنی که دادهها بهعنوان پارامترهای پرسوجو به URL اضافه میشوند. با این حال، هنگام اجرای اکسپلویت، باید method
را به POST
تغییر داد. این تغییر مهم است، زیرا درخواستهای POST
دادهها را در بدنه درخواست ارسال میکنند که تشخیص سوءاستفاده در تاریخچه مرورگر، گزارشها و نشانکها را سختتر از درخواستهای GET
میکند.
- «Input Field Names»: اینها ویژگیهای نام، فیلدهای ورودی مختلف در فرم هستند. در مثالی که استفاده شده است، ۳ فیلد ورودی با نامهای « password_new
»، « password_conf
» و « Change
» وجود دارد. این نامها به زودی هنگام ایجاد CSRF Paylod استفاده خواهند شد.
برای ایجاد Paylod، باید به این نکته توجه داشت که متد را از GET
به POST
تغییر داد. این به پنهان کردن حمله کمک میکند، زیرا دادهها به جای URL در «بدنه» ( body
) درخواست ارسال میشوند.
۴. ساخت پیلود CSRF
در این قدم باید فایل Paylod ساخته و آماده شود. در زیر فایلی به نام exploit_csrf.html
وجود دارد که برای این هدف نوشته شده و حاوی کدهای زیر است:
CSRF Exploit
IP_Address
را با آدرس IP
یا دامنهای که DVWA در آن اجرا میشود باید جایگزین میکنیم. در این مثال، روی 127.0.0.1:420001
تنظیم شده است.
کد HTML بالا برای سوء استفاده از آسیبپذیری Cross-Site Request Forgery
طراحی شده است. این کد از فرمی با شناسه exploit-form
و تابع subject()
جاوا اسکریپت برای ارسال فرم به عنوان درخواست POST
استفاده میکند. فیلدهای فرم، کد گرفته شده از کنسول توسعه دهنده را تکرار میکنند و فرم با دادههای مورد نیاز از قبل پر شده است. عمل onload
تنظیم شده تا تابع submitForm()
را فراخوانی و اطمینان حاصل کند که فرم به طور خودکار بدون انتظار برای تعامل کاربر ارسال میشود.
۵. میزبانی CSRF Payload
برای میزبانی از CSRF Payload، از «Apache2»، وب سروری استفاده خواهد شد که از قبل روی کالی لینوکس نصب شده است. برای این کار باید ابتدا فایل HTML ساخته شده را در مکانی با مجوزهای مناسب ذخیره کرد. برای مثال در مسیر /var/www/html/exploit_csrf.html
در داخل کالی لینوکس میتوان این کار را انجام داد.
سپس باید ترمینال جدیدی را باز و دستورات زیر را برای راهاندازی وب سرور Apache2 در آن وارد کرد.
sudo systemctl start apache2
sudo systemctl enable apache2
حال برای تأیید اینکه وب سرور آپاچی در حال اجرا است یا نه، باید به http://localhost
در مرورگر وب خود سر زد. با این کار باید صفحه پیشفرض آپاچی را مشاهده کرد.
برای سوء استفاده از آسیبپذیری جعل درخواست متقابل (CSRF)، Payload باید روی وب سرور میزبانی شود. برای انجام این کار، پوشه ریشه وب (معمولاً در /var/www/html/
) را باید پیدا و فایل HTML Payload CSRF را ذخیره کرد (به عنوان مثال exploit_csrf.html
). برای انجام این کار به دسترسی روت یا ریشه در لینوکس نیاز است.
پس از ذخیره شدن فایل، با اجرای دستور sudo chmod 644 /var/www/html/exploit_csrf.html
مجوزهای مناسب را برای آن تنظیم خواهد شد. اکنون با باز کردن مرورگر وب رفتن به آدرس http://localhost/exploit_csrf.html
به Payload دسترسی پیدا خواهد شد. این URL را میتوان با قربانی (در همان شبکه) به اشتراک گذاشت یا برای اهداف آزمایشی استفاده کرد.
نکته: اگر خواسته شود برای مقاصد آزمایشی، Payload را برای کامپیوترهای خارج از شبکه محلی در دسترس قرار دهیم، میتوان آن را روی دستگاه راه دور میزبانی یا از ارسال پورت با آدرس IP عمومی خود استفاده کرد. از طرف دیگر، میتوان از نوعی سرویس «Dynamic DNS» بهره برد که برای ایجاد نام دامنه ثابت استفاده میشود که به آدرس IP پویا اشاره میکند.
۶. سوء استفاده از آسیبپذیری CSRF
در این قدم از آموزش جاوا اسکریپت سیاه با CSRF نوبت به مرحله سوء استفاده از CSRF است. برای این هدف میتوان با ایجاد یک صفحه HTML مخرب، نوعی «حمله جعل درخواست بین سایتی» (CSRF) را راهاندازی کرد. برای این منظور ابتدا باید هدف آسیبپذیر را پیدا کنیم. میتوان از DVWA برای تمرین استفاده کرد و در مرحله بعد، فرم HTML با Payload مخرب خود را ایجاد کنیم.
این Payload شامل URL هدف و پارامترهایی است که باید تغییر کنند. پس از ساخت فرم، باید URL را با قربانی به اشتراک گذاشت. هنگامی که قربانی URL را باز میکند، فرم به صورت خودکار ارسال میشود، حمله CSRF را آغاز میکند و رمز عبور قربانی را به مقدار «Hacked» در پلت فرم DVWA تغییر میدهد. با باز کردن منوی «Inspector» و مشاهده فعالیت شبکه میتوان این موضوع را تائید کرد.
حال اگر با همان روش «Test Credentials» رمز عبور را آزمایش کنیم، این بار کار نخواهد کرد.
نکته: جعل درخواست متقابل سایت (CSRF) نوعی حمله مخرب است که کاربران را فریب میدهد تا در حین احراز هویت، اقدامات ناخواستهای روی برنامههای وب را انجام دهند. پیامدهای چنین حملاتی میتواند شدید باشد، از تراکنشهای مالی غیرمجاز گرفته تا هک حساب و نشت دادهها را میتوان با این روش انجام داد.
برای محافظت، اجرای اقدامات امنیتی مناسب، مانند استفاده از «توکنهای ضد درخواست بین سایتی» (Anti-CSRF Tokens)، مدیریت صحیح جلسه و ویژگی «SameSite» برای کوکیها بسیار مهم است. انجام اقدامات احتیاطی لازم میتواند خطر قربانی شدن حمله CSRF را به میزان قابل توجهی کاهش دهد.
حمله Deadly Duo در جاوا اسکریپت سیاه
در دو بخش قبل حملات XSS و CSRF امتحان شدند. روش دیگری که در جاوا اسکریپت سیاه برای انجام حملات مخرب استفاده میشود، روشی است به نام «The Deadly Duo» است که از ترکیب دو روش حمله قبلی ساخته خواهد شد.
هنگامی که XSS و CSRF با هم ترکیب میشوند، حفرهای برای مهاجمان ایجاد میکنند تا اقدامات امنیتی برنامههای وب را دور بزنند و در حین انجام اقدامات غیرمجاز، دادههای حساس کاربر را سرقت کنند. این حمله بسیار نگران کننده است، زیرا CSRF از اعتماد کاربران به یک وبسایت برای اجرای اهداف مخرب خود سوء استفاده میکند، در حالی که XSS کد مضر را به وبسایت تزریق کرده تا حمله را اجرا کند.
ترکیب این دو حمله به ویژه زمانی قوی است که برنامه وب هدفمند از اقدامات ضد CSRF مانند کوکیهای SameSite استفاده میکند. همچنین میتواند در برابر کاربران با امتیاز بالا مانند مدیران یا مدیران اجرایی مؤثرتر باشد.
برای از بین بردن این حمله، باید به محیط تمرینی مانند «DVWA ،«WebGoat یا محیط دیگری دسترسی داشت. همچنین باید نوعی از یک آسیبپذیری XSS را در وبسایتی که هدف قرار شده است پیدا کرد که در بخشهای بالا در این آموزش جاوا اسکریپت سیاه به آن پرداخته شد. با ترکیب XSS و CSRF، مهاجمان میتوانند اقدامات ضد CSRF را دور بزنند، دادههای حساس کاربر را سرقت کنند و اقدامات غیرمجاز را انجام دهند. برای انجام این حمله باید مراحلی که در ادامه خواهند آمد را در پیش گرفت.
١. ساخت فایل HTML با CSRF Payload
برای این کار باید ویرایشگر متن را باز کرده و فایل جدیدی به نام xss_csrf.html
ایجاد کرد و کدهای زیر را در آن قرار دارد.
IP_Address
باید با URL واقعی DVWA یا محیط آزمایشی جایگزین شود.
٢. میزبانی فایل HTML در سرور
این مرحله شامل فرآیندی مشابه مراحلی است که قبلاً در گامهای روش CSRF طی شدند.
٣. تزریق XSS Payload به DVWA
حال در این مرحله باید به برگه Reflected XSS در DVWA بازگشت. همچنین باید کنسول توسعهدهنده برای این مرحله باز شود و روت تب یا بخش Network قرار بگیرد.
سپس میتوان با استفاده از نوعی iframe
درون خطی که مربوط به XSS Payload است، Payload را تزریق کرد:
.
آدرس IP_Address
را باید با آدرسی که در فایل xss_csrf.html
میزبانی شده است، جایگزین کرد.
وقتی روی دکمه «Submit» کلیک صورت گیرد، دو اتفاق رخ میدهد. در ابتدا، در تب «Network» کنسول توسعه دهنده، میتوان فایل HTML را با Payload CSRF در حال فراخوانی و اجرا در XSS مشاهده کرد. ثانیاً، URL صفحه اکنون حاوی اسکریپت تزریقی iframe
است که میتواند کپی شده و برای قربانی احتمالی ارسال شود.
۴. سوء استفاده از آسیب پذیری XSS به CSRF
در این مرحله از آموزش جاوا اسکریپت سیاه از آسیبپذیری XSS به CSRF برای دسترسی به حساب قربانی استفاده شده است. برای این هدف، URL با قربانی به اشتراک گذاشته خواهد شد که شامل iframe
درونخطی جاوا اسکریپت است. این iframe
نوعی فایل فرم HTML دستکاری شده را ارائه میدهد. برای تمرین، میتوان از جلسه DVWA خود به عنوان قربانی استفاده کرد.
هنگامی که URL باز شود، iframe
از فرم ساخته شده عبور میکند و به صورت خودکار ارسال میشود. همچنین iframe
حمله CSRF را آغاز میکند و رمز عبور قربانی را به pwned
در پلت فرم DVWA تغییر میدهد. سپس میتوان منوی Inspector را باز کرده و فعالیت شبکه را برای تائید حمله مشاهده کرد.
۵. تائید حمله
تائید حملات موفقیتآمیز میتواند مشکل باشد، اما چند روش ساده برای تائید آنها وجود دارد. برای مثال در مورد تائید حمله به رمزهای عبور، سادهترین روش این است که به صورت دورهای با اعتبارنامههای جدید اقدام به ورود به سیستم کرد. این کار به هکر کمک میکند تا تشخیص دهد که آیا حمله موفق بوده است یا خیر. باید به این نکته توجه داشت که تأیید حمله بسته به نوع حمله متفاوت است.
سخن پایانی
جاوا اسکریپت نقش کلیدی در هک اخلاقی و تست نفوذ برنامههای وب دارد. برای متخصصان امنیتی، داشتن درک کامل از جاوا اسکریپت مهم است، زیرا میتواند به آنها کمک کند آسیبپذیریهای رایج در برنامههای وب را شناسایی و از آنها برای بهبود امنیت خود استفاده کنند. با استفاده از پلتفرمهای آسیبپذیر مانند WebGoat و DVWA، هکرهای اخلاقی میتوانند با خیال راحت مهارتهای خود را تمرین و درباره امنیت برنامههای وب اطلاعات بیشتری را کسب کنند.
در این مطلب از مجله تم آف در رابطه با جاوا اسکریپت سیاه و ابعاد مختلف آن توضیحاتی کاربردی و عملی ارائه شد. همچنین انواع حملات و سناریوهای مختلف در رابطه با جاوا اسکریپت سیاه و تهدیدات و فرصتهای آن بیان شد.