سلسله آموزش های تست نفوذ Web Application - قسمت دوم: جمع آوری اطلاعات از هدف


در قسمت دوم از سلسله آموزش های تست نفوذ وب، به بیان نکات مهم در خصوص جمع آوری اطلاعات از هدف با تاکید بر موارد زیر پرداخته می شود:

  1. جمع آوری اطلاعات درباره هدف
  2. جمع آوری اطلاعات درباره زیرساخت
  3. شناسایی (Fingerprinting) فریمورک ها و اپلیکیشن ها
  4. شناسایی اپلیکیشن های سفارشی (Custom)
  5. سرشماری منابع
  6. افشای اطلاعات از طریق پیکربندی غلط
  7. گوگل هکینگ
  8. Shodan HQ

1. جمع آوری اطلاعات درباره هدف

جمع آوری اطلاعات، اولین مرحله در تمامی تست های نفوذ می باشد. در بیشتر موارد تست نفوذ، حالت جعبه سیاه (Black Box) درنظر گرفته می شود که بدین معنا است که پیمانکار تست نفوذ، بایستی بدون داشتن هیچ اطلاعات اضافی از هدف و نظیر یک هکر اقدام به بررسی نفوذپذیری هدف نماید. اما اساسا منظور از اطلاعات چیست؟ هرکدام از موارد زیر مصداقی از یک داده درباره هدف هستند:

  1. زیرساخت (وب سرور، CMS، پایگاه داده)
  2. منطق اپلیکیشن
  3. IPها، دامنه ها و زیردامنه ها
  4. میزبان های مجازی

در ادامه به مراحل اولیه جمع آوری اطلاعات درباره هدف می پردازیم.

Whois

جستجوی Whois یا Whois Lookup اولین گام در بررسی یک هدف است که اطلاعات مالکیتی هدف را افشا می کند. بدین منظور هم از ابزارهای آنلاین می توان استفاده نمود و هم از ابزارهای کامندلاین. پروتکل Whois غالبا در پورت TCP 43 مشاهده می شود.

ابزارهای آنلاین برای مشاهدهه اطلاعات Whois:

  1. Whois.domaintools.com
  2. Arin.net
  3. Ripe.net

ابزار کامندلاین (هم در ویندوز و هم درلینوکس): دستور whois؛ نحوه استفاده:

Whois <target_address>

نمونه از اطلاعات بدست آمده از whois lookup برای google.com:

rnpg-google-whois1

 

rnpg-google-whois2

اطلاعات مربوط به DNS

اطلاعات مربوط به DNS، از جمله اطلاعات بسیار مهمی هستند که در فاز جمع آوری اطلاعات بایستی آنها را یافت. DNS، ساختاری سلسله مراتبی دارد و پرس و جوها (یا همان Queryها)ی DNS، اطلاعاتی به نام Resource Recordها را فراهم می آورند که ساختار آن را در تصویر زیر مشاهده می کنید:

rnpg-dns-structure

اطلاعات مهم تر برای ما در این ساختار موارد زیر هستند:

  1. رکورد NS: Name Server یا سرور نام (مسئول پاسخ به کوئری های DNS) در یک Zone را نشان می دهد.
  2. رکورد A: یک نام میزبان (Hostname) را به IP نگاشت می کند. Zoneهایی که رکورد A دارند، Forward Zone نام دارند.
  3. رکورد PTR: مخفف Pointer، یک آدرس IP را به نام میزبان متناظر نگاشت می نماید. Zoneهای دارای رکوردهای PTR، Reverse Zone نامیده می شوند.
  4. رکورد CNAME: این رکورد یک نام alias (مستعار) میزبان را به یک رکورد A نگاشت می کند.
  5. رکورد MX: میزبانی را مشخص می کند که می تواند Email دریافت نماید. بعبارت دیگر Mail Serverهای یک دامنه را مشخص می نماید. یک میزبان می تواند چندین رکورد MX داشته باشد.

ابزاری که بوسیله آن می توان اطلاعات مزبور را بدست آورد (هم در ویندوز و هم در لینوکس)، NSLookup نام دارد.

برای یافتن رکورد A:

Nslookup <domain_name>

برای یافتن رکورد PTR یا اصطلاحا انجام reverse lookup:

Nslookup -type=PTR <Target_IP_Address>

برای مشاهده تمامی رکوردها:

Nslookup -querytype=ANY <domain_name>

یافتن ISP سرویس دهنده به هدف

ابتدا از NSLookup برای یافتن آدرس های IP مرتبط با هدف استفاده نموده و سپس با Whoislookup از طریق ابزارهایی که پیشتر گفته شد، ISP را بدست می آوریم. روش دیگر برای یافتن اطلاعات مذبور، استفاده از Netcraft است:

www.netcraft.com

نکته مهم آن است که همه اطلاعاتی که بدست می آیند توسط ابزارهایی که نمایش اطلاعات بصورت گرافیکی را پشتیبانی می کنند (مانند xmind) بایستی ثبت شوند. بعنوان نمونه در این مرحله، باید این اطلاعات را بصورت زیر داشته باشیم:

rnpg-xmind

2. جمع آوری اطلاعات درباره زیرساخت هدف

زیرساخت یک وب اپلیکیشن، آنچه که امکان فعالیت را به وب اپلیکیشن می دهد در بر می گیرد. وب سرور، از جمله ارکان این زیرساخت است که دو نمونه مهم دارد: IIS مایکروسافت و آپاچی. شناسایی وب سرور می تواند به شناسایی سیستم عامل زیرساخت سرور نیز کمک کند. یعنی IIS بر روی Windows Server اجرا می شود و آپاچی  بر روی لینوکس. شناسایی ای موارد در ترسیم مسیر و نقشه حمله بسیار مهم هستند.

بعنوان نمونه، IIS دارای مولفه هایی بنام ISAPI Extension است. از جمله این افزونه ها، URL Rewriter و IDS است؛ URL Rewriter، URLهای بدشکل و زشتی مثل news.php?id=12 را به URLهای کاربرپسندی مانند news/12.html یا مسیری مانند news/12 تبدیل می کنند. IDS نیز یک فایروال وب اپلیکیشنی است که می تواند وقوع حملات را تشخیص داده و از آنها جلوگیری نماید. اگر یک وب اپلیکیشن از وب سرور IIS بهره ببرد، ممکن است از این افزونه ها استفاده کرده باشد که در این صورت قواعد بازی به کلی تغییر می کند!

اما چگونه وب سرور را شناسایی کنیم؟ راحت ترین راه، بررسی پاسخی است که وب اپلیکیشن می فرستد:

rnpg-webserver-response

اما ممکن است پیکربندی اپلیکیشن به گونه ای باشد که این اطلاعات را برنگرداند یا در صورتی که برگرداند نیز اشاره ای به نسخه مورد استفاده و ... ندارد. برای یافتن این اطلاعات می توان از Netcraft استفاده نمود. بعنوان نمونه برای Microsoft.com داریم:

rnpg-msft-response

در مواردی، نظیر سامانه های داخلی که آنلاین نیستند، از ابزارهایی نظیر Netcraft نمی توان استفاده نمود. در این حالت باید به ابزارهایی نظیر netcat، httprint، whatweb و wappalyzer رجوع نمود. این ابزارها اطلاعاتی از قبیل نوع و سرور و نسخه آن، ماژول های نصب شده و ... را ارائه می دهند که در ادامه با بعضی از این ابزارها بیشتر آشنا خواهیم شد.

ابزار Netcat

مثال:

nc <Target_IP_Address> 80

دقت داشته باشید که پس از برقراری ارتباط nc با هدف باید دوبار کلید Enter را زد تا HEAD / HTTP/1.0 ارسال شود. نمونه ای از خروجی را در تصویر زیر مشاهده می نمایید:

rnpg-netcat-response1

rnpg-netcat-response2

rnpg-netcat-response3

علاوه براین، با بررسی کوکی ها و نام پارامتر نشانگر شناسه نشست نیز می توان اطلاعاتی را درباره سرور بدست آورد:

rnpg-sessionid-param-name

ابزار Whatweb

این ابزار بطور پیشفرض در کالی لینوکس نصب است و اطلاعات باارزشی از هدف ارائه می دهد. مثال و نحوه استفاده:

Whatweb -v <Target_Address>

rnpg-whatweb

افزونه Wappalyzer

یکی دیگر از ابزارها، که به شکل افزونه قابل نصب در کروم و فایرفاکس قابل دسترسی است، Wappalyzer نام دارد و با نصب آن در مرورگرها می توان اطلاعات زیرساختی وب اپلیکیشن و ماژول های نصب شده را بدست آورد.

شناسایی ماژول های وب سرور

همانگونه که پیشتر گفته شد، بر روی هر وب سرور ممکن است ماژول های متعددی نصب و فعالسازی شده باشد که اطلاع از آنها در طراحی مسیر حمله بسیار حائز اهمیت است. از جمله این ماژولها، URL Rewrite در سرورهای IIS و mod_rewrite یا htaccess در آپاچی به منظور بازنویسی URL است. بعنوان مثال، ادرس www.example.com/read_doc.php?id=100 می تواند تبدیل به www.example.com/read/buffer_overflow.html شود؛ اما اهمیت این ماژول در فرایند تست نفوذ در چیست؟ اینکه آدرس اول (پیش از بازنویسی) دارای پارامتر id=100 است که مستعد buffer overflow می باشد، که با بکارگیری مکانیزم بازنویسی URL این نقیصه در آدرس دوم (پس از بازنویسی) برطرف شده است. بطور کلی بررسی URL در حملات بررسی ورودی (Input Validation Attacks) بسیار حائز اهمیت خواهد بود.

سرشماری زیردامنه ها

سرشماری زیردامنه ها در اصل یافتن تمامی زیردامنه های یک نام دامنه (Domain Name) را شامل می شود. این فرایند سبب آشکار شدن پنل های مدیریتی بک اند و ... می شود و در کل، سطح حمله را تعریض می نماید. راه های متعددی  برای سرشماری زیردامنه ها وجود دارد که تعدادی از آنها عبارتند از:

  1. Netcraft
  2. Google
  3. Crawling/BruteForce
  4. Tools
  5. Zone Transfer

درباره Netcarft پیش از این توضیح دادیم و اینجا به نمایش نتایج بسنده می کنیم:

rnpg-netcraft2

rnpg-netcraft1

همچنین می توان از ابزارهای جستجوی گوگل نیز استفاده نمود. بعنوان نمونه:

site:.microsoft.com -inurl:www.

به معنای جستجو در Microsoft.com و حذف نتایج دارای www. می باشد. اما جمع آوری اطلاعات زیردامنه ها با استفاده از ابزارها را می توان توسط ابزارهای زیر انجام داد:

  1. Dnsrecon
  2. Subrute
  3. Fierce
  4. Nmap
  5. Dnsenum
  6. Knock
  7. Theharvester
  8. Recon-ng

اکثر این ابزارها می توانند با یک فایل لیست زیردامنه کار کنند و آن را برای جستجو در زیردامنه ها بکارگیرند. همچنین این ابزارها اکثرا قابلیت استفاده از موتورهای جستجو در یافتن زیردامنه ها را پشتیبانی می نمایند. مثال:

Dnsrecon -d Microsoft.com -g

نشان دهنده استفاده از گوگل برای یافتن زیردامنه های Microsoft.com است.

مثال زیر استفاده از Harvester برای یافتن اطلاعات مربوط به افراد در لینکدین را نشان می دهد (تا 20 نتیجه):

Theharvester -d rnpg.ir -b linkedin -l 200

مورد دیگر بررسی امکان استفاده از ZoneTransfer است. Zone Transfer که نتیجه پیکربندی غلط سرور DNS است، می تواند تمامی رکوردهای DNS درون یک Zone را به مهاجم بدهد که این رکوردها تمامی زیردامنه های یک دامنه را نیز شامل می شوند.

برای بررسی امکان انجام ZT در ویندوز:

Nslookup -type=NS <Target_Address>

بر روی سیستم های لینوکسی:

Dig @<NameServer_Address> axfr <Target_Address>

یافتن هاست های مجازی

هاست های مجازی یا هاست های همسایه هاست ها و سایر سایت هایی هستند که بر روی یک آدرس IP با آدرس IP سرور هدف ما قرار دارند. برای یافتن این آدرس ها (یا اصطلاحا Reverse Lookup) از ابزارهایی که پیشتر گفته شد می توان استفاده نمود. مثال:

Fierce -dns <Target_Address>

3. شناسایی فریمورک ها و اپلیکیشن ها

پس از شناسایی تمامی زیردامنه های هدف، مواردی که در ادامه ذکر می شود بر روی تمامی آنها لازم است اعمال شود.

  • بررسی و مشاهده وب پیج تمامی زیردامنه های یافته شده.
  • شناسایی Common Applicationها شامل فوروم ها (نظیر phpBB و vBulletin)، CMSها (نظیر جوملا و دروپال)، بلاگ های CRM (نظیر وردپرس)، اسکریپت های شبکه های اجتماعی و ... .
  • یافتن نسخه هریک از اپلیکیشن های یافته شده با مشاهده Headerها و ... . مثال(برای تشخیص جوملا):

rnpg-joomla-detection

یا مشاهده پایین صفحه ها برای تشخیص اپلیکیشن ها؛ مثال (برای تشخیص vBulletin):

rnpg-vbulletin-detection

  • مشاهده سورس کد صفحات وب. مثال:

  • یافتن افزونه های 3rd Party؛ برای هر فناوری این روال متفاوت است اما می توان با افزونه Wappalyzer که پیشتر معرفی شد این کار را انجام داد.

4. یافتن اپلیکیشن های Custom

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

  1. کاربرد این (اپلیکیشن) چیست؟
  2. اجازه ثبت نام کاربر را می دهد؟
  3. ادمین پنل دارد؟
  4. از کاربر ورودی می گیرد؟
  5. چه نوع ورودی؟
  6. آیا اجازه آپلود فایل می دهد؟
  7. از اسکریپتی خاص نظیر جاوااسکریپت بهره می برد؟

که پاسخ این سوالات را با مشاهده و بررسی صفحات وب هدف می توان یافت.

اولین گام پس از پاسخ به سوالات فوق، Crawl کردن هدف است. بدین منظور می توان از Burp proxy استفاده نمود که درباره آن در ماژول قبلی توضیح داده شد. Burp هم می تواند به صورت خودکار این فرایند را انجام دهد و هم به صورت دستی. برای انجام فرایند Crawling بصورت دستی بایستی در برگه Spider، آنرا فعال نمود. به منظور انجام این فرایند بصورت خودکار، ابتدا بایستی هدف را در برگه Target اضافه نمود و سپس اسپایدر را با راست کلیکی بر روی هدف و انتخاب Spider this host فعال کرد. نتایج این فرایند در برگه Site Map قابل مشاهده خواهند بود.

ترسیم نقشه عملکردی

برای ترسیم نقشه عملکردی می توانیم سوالات زیر را پاسخ دهیم:

  1. هدف وبسایت/وب اپ چیست؟ فروش؟ بلاگ؟
  2. هسته عملیات سایت حول محور چه چیزی است؟ فروش محصول؟ عضویت؟
  3. برای انجام عملیاتی خاص نیاز به عضویت دارد؟
  4. قسمت های اصلی وبسایت کدامند؟بلاگ ها؟ ناحیه تجارت الکترونیک؟
  • پاسخ به سوالات فوق می تواند در ترسیم نقشه ای نظیر نقشه زیر (با نام نمودار عملکرد) ما را کمک نماید:

rnpg-functional-graph

نگاشت محدوده حمله

محدوده حمله قسمت (هایی) از وب اپلیکیشن است که قرار است تمرکز عملیات امنیتی ما بر روی آنها باشد. بدین منظور، مراحل زیر بایستی انجام شوند:

rnpg-mapping-of-attack-surface

  • بررسی سمت کلاینت: بررسی داده واردشده توسط کاربر در سمت کلاینت، سرور یا هردو: آیا انجام می شود؟ فهم این موضوع در انجام XSS و SQLI می تواند کمک کند. بدین منظور بایستی کد منبع صفحه را برای انجام توابع خاص جاوااسکریپت پس از وارد کردن مقدار بررسی نمود که برای این کار افزونه firebug فایرفاکس یا inspect element کروم مناسب است.
  • بررسی تعاملات پایگاه داده: به منظور یافتن رخنه نفوذ برای اجرای SQLI.
  • بررسی نحوه آپلود و دانلود فایل: به منظور یافتن امکان انجام LFI یا RFI؛ مثال: URL به شکل زیر بطور بالقوه مستعد آسیب پذیری های مرتبط با File Inclusion  می باشد:

  • نمایش داده وارد شده توسط کاربر: امکان انجام حمله XSS.
  • وجود Redirection: ارجاع به آدرسی دیگر توسط صفحه اصلی بطور خودکار که با پیام 3xx (غالبا 301 یا 302) همراه است. در این مورد می توان به انجام حملات HTTP Response Splitting یا Header Manipulation اندیشید.
  • صفحات محافظت شده بوسیله لاگین و کنترل دسترسی: وجود ناحیه دسترسی حساس را نشان می دهند. دراین قسمت بایستی روش های عبور از احراز هویت مورد بررسی قرار گیرد.
  • پیامهای خطا: به منظور بررسی اطلاعات حاصل از خطاها، در این قسمت تعمدا به ایجاد خطا می پردازیم. مثلا یوزرنیم را اشتباه وارد می کنیم و بررسی می کنیم آیا خطای مختص به یوزرنیم مشاهده می شود یا نه؟
  • رسم نمودار: برای هر یک از زیر دامنه ها سطری در یک جدول با ستونهای موارد بالا تخصیص می دهیم:

rnpg-table

5. سرشماری منابع

یافتن فایل های مخفی

با استفاده از DirBuster می توان فایل های مخفی وب اپلیکیشن را یافت: پیکربندی ها، فایل های پشتیبان و ... . نتایج بدست آمده از DirBuster در کنار نتایج حاصل از اسپایدر Burp Proxy مهم هستند بدین صورت که نتایجی که در DirBuster داریم اما در Burp آنها را ندیده ایم احتمالا حاوی داده های مهم می باشند. همچنین فایل های دارای پسوند cgi و bak نیز اهمیت زیادی دارند چون به ترتیب سورس کد تفسیر شده و پشتیبان ها را شامل می شوند.

یافتن اکانت های کاربران

بدین منظور می توان از Burp Suite یا Patator استفاده نمود.

6. اطلاعات افشا شده از طریق پیکربندی غلط

موارد زیر نکات مهم در این زمینه را نشان میدهند:

  • یافتن Directory Listingها: بتوان به پوشه والد/فرزند یک پوشه و مسیر حرکت نمود.
  • یافتن لاگ ها: فایل های لاگ حاوی اطلاعات مهم هستند.
  • پیکربندی ها: مثلا configuration.php در جوملا که اطلاعات پیکربندی (گاها یوزرنیم و پسورد برای ارتباط با پایگاه داده) را در خود دارد. فایل های configuration.php.bak یا .old نیز می توانند اطلاعات مهمی در خود داشته باشند.
  • متدهای مجاز HTTP: بوسیله NC قابل استخراج است.

7. گوگل هکینگ

بوسیله ابزارهای گوگل، می توان موارد خاص را در سایت هدف بررسی نمود. مثلا با intitle می توانیم در ترکیب با site بدنبال عنوان خاصی در بین tagهای title یک وبسایت باشیم. یا مثلا filetype:”bak” or “inc” فایل های پشتیبان را در هدف می توانند برای ما بیابند. برای اطلاعات بیشتر به Google Hacking Database مراجعه کنید.

بطور کلی با گوگل هکینگ می توانیم موارد زیر را بیابیم:

  1. پیام های خطا
  2. اطلاعات و فایل های حساس
  3. آسیب پذیری های سرور یا اپلیکیشن
  4. صفحات حاوی پورتال لاگین

8. شودان

شودان یک موتور جستجوی کامپیوتر (نه الزاما وبسایت) و دستگاه متصل به اینترنت است که پروتکل های متعددی را پشتیبانی می کند و این امکان را می دهد که به دنبال دستگاه/کامپیوتر استفاده کننده از یک پروتکل خاص بگردیم. مثلا برای یافتن سرورهای آپاچی در ایتالیا می توانیم از کوئری زیر استفاده کنیم:

rnpg-shodan

نکته: برای استفاده از www.shodan.io نیاز به ساخت یک اکانت می باشد.

پی نوشت: حقوق برخی از تصاویر استفاده شده در متن متعلق به elearnsecurity می باشد.