לדלג לתוכן

סביבת עבודה מתקדמת

מבוא

בקורס הבסיסי עבדנו בעיקר עם אפליקציות פגיעות מוכנות. בקורס המתקדם נצטרך סביבת עבודה גמישה יותר - סביבה שמאפשרת לנו להקים מעבדות מותאמות, לדמות תרחישים מציאותיים, ולתרגל תקיפות מורכבות.

בשיעור זה נלמד להקים סביבת עבודה מלאה באמצעות 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 --version
docker compose version

# בדיקה שהשירות רץ
docker info

יסודות 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

יצירת חשבון

  1. היכנסו ל-https://portswigger.net/web-security
  2. צרו חשבון חינמי
  3. המעבדות מתחלקות לשלוש רמות: Apprentice, Practitioner, Expert
  4. בקורס זה נתמקד ברמות 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()
# הפעלה
python3 simple_collaborator.py

# חשיפה לאינטרנט עם ngrok (לבדיקות מרוחקות)
ngrok http 9999

הגדרות רשת לבדיקות

עריכת קובץ 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 שישמשו אותנו בכל תרגיל ובדיקה.