سلسله آموزش های تست نفوذ 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>