Sunday, Mar 10, 2024 at 4:22 PM

Fingerprint Web Application Framework (fa-IR)

انگشت نگاری چارچوب برنامه وب (فارسی)

شناسه
WSTG-INFO-08

خلاصه

هیچ چیز جدیدی در زیر نور خورشید وجود ندارد و تقریباً هر برنامه وب که ممکن است به توسعه آن فکر کنید قبلاً توسعه یافته است. با وجود تعداد زیادی از پروژه های نرم افزاری رایگان و متن باز که به طور فعال در سرتاسر جهان توسعه یافته و مستقر شده اند، به احتمال زیاد یک آزمایش امنیتی برنامه با هدفی مواجه خواهد شد که به طور کامل یا تا حدی به این برنامه ها یا چارچوب (فریمورک) های شناخته شده (مثلاً WordPress، phpBB، Mediawiki و غیره) وابسته است. دانستن اجزای برنامه وب که در حال آزمایش هستند کمک قابل توجهی به فرآیند آزمایش می کند و همچنین تلاش مورد نیاز در طول آزمایش را به شدت کاهش می دهد. این برنامه های وب شناخته شده دارای هدرهای HTML، کوکی ها و ساختارهای دایرکتوری هستند که می توان آنها را برای شناسایی برنامه شمارش کرد. اکثر چارچوب های وب دارای چندین نشانگر (marker) در آن مکان ها هستند که به مهاجم یا آزمایش کننده کمک می کند تا آنها را تشخیص دهد. این اساساً کاری است که همه ابزارهای خودکار انجام می دهند، آنها به دنبال یک نشانگر از یک مکان از پیش تعریف شده می گردند و سپس آن را با پایگاه داده امضاهای شناخته شده مقایسه می کنند. برای دقت بهتر معمولا از چندین نشانگر استفاده می شود.

اهداف آزمایش

  • انگشت نگاری اجزای مورد استفاده توسط برنامه های وب.

چگونه آزمایش کنیم

آزمایش جعبه سیاه (Black-Box Testing)

چندین مکان متداول (رایج) وجود دارد که باید به منظور شناسایی چارچوب ها یا مؤلفه ها در نظر گرفته شود:

  • هدرهای HTTP
  • کوکی ها
  • کد منبع (سورس کد) HTML
  • فایل ها و پوشه های خاص
  • پسوند فایل
  • پیغام خطا

هدرهای HTTP ‫(HTTP Headers)

ابتدایی ترین شکل شناسایی یک چارچوب وب، نگاه کردن به فیلد X-Powered-By در هدر پاسخ HTTP ‫(HTTP response header) است. ابزارهای زیادی را می توان برای انگشت نگاری یک هدف استفاده کرد، ساده ترین آنها netcat است.

ا HTTP Request-Response زیر را در نظر بگیرید:

$ nc 127.0.0.1 80
HEAD / HTTP/1.0

HTTP/1.1 200 OK
Server: nginx/1.0.14
[...]
X-Powered-By: Mono

از فیلد X-Powered-By، می فهمیم که چارچوب برنامه وب احتمالاً Mono خواهد بود. با این حال، اگرچه این رویکرد ساده و سریع است، اما این روش در 100% موارد کار نمی کند. این امکان وجود دارد که به راحتی هدر X-Powered-By را با یک پیکربندی مناسب غیرفعال کنید. همچنین چندین تکنیک وجود دارد که به یک وب سایت اجازه می دهد هدرهای HTTP را مبهم کند (به یک مثال در بخش اصلاح مراجعه کنید). در مثال بالا همچنین می توانیم توجه داشته باشیم که نسخه خاصی از nginx برای ارائه محتوا استفاده می شود.

بنابراین در همان مثال، آزمایش کننده می تواند هدر X-Powered-By را از دست بدهد یا پاسخی مانند زیر دریافت کند:

HTTP/1.1 200 OK
Server: nginx/1.0.14
Date: Sat, 07 Sep 2013 08:19:15 GMT
Content-Type: text/html;charset=ISO-8859-1
Connection: close
Vary: Accept-Encoding
X-Powered-By: Blood, sweat and tears

گاهی اوقات هدرهای HTTP بیشتری وجود دارد که به یک چارچوب خاص اشاره می کنند. در مثال زیر، با توجه به اطلاعات درخواست HTTP، می توان مشاهده کرد که هدر X-Powered-By حاوی نسخه PHP است. با این حال، هدر X-Generator اشاره می کند که چارچوب استفاده شده در واقع Swiftlet است، که به آزمایش کننده نفوذ کمک می کند تا بردارهای حمله خود را گسترش دهد. هنگام انجام انگشت نگاری، هر هدر HTTP را برای وجود چنین نشتی به دقت بررسی کنید.

HTTP/1.1 200 OK
Server: nginx/1.4.1
Date: Sat, 07 Sep 2013 09:22:52 GMT
Content-Type: text/html
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/5.4.16-1~dotdeb.1
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
X-Generator: Swiftlet

کوکی ها (Cookies)

یکی دیگر از روش های مشابه و تا حدودی مطمئن تر برای تعیین چارچوب فعلی وب، کوکی های فریمورک خاص (framework-specific cookies) هستند.

درخواست HTTP زیر را در نظر بگیرید:

Cakephp HTTP Request\
شکل 1-4.1.8: Cakephp HTTP Request

کوکی CAKEPHP به طور خودکار تنظیم شده است، که اطلاعاتی در مورد چارچوب مورد استفاده ارائه می دهد. لیستی از نام های رایج کوکی ها در بخش کوکی ها ارائه شده است. هنوز محدودیت هایی در تکیه بر این مکانیسم شناسایی وجود دارد - امکان تغییر نام کوکی ها وجود دارد. به عنوان مثال، برای چارچوب CakePHP انتخاب شده، این کار را می توان از طریق پیکربندی زیر انجام داد (گزیده ای از core.php):

/**
* The name of CakePHP's session cookie.
*
* Note the guidelines for Session names states: "The session name references
* the session id in cookies and URLs. It should contain only alphanumeric
* characters."
* @link http://php.net/session_name
*/
Configure::write('Session.cookie', 'CAKEPHP');

با این حال، احتمال ایجاد این تغییرات نسبت به تغییرات هدر X-Powered-By کمتر است، بنابراین این رویکرد برای شناسایی را می توان به عنوان قابل اعتمادتر در نظر گرفت.

کد منبع HTML ‫(HTML Source Code)

این تکنیک بر اساس یافتن الگوهای خاصی در کد منبع صفحه HTML است. اغلب می توان اطلاعات زیادی پیدا کرد که به آزمایش کننده کمک می کند تا یک جزء خاص را تشخیص دهد. یکی از نشانگرهای رایج کامنت های HTML هستند که مستقیماً به افشای چارچوب منجر می شوند. اغلب مسیرهای خاص فریمورک (چارچوب) را می توان یافت، به عنوان مثال پیوند (لینک) هایی به پوشه های CSS یا JS مخصوص چارچوب. در نهایت، متغیرهای اسکریپت خاص نیز ممکن است به چارچوب خاصی اشاره کنند.

از اسکرین شات زیر به راحتی می توان چارچوب مورد استفاده و نسخه آن را با نشانگرهای ذکر شده یاد گرفت. کامنت ها، مسیرهای خاص و متغیرهای اسکریپت همگی می توانند به مهاجم کمک کنند تا به سرعت نمونه ای از چارچوب ZK را تعیین کند.

ZK Framework Sample\
شکل 2-4.1.8: نمونه منبع HTML چارچوب ZK

اغلب چنین اطلاعاتی در بخش <head> پاسخ های HTTP، در تگ <meta> ها یا در انتهای صفحه قرار می گیرند. با این وجود، کل پاسخ ها باید تجزیه و تحلیل شوند، زیرا می تواند برای اهداف دیگری مانند بازرسی سایر کامنت های مفید و زمینه های پنهان مفید باشد. گاهی اوقات، توسعه دهندگان وب اهمیت زیادی به مخفی کردن اطلاعات مربوط به فریمورک )چارچوب) ها یا اجزای مورد استفاده نمی دهند. هنوز هم ممکن است به چیزی شبیه به این در پایین صفحه برخورد کنید:

Banshee Bottom Page\
شکل 3-4.1.8: صفحه پایین Banshee

فایل ها و پوشه های خاص (Specific Files and Folders)

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

برای کشف آنها از تکنیکی به نام مرور اجباری (forced browsing) یا "dirbusting" استفاده می شود. Dirbusting عبارت است از وادار کردن یک هدف با نام پوشه ها و فایل های شناخته شده و نظارت بر پاسخ های HTTP برای شمارش محتوای سرور. از این اطلاعات می توان هم برای یافتن فایل های پیش فرض و حمله به آنها و هم برای انگشت نگاری برنامه وب استفاده کرد. Dirbusting را می توان به روش های مختلفی انجام داد، مثال زیر یک حمله موفقیت آمیز dirbusting علیه یک هدف مبتنی بر وردپرس را با کمک لیست تعریف شده و عملکرد مزاحم Burp Suite نشان می دهد.

Dirbusting with Burp\
شکل 4-4.1.8: Dirbusting با Burp

ما می توانیم ببینیم که برای برخی از پوشه های خاص وردپرس (به عنوان مثال، /wp-includes/ و /wp-admin/ و /wp-content/) پاسخهای HTTP به ترتیب 403 (ممنوع)، 302 (یافت، هدایت به wp-login.php) و 200 (OK) هستند. این نشان دهنده خوبی است که هدف از وردپرس پشتیبانی می کند. به همین ترتیب می توان پوشه های پلاگین برنامه های مختلف و نسخه های آنها را پاکسازی کرد. در تصویر زیر می توانید یک فایل CHANGELOG معمولی از یک پلاگین Drupal را مشاهده کنید که اطلاعاتی در مورد برنامه مورد استفاده ارائه می دهد و یک نسخه آسیب پذیر افزونه را فاش می کند.

Drupal Botcha Disclosure\
شکل 5-4.1.8: افشای Drupal Botcha

نکته: قبل از شروع پخش، ابتدا فایل robots.txt را بررسی کنید. گاهی اوقات پوشه های خاص برنامه و سایر اطلاعات حساس را می توان در آنجا یافت. نمونه ای از چنین فایل robots.txt در تصویر زیر ارائه شده است.

Robots Info Disclosure\
شکل 6-4.1.8: افشای اطلاعات ربات ها

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

پسوندهای فایل (File Extensions)

ا URL ها ممکن است شامل پسوندهای فایل باشند که می تواند به شناسایی پلتفرم یا فناوری وب نیز کمک کند.

به عنوان مثال، ویکی OWASP از PHP استفاده می کند:

https://wiki.owasp.org/index.php?title=Fingerprint_Web_Application_Framework&action=edit&section=4

در اینجا برخی از پسوندهای رایج فایل های وب و فناوری های مرتبط آورده شده است:

  • .php -- PHP
  • .aspx -- Microsoft ASP.NET
  • .jsp -- صفحات سرور جاوا

پیغام خطا(Error Messages)

همانطور که در تصویر زیر مشاهده می شود، مسیر فایل سیستم فهرست شده به استفاده از وردپرس (wp-content) اشاره دارد. همچنین آزمایش کنندگان باید بدانند که وردپرس مبتنی بر PHP است (functions.php).

WordPress Parse error\
شکل 7-4.1.8: خطای تجزیه وردپرس

شناسه های مشترک (Common Identifiers)

کوکی ها (Cookies)

چارچوب نام کوکی
Zope zope3
CakePHP cakephp
Kohana kohanasession
Laravel laravel_session
phpBB phpbb3_
WordPress wp-settings
1C-Bitrix BITRIX_
AMPcms AMP
Django CMS django
DotNetNuke DotNetNukeAnonymous
e107 e107_tz
EPiServer EPiTrace, EPiServer
Graffiti CMS graffitibot
Hotaru CMS hotaru_mobile
ImpressCMS ICMSession
Indico MAKACSESSION
InstantCMS InstantCMS[logdate]
Kentico CMS CMSPreferredCulture
MODx SN4[12symb]
TYPO3 fetypouser
Dynamicweb Dynamicweb
LEPTON lep[somenumericvalue]+sessionid
Wix Domain=.wix.com
VIVVO VivvoSessionId

کد منبع HTML ‫(HTML Source Code)

برنامه کلمه کلیدی
WordPress <meta name="generator" content="WordPress 3.9.2" />
phpBB <body id="phpbb"
Mediawiki <meta name="generator" content="MediaWiki 1.21.9" />
Joomla <meta name="generator" content="Joomla! - Open Source Content Management" />
Drupal <meta name="Generator" content="Drupal 7 (http://drupal.org)" />
DotNetNuke DNN Platform - [http://www.dnnsoftware.com](http://www.dnnsoftware.com)

نشانگرهای عمومی (General Markers)

  • %framework_name%
  • powered by
  • built upon
  • running

نشانگرهای خاص (Specific Markers)

چارچوب کلمه کلیدی
Adobe ColdFusion <!-- START headerTags.cfm
Microsoft ASP.NET __VIEWSTATE
ZK <!-- ZK
Business Catalyst <!-- BC_OBNW -->
Indexhibit ndxz-studio

اصلاح

در حالی که می توان تلاش هایی برای استفاده از نام های مختلف کوکی ها (از طریق تغییر تنظیمات)، مخفی کردن یا تغییر مسیرهای فایل/دایرکتوری (از طریق بازنویسی یا تغییر کد منبع)، حذف هدرهای شناخته شده و غیره انجام داد. صاحبان/مدیران سیستم باید بدانند که این تلاش ها فقط باعث کاهش ابتدایی ترین دشمنان می شود. زمان/تلاش ممکن است برای آگاهی ذینفعان و فعالیت های تعمیر و نگهداری راه حل بهتر استفاده شود.

ابزارها

لیستی از ابزارهای عمومی و شناخته شده در زیر ارائه شده است. همچنین بسیاری از ابزارهای کاربردی دیگر و همچنین ابزارهای انگشت نگاری مبتنی بر چارچوب وجود دارد.

WhatWeb

وب سایت: https://github.com/urbanadventurer/WhatWeb

در حال حاضر یکی از بهترین ابزارهای انگشت نگاری موجود در بازار است. در یک ساخت پیش فرض کالی لینوکس (Kali Linux) گنجانده شده است. زبان: روبی (Ruby) مچ شده برای انگشت نگاری با:

  • رشته های متنی (حساس به حروف کوچک و بزرگ)
  • عبارات با قاعده
  • پرس و جو های پایگاه داده گوگل هک (مجموعه محدودی از کلمات کلیدی)
  • هش های MD5
  • تشخیص URL
  • الگوهای تگ HTML
  • کد ruby سفارشی برای عملیات غیرفعال و تهاجمی
  • خروجی نمونه در تصویر زیر ارائه شده است:

Whatweb Output sample\
شکل 8-4.1.8: نمونه خروجی Whatweb

Wappalyzer

وب سایت: https://www.wappalyzer.com/

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

نمونه خروجی یک افزونه در تصویر زیر ارائه شده است.

Wappalyzer Output for OWASP Website\
شکل 9-4.1.8: خروجی Wappalyzer برای وب سایت OWASP

منابع

کاغذهای سفید (Whitepapers)


You'll only receive email when they publish something new.

More from انسانیت
All posts