סביבת עבודה מתקדמת¶
מבוא¶
בקורס הבסיסי עבדנו בעיקר עם אפליקציות פגיעות מוכנות. בקורס המתקדם נצטרך סביבת עבודה גמישה יותר - סביבה שמאפשרת לנו להקים מעבדות מותאמות, לדמות תרחישים מציאותיים, ולתרגל תקיפות מורכבות.
בשיעור זה נלמד להקים סביבת עבודה מלאה באמצעות Docker, נגדיר שירותים מרובים, ונכין את הכל לשימוש לאורך הקורס.
התקנת Docker¶
לינוקס (Ubuntu/Debian)¶
# עדכון והתקנה
sudo apt update
sudo apt install -y docker.io docker-compose-plugin
# הוספת המשתמש לקבוצת docker
sudo usermod -aG docker $USER
# הפעלה מחדש של הסשן (או logout ו-login)
newgrp docker
# בדיקה שהכל עובד
docker run hello-world
docker compose version
macOS¶
# התקנה באמצעות Homebrew
brew install --cask docker
# לאחר ההתקנה, פתחו את Docker Desktop מה-Applications
# בדיקה
docker run hello-world
אימות ההתקנה¶
יסודות Docker Compose לסביבות בדיקה¶
מבנה בסיסי של docker-compose.yml¶
קובץ Docker Compose מאפשר לנו להגדיר מספר שירותים (קונטיינרים) שעובדים יחד. זה חיוני עבור סביבות בדיקה מציאותיות שכוללות אפליקציית ווב, בסיס נתונים, ולפעמים גם Reverse Proxy.
# docker-compose.yml - מבנה בסיסי
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
depends_on:
- db
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: testdb
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
פקודות Docker Compose חיוניות¶
# הפעלת כל השירותים ברקע
docker compose up -d
# צפייה בלוגים
docker compose logs -f
# עצירת כל השירותים
docker compose down
# עצירה ומחיקת volumes (מחיקת נתונים)
docker compose down -v
# בנייה מחדש של images
docker compose build --no-cache
# כניסה לקונטיינר ספציפי
docker compose exec web bash
התקנת אפליקציות פגיעות¶
DVWA - הגדרה מתקדמת¶
DVWA (Damn Vulnerable Web Application) מוכרת מהקורס הבסיסי, אך הפעם נגדיר אותה ברמת אבטחה גבוהה יותר כדי לתרגל עקיפת הגנות.
# docker-compose-dvwa.yml
version: "3.8"
services:
dvwa:
image: vulnerables/web-dvwa
ports:
- "8081:80"
environment:
- RECAPTCHA_PRIV_KEY=
- RECAPTCHA_PUB_KEY=
- SECURITY_LEVEL=high
- PHPIDS_ENABLED=1
depends_on:
- dvwa-db
dvwa-db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: dvwa
MYSQL_DATABASE: dvwa
MYSQL_USER: dvwa
MYSQL_PASSWORD: dvwa
volumes:
- dvwa_data:/var/lib/mysql
volumes:
dvwa_data:
# הפעלה
docker compose -f docker-compose-dvwa.yml up -d
# גישה בדפדפן: http://localhost:8081
# שם משתמש: admin, סיסמה: password
# שנו את רמת האבטחה ל-High או Impossible לתרגול מתקדם
OWASP WebGoat¶
WebGoat הוא כלי לימודי מצוין עם שיעורים אינטראקטיביים בנושאי אבטחה מתקדמים.
# docker-compose-webgoat.yml
version: "3.8"
services:
webgoat:
image: webgoat/webgoat
ports:
- "8082:8080"
- "9090:9090"
environment:
- WEBGOAT_HOST=0.0.0.0
- WEBGOAT_PORT=8080
volumes:
- webgoat_data:/home/webgoat/.webgoat
volumes:
webgoat_data:
# הפעלה
docker compose -f docker-compose-webgoat.yml up -d
# גישה בדפדפן: http://localhost:8082/WebGoat
# הרשמה עם שם משתמש וסיסמה חדשים
OWASP Juice Shop¶
Juice Shop הוא אפליקציית חנות מקוונת מודרנית (Angular + Node.js) עם עשרות חולשות מובנות, כולל חולשות מתקדמות.
# docker-compose-juiceshop.yml
version: "3.8"
services:
juiceshop:
image: bkimminich/juice-shop
ports:
- "3000:3000"
environment:
- NODE_ENV=unsafe
# הפעלה
docker compose -f docker-compose-juiceshop.yml up -d
# גישה בדפדפן: http://localhost:3000
# לוח התוצאות: http://localhost:3000/#/score-board
מעבדה מותאמת - אפליקציית PHP עם מסד נתונים¶
לעיתים נצטרך לבנות אפליקציה פגיעה מותאמת. הנה דוגמה למעבדה מלאה:
# docker-compose-custom-lab.yml
version: "3.8"
services:
web:
build: ./web
ports:
- "8085:80"
volumes:
- ./web/src:/var/www/html
depends_on:
- db
networks:
- lab-network
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: labpass
MYSQL_DATABASE: vulnerable_app
volumes:
- ./db/init.sql:/docker-entrypoint-initdb.d/init.sql
- lab_db:/var/lib/mysql
networks:
- lab-network
proxy:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- web
networks:
- lab-network
networks:
lab-network:
driver: bridge
volumes:
lab_db:
קובץ Dockerfile לשירות הווב:
# web/Dockerfile
FROM php:8.1-apache
RUN docker-php-ext-install mysqli pdo pdo_mysql
RUN a2enmod rewrite headers
# התקנת כלים שימושיים לדיבוג
RUN apt-get update && apt-get install -y \
vim \
curl \
net-tools \
&& rm -rf /var/lib/apt/lists/*
COPY src/ /var/www/html/
RUN chown -R www-data:www-data /var/www/html
קובץ תצורת Nginx כ-Reverse Proxy:
# nginx/default.conf
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://web:80;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
הגדרת PortSwigger Web Security Academy¶
יצירת חשבון¶
- היכנסו ל-
https://portswigger.net/web-security - צרו חשבון חינמי
- המעבדות מתחלקות לשלוש רמות: Apprentice, Practitioner, Expert
- בקורס זה נתמקד ברמות Practitioner ו-Expert
חיבור Burp Suite למעבדות¶
# הגדרת Burp Suite לעבודה עם PortSwigger Labs:
# 1. פתחו את Burp Suite
# 2. עברו ל-User Options > Connections
# 3. ודאו שה-Proxy Listener מוגדר על 127.0.0.1:8080
# 4. בדפדפן, הגדירו את ה-Proxy ל-127.0.0.1:8080
# 5. התקינו את תעודת ה-CA של Burp: http://burp/cert
הגדרת כלים לבדיקות Out-of-Band¶
Burp Collaborator¶
Burp Collaborator זמין בגרסת Pro ומאפשר לזהות אינטראקציות out-of-band - כלומר, כאשר שרת היעד יוצר בקשה חזרה לשרת שלנו.
# שימוש ב-Burp Collaborator:
# 1. Burp > Burp Collaborator Client
# 2. לחצו "Copy to clipboard" לקבלת כתובת ייחודית
# 3. השתמשו בכתובת במטענים (payloads) שלכם
# 4. לחצו "Poll now" לבדיקת אינטראקציות
שימוש ב-webhook.site¶
חלופה חינמית ל-Burp Collaborator:
# 1. היכנסו ל-https://webhook.site
# 2. תקבלו כתובת URL ייחודית
# 3. כל בקשה שתגיע לכתובת תוצג בזמן אמת
# דוגמה לשימוש בבדיקת SSRF:
# https://target.com/fetch?url=https://webhook.site/YOUR-UNIQUE-ID
# דוגמה לשימוש בבדיקת XXE:
# <!DOCTYPE foo [<!ENTITY xxe SYSTEM "https://webhook.site/YOUR-UNIQUE-ID">]>
הקמת שרת Collaborator עצמי¶
לתרחישים מתקדמים, ניתן להקים שרת משלנו:
# simple_collaborator.py - שרת פשוט לזיהוי אינטראקציות
from http.server import HTTPServer, BaseHTTPRequestHandler
import datetime
import json
class CollaboratorHandler(BaseHTTPRequestHandler):
interactions = []
def do_GET(self):
interaction = {
"time": str(datetime.datetime.now()),
"method": "GET",
"path": self.path,
"headers": dict(self.headers),
"client": self.client_address[0]
}
CollaboratorHandler.interactions.append(interaction)
print(f"[+] Interaction received: {json.dumps(interaction, indent=2)}")
self.send_response(200)
self.send_header("Content-Type", "text/plain")
self.end_headers()
self.wfile.write(b"OK")
def do_POST(self):
content_length = int(self.headers.get("Content-Length", 0))
body = self.rfile.read(content_length)
interaction = {
"time": str(datetime.datetime.now()),
"method": "POST",
"path": self.path,
"headers": dict(self.headers),
"body": body.decode("utf-8", errors="replace"),
"client": self.client_address[0]
}
CollaboratorHandler.interactions.append(interaction)
print(f"[+] Interaction received: {json.dumps(interaction, indent=2)}")
self.send_response(200)
self.send_header("Content-Type", "text/plain")
self.end_headers()
self.wfile.write(b"OK")
if __name__ == "__main__":
server = HTTPServer(("0.0.0.0", 9999), CollaboratorHandler)
print("[*] Collaborator server running on port 9999")
server.serve_forever()
הגדרות רשת לבדיקות¶
עריכת קובץ hosts¶
קובץ hosts מאפשר לנו למפות שמות דומיין לכתובות IP מקומיות. זה חיוני כאשר אנחנו רוצים לדמות סביבה עם מספר דומיינים.
# עריכת קובץ hosts בלינוקס/macOS
sudo vim /etc/hosts
# הוספת רשומות למעבדות מקומיות
127.0.0.1 vulnerable.local
127.0.0.1 admin.vulnerable.local
127.0.0.1 api.vulnerable.local
127.0.0.1 dev.vulnerable.local
127.0.0.1 staging.vulnerable.local
הגדרת DNS מקומי עם dnsmasq¶
לסביבות מורכבות עם סאבדומיינים רבים, שימוש ב-dnsmasq נוח יותר:
# התקנה
sudo apt install dnsmasq
# הגדרה - כל הסאבדומיינים של .lab יפנו ל-127.0.0.1
echo "address=/.lab/127.0.0.1" | sudo tee /etc/dnsmasq.d/lab.conf
# הפעלה מחדש
sudo systemctl restart dnsmasq
# כעת כל כתובת שמסתיימת ב-.lab תפנה ל-localhost
# לדוגמה: target.lab, admin.target.lab, api.target.lab
הגדרת Nginx כ-Reverse Proxy מרובה דומיינים¶
# nginx-multi-domain.conf
# שרת ראשי
server {
listen 80;
server_name vulnerable.lab;
location / {
proxy_pass http://localhost:8081;
}
}
# פאנל ניהול
server {
listen 80;
server_name admin.vulnerable.lab;
location / {
proxy_pass http://localhost:8082;
}
}
# שרת API
server {
listen 80;
server_name api.vulnerable.lab;
location / {
proxy_pass http://localhost:8083;
}
}
סביבת Docker Compose מלאה - מעבדת קורס¶
הנה קובץ Docker Compose שמקים את כל הסביבות שנצטרך לאורך הקורס:
# docker-compose-course-lab.yml
version: "3.8"
services:
# DVWA - ברמת אבטחה גבוהה
dvwa:
image: vulnerables/web-dvwa
ports:
- "8081:80"
environment:
- SECURITY_LEVEL=high
# Juice Shop - אפליקציה מודרנית
juiceshop:
image: bkimminich/juice-shop
ports:
- "3000:3000"
# WebGoat - שיעורים אינטראקטיביים
webgoat:
image: webgoat/webgoat
ports:
- "8082:8080"
- "9090:9090"
# שרת Collaborator
collaborator:
build:
context: ./collaborator
dockerfile: Dockerfile
ports:
- "9999:9999"
# שרת GraphQL פגיע לתרגול
graphql-lab:
image: dolevf/damned-vulnerable-graphql-application
ports:
- "5013:5013"
# שרת API פגיע
crapi:
image: crapi/crapi
ports:
- "8888:8888"
# בסיס נתונים משותף
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: rootpass
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
volumes:
mysql_data:
# הפעלת כל המעבדות
docker compose -f docker-compose-course-lab.yml up -d
# בדיקת סטטוס
docker compose -f docker-compose-course-lab.yml ps
# צפייה בלוגים של שירות ספציפי
docker compose -f docker-compose-course-lab.yml logs -f juiceshop
# עצירת שירות ספציפי
docker compose -f docker-compose-course-lab.yml stop dvwa
# עצירת הכל
docker compose -f docker-compose-course-lab.yml down
ארגון תיקיות העבודה¶
מומלץ לארגן את תיקיית העבודה בצורה הבאה:
advanced-web-hacking-lab/
docker/
docker-compose-course-lab.yml
docker-compose-dvwa.yml
docker-compose-custom.yml
collaborator/
Dockerfile
simple_collaborator.py
web/
Dockerfile
src/
nginx/
default.conf
tools/
scripts/
wordlists/
notes/
recon/
exploits/
reports/
loot/
# יצירת מבנה התיקיות
mkdir -p advanced-web-hacking-lab/{docker/{collaborator,web/src,nginx},tools/{scripts,wordlists},notes/{recon,exploits,reports},loot}
בדיקת הסביבה¶
לאחר הקמת הסביבה, בצעו את הבדיקות הבאות:
# בדיקה שכל הקונטיינרים רצים
docker ps
# בדיקת גישה לכל שירות
curl -s -o /dev/null -w "%{http_code}" http://localhost:8081 # DVWA
curl -s -o /dev/null -w "%{http_code}" http://localhost:3000 # Juice Shop
curl -s -o /dev/null -w "%{http_code}" http://localhost:8082 # WebGoat
# בדיקה ש-Burp Suite מיירט תעבורה
# 1. הגדירו פרוקסי בדפדפן ל-127.0.0.1:8080
# 2. גלשו לאחת הכתובות
# 3. ודאו שהבקשה מופיעה בטאב HTTP History של Burp
echo "Environment is ready!"
סיכום¶
בשיעור זה הקמנו סביבת עבודה מלאה הכוללת:
- התקנת Docker ו-Docker Compose
- אפליקציות פגיעות מגוונות (DVWA, WebGoat, Juice Shop)
- כלי Collaborator לבדיקות out-of-band
- הגדרות רשת מותאמות
- מבנה תיקיות מאורגן
הסביבה הזו תלווה אותנו לאורך כל הקורס. בשיעור הבא נלמד על כלים מתקדמים ב-Burp Suite שישמשו אותנו בכל תרגיל ובדיקה.