در قسمت قبل فهمیدیم که Pentest با Exploit شروع نمیشود.
قبل از هر حملهای باید بدانیم:
چه چیزی داریم؟
چه چیزی در Scope است؟
و چه چیزهایی باید بررسی شوند؟
در این قسمت یک آزمایشگاه ساده میسازیم و اولین مرحله عملی تست نفوذ، یعنی Reconnaissance را انجام میدهیم.
۱. آزمایشگاه ما
برای تمرین از یک Web Application عمداً آسیبپذیر استفاده میکنیم.
معماری آزمایشگاه:
┌─────────────────────────┐
│ Pentest Machine │
│ │
│ Linux / Kali Linux │
│ Nmap │
│ Browser │
└────────────┬────────────┘
│
│ Local Lab
│
┌────────────▼────────────┐
│ Vulnerable Target │
│ │
│ OWASP Juice Shop │
└─────────────────────────┘
هدف این است که تمام آزمایشها روی سیستم خودمان انجام شوند.
۲. اجرای آزمایشگاه
اگر Docker روی سیستم نصب است، میتوانی Juice Shop را به شکل زیر اجرا کنی:
docker run --rm -p 3000:3000 bkimminich/juice-shop
بعد مرورگر را باز کن:
http://localhost:3000
اگر صفحه Juice Shop را مشاهده کردی، آزمایشگاه آماده است.
نکته مهم:
localhost در اینجا به معنی سیستم خودت است و هدف آزمایشگاهی محسوب میشود.
۳. اولین قانون Recon
Recon یعنی:
جمعآوری اطلاعات درباره هدف
اما یک Pentester حرفهای کورکورانه شروع به اسکن نمیکند.
ابتدا هدف را تعریف میکنیم.
در آزمایشگاه:
Target:
localhost
Port:
3000
Application:
Web Application
پس فعلاً Attack Surface ما بسیار کوچک است:
localhost
│
└── TCP/3000
│
└── Web Application
۴. Recon از نگاه یک Pentester
فرض کن هیچ اطلاعاتی درباره سرویس نداریم.
اولین سؤال:
«چه سرویسهایی روی این سیستم در دسترس هستند؟»
برای پاسخ میتوانیم از Nmap استفاده کنیم.
در محیط آزمایشگاهی:
nmap localhost
ممکن است خروجی چیزی شبیه این باشد:
PORT STATE SERVICE
3000/tcp open ppp
عدد دقیق یا نام سرویس نمایشدادهشده ممکن است بسته به سیستم متفاوت باشد.
۵. این خروجی چه چیزی به ما میگوید؟
یک فرد تازهکار ممکن است فقط بگوید:
«پورت 3000 باز است.»
اما ما باید آن را تحلیل کنیم.
3000/tcp
↓
OPEN
↓
TCP Service
↓
Potential Web Application
حالا چند سؤال داریم:
- چه برنامهای روی این پورت اجرا میشود؟
- چه فناوریهایی استفاده شده؟
- آیا HTTP است؟
- آیا HTTPS است؟
- چه Web Server یا Frameworkای پشت آن قرار دارد؟
اینجاست که Enumeration از Recon اولیه جدا میشود.
۶. تشخیص سرویس
میتوانیم از قابلیت Service Detection در Nmap استفاده کنیم:
nmap -sV -p 3000 localhost
گزینهها:
-sV
برای تلاش جهت شناسایی Version و نوع سرویس استفاده میشود.
و:
-p 3000
یعنی فقط پورت 3000 را بررسی کن.
این موضوع مهم است:
اسکن هدفمند بهتر از اجرای کورکورانه ابزارهاست.
۷. حالا Web را بررسی کنیم
مرورگر را باز کن:
http://localhost:3000
حالا قبل از اینکه دنبال آسیبپذیری بگردیم، صفحه را مشاهده کن.
به دنبال چه چیزهایی هستیم؟
Login
Register
Search
Products
Basket
Profile
API
Upload
Admin
اینها میتوانند بخشی از Attack Surface باشند.
۸. ساختن Attack Surface Map
به جای اینکه اطلاعات را در ذهن نگه داریم، آنها را ثبت میکنیم.
مثلاً:
JUICE SHOP
│
├── Authentication
│ ├── Login
│ └── Register
│
├── Product
│ ├── Search
│ └── Product Details
│
├── User
│ ├── Profile
│ └── Basket
│
└── API
└── Application Endpoints
این نقشه بعداً هنگام تست بسیار مهم میشود.
۹. Recon فقط با Nmap انجام نمیشود
این یک اشتباه رایج است.
Recon مجموعهای از روشهاست:
Recon
│
├── Network Information
├── DNS
├── Domains
├── Subdomains
├── Technologies
├── Web Pages
├── API Endpoints
├── Authentication Points
└── Application Behavior
ابزار فقط یکی از روشهای جمعآوری اطلاعات است.
۱۰. Passive و Active Recon
Recon را میتوانیم به دو مفهوم مهم تقسیم کنیم.
Passive Recon
بدون تعامل مستقیم یا با حداقل تعامل با هدف، اطلاعات جمع میکنیم.
مثلاً:
Public DNS Records
Search Engines
Public Documentation
Certificate Information
Publicly Available Metadata
هدف این است که بدون ایجاد ترافیک قابلتوجه روی Target اطلاعات به دست بیاوریم.
Active Recon
اینجا مستقیماً با Target تعامل داریم.
مثلاً:
Port Scanning
Service Detection
HTTP Requests
Directory Discovery
بنابراین:
Passive Recon
↓
اطلاعات عمومی
Active Recon
↓
تعامل مستقیم با Target
در محیط واقعی، تفاوت این دو از نظر Scope و Rules of Engagement اهمیت زیادی دارد.
۱۱. اشتباه خطرناک تازهکارها
فرض کن ابزار به تو میگوید:
80/tcp open
443/tcp open
8080/tcp open
نباید بلافاصله سراغ Exploit بروی.
فرآیند درست:
Open Port
↓
Identify Service
↓
Identify Technology
↓
Understand Function
↓
Find Potential Weakness
↓
Validate
این همان طرز فکری است که میخواهیم در طول این دوره ایجاد کنیم.
۱۲. یک تمرین واقعی
در آزمایشگاه خودت این دستور را اجرا کن:
nmap -sV -p 3000 localhost
سپس نتیجه را بررسی کن.
سه سؤال را جواب بده:
سؤال اول
چه پورتی باز است؟
سؤال دوم
Nmap چه سرویسی را شناسایی کرده؟
سؤال سوم
این سرویس چه نوع Attack Surfaceای در اختیار ما قرار میدهد؟
راهنمای ذهنی:
Port
↓
Service
↓
Application
↓
Functionality
↓
Potential Attack Surface
۱۳. تمرین دوم — مشاهده HTTP
حالا میتوانی از ابزار خط فرمان دیگری برای مشاهده پاسخ HTTP استفاده کنی:
curl -I http://localhost:3000
این دستور یک درخواست HTTP به برنامه آزمایشگاهی ارسال میکند و Headerهای پاسخ را نشان میدهد.
ممکن است اطلاعاتی مانند این مشاهده کنی:
HTTP/1.1 200 OK
Content-Type: text/html
...
اینجا دوباره سؤال میپرسیم:
چه اطلاعاتی از Response میتوانیم استخراج کنیم؟
این سؤال پایهای، بعدها در Web Pentesting بسیار مهم خواهد شد.
۱۴. Header یعنی چه؟
HTTP Headerها اطلاعاتی درباره Request و Response منتقل میکنند.
مثلاً:
Content-Type
Server
Set-Cookie
Location
Cache-Control
هرکدام میتواند سرنخی درباره رفتار برنامه به ما بدهد.
اما:
وجود یک Header خاص بهتنهایی به معنی وجود Vulnerability نیست.
ما باید اطلاعات را در Context خودش تحلیل کنیم.
۱۵. Recon Notebook
از همین قسمت یک عادت حرفهای بساز.
برای هر Target یک یادداشت داشته باش:
Target:
localhost
Open Ports:
3000/tcp
Detected Service:
Web Application
Technology:
[بعداً تکمیل میشود]
Endpoints:
[بعداً تکمیل میشود]
Authentication:
[بررسی نشده]
Potential Findings:
[هنوز بررسی نشده]
این فایل در پروژههای واقعی میتواند بسیار ارزشمند باشد.
۱۶. چیزی که امروز یاد گرفتیم
امروز هنوز هیچ Exploit پیچیدهای اجرا نکردیم.
اما چند مهارت مهم یاد گرفتیم:
Scope
↓
Target Identification
↓
Port Discovery
↓
Service Detection
↓
Web Enumeration
↓
Attack Surface Mapping
و مهمتر از همه:
قبل از حمله، هدف را بشناس.
چالش قسمت ۰۲
در آزمایشگاه خودت این مسیر را انجام بده:
1. Start Juice Shop
2. Verify:
http://localhost:3000
3. Run:
nmap localhost
4. Run:
nmap -sV -p 3000 localhost
5. Run:
curl -I http://localhost:3000
6. Open the application
7. Create an Attack Surface Map
سپس این سؤال را از خودت بپرس:
«اگر این برنامه را برای اولین بار ببینم، قبل از پیدا کردن آسیبپذیری چه اطلاعاتی باید درباره آن جمع کنم؟»
اگر جواب این سؤال را بتوانی دقیق بدهی، وارد مرحله بعد شدهای.

دیدگاه شما