Burp Suite ile Web Uygulama Güvenlik Testi
Yıllar önce bir müşterinin web uygulamasını test ederken Burp Suite olmadan nasıl iş yaptığımı düşünüyorum da, insan nasıl hayatta kalırdı diye merak ediyor. O dönemde manuel HTTP analizi, Wireshark ile paket yakalama, kendi yazdığımız Python scriptleri… Şimdi gülünç geliyor. Bugün Burp Suite, web uygulama güvenlik testi söz konusu olduğunda neredeyse tartışmasız bir standart haline geldi. Hem sızma testi uzmanları hem de güvenliği ciddiye alan geliştirme ekipleri için vazgeçilmez bir araç. Bu yazıda Burp Suite’i sıfırdan nasıl kullanabileceğinizi, gerçek dünya senaryolarında nasıl konumlandırabileceğinizi ve bazı ince detayları paylaşacağım.
Burp Suite Nedir ve Neden Bu Kadar Yaygın?
Burp Suite, PortSwigger tarafından geliştirilen bir web uygulama güvenlik test platformu. Community (ücretsiz), Professional ve Enterprise olmak üç farklı sürümü var. Günlük sızma testi işleri için Professional sürümü şart gibi görünse de Community sürümüyle de çok iş yapılabiliyor, özellikle öğrenme aşamasında.
Burp’ün bu kadar popüler olmasının temel nedeni proxy tabanlı mimarisi. Tarayıcınız ile hedef uygulama arasına girerek tüm HTTP/HTTPS trafiğini yakalamanıza, değiştirmenize ve tekrar göndermenize izin veriyor. Buna ek olarak aktif ve pasif tarayıcı, intruder, repeater, decoder, comparer gibi modüller barındırıyor. Yani tek başına bir ekosistem.
Türkiye’deki sızma testi ekipleri arasında Burp Suite kullanımı son 3-4 yılda ciddi ölçüde arttı. KVKK kapsamındaki denetimler, bankacılık regülasyonları (BDDK’nın güvenlik test zorunlulukları) ve e-ticaret sektörünün büyümesi bu artışın arkasındaki itici güçler.
Kurulum ve İlk Yapılandırma
Burp Suite Java tabanlı olduğu için önce sisteminizde Java’nın kurulu olduğundan emin olun. Kali Linux kullanıyorsanız zaten hazır geliyor ama taze bir Ubuntu ya da Debian kurulumunda şu adımları takip etmeniz gerekiyor:
# Java kurulumu
sudo apt update
sudo apt install default-jdk -y
# Java versiyonunu kontrol et
java -version
# PortSwigger'dan JAR dosyasını indirdikten sonra çalıştırma
java -jar burpsuite_community_v2024.jar
# Daha fazla bellek tahsis etmek için (büyük testlerde şart)
java -Xmx2g -jar burpsuite_community_v2024.jar
Burp’ü başlattıktan sonra yapmanız gereken ilk şey proxy ayarını yapmak. Varsayılan olarak 127.0.0.1:8080 üzerinde dinliyor. Firefox kullanıyorsanız FoxyProxy eklentisi hayatınızı kolaylaştırır.
# FoxyProxy ile profil oluşturmak yerine manuel Firefox ayarı için
# about:preferences > Network Settings > Manual proxy configuration
# HTTP Proxy: 127.0.0.1 Port: 8080
# "Also use this proxy for HTTPS" seçeneğini işaretleyin
HTTPS trafiğini yakalayabilmek için Burp’ün CA sertifikasını tarayıcıya eklemeniz gerekiyor. Bu adımı atlayanların %90’ı sonradan HTTPS sitelerinde neden trafik göremediklerini soruyor.
# Burp proxy aktifken tarayıcıdan şu adrese gidin
# http://burpsuite veya http://127.0.0.1:8080/cert
# İndirilen cacert.der dosyasını tarayıcının sertifika deposuna ekleyin
# Firefox için: about:preferences#privacy > Sertifikaları Görüntüle > İçe Aktar
# Chrome için: Settings > Privacy > Manage Certificates > Authorities > Import
Proxy Modülü: Trafiği Yakalamak ve Analiz Etmek
Proxy, Burp’ün kalbi. Intercept özelliğini açtığınızda tarayıcıdan gönderilen her istek Burp’te duruyor ve siz inceleyip değiştirene kadar hedefe gitmiyor.
Bir login formunu test ettiğinizi düşünün. Kullanıcı adı ve şifre alanlarını manipüle etmek için intercept’i açın, formu doldurup gönderin ve isteği Burp’te yakalayın. HTTP History sekmesinde ise intercept kapalıyken geçen tüm trafiği görebilirsiniz.
# Burp dışından komut satırıyla proxy üzerinden istek gönderme
# Bu özellikle otomasyon scriptlerini test ederken kullanışlı
curl -x http://127.0.0.1:8080
-k
-H "Content-Type: application/json"
-d '{"username":"admin","password":"test123"}'
https://hedef-uygulama.com/api/login
# -k parametresi SSL hatalarını atla
# -x parametresi proxy adresi
Proxy ayarlarında “Intercept responses based on the following rules” kısmını yapılandırmayı ihmal etmeyin. Sadece ilgilendiğiniz içerik tiplerine odaklanmak test sürecinizi çok hızlandırıyor.
Repeater: Tekrarlayan Test Döngüsünün Efendisi
Bir isteği yakaladıktan sonra sağ tıklayıp “Send to Repeater” dediğinizde o istek Repeater sekmesine gönderiliyor. Buradan istediğiniz kadar düzenleyip tekrar gönderebiliyorsunuz. Sızma testinin büyük bölümü aslında bu döngüden oluşuyor: isteği yakala, düzenle, gönder, yanıtı analiz et, tekrar düzenle.
Pratik bir senaryo: Bir API endpoint’inin ID parametresini test ediyorsunuz. Şüphelendiğiniz bir IDOR (Insecure Direct Object Reference) zafiyeti var.
# Yakaladığınız orijinal istek şöyle olabilir:
GET /api/v1/users/1234/orders HTTP/1.1
Host: hedef-uygulama.com
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9...
Cookie: session=abc123
# Repeater'da ID'yi değiştirip test edersiniz:
GET /api/v1/users/1235/orders HTTP/1.1
# Başka bir kullanıcının siparişlerini görebiliyor musunuz?
Repeater’da sekme renklendirme özelliğini kullanın. Farklı test senaryoları için farklı sekmeler açın ve renk kodlamasıyla organize edin. Bu küçük detay uzun soluklu testlerde kafanızın karışmamasını sağlıyor.
Intruder: Otomatik Saldırı Vektörleri
Intruder modülü, bir isteği şablon olarak alıp belirlediğiniz parametreleri otomatik olarak değiştirerek toplu istek göndermenizi sağlıyor. Brute force, fuzzing, parametre numaralandırma gibi senaryolarda kullanılıyor.
Community sürümünde Intruder kasıtlı olarak yavaş çalışıyor (PortSwigger’ın Pro sürümüne yönlendirme taktiği). Brute force için ffuf veya hydra daha mantıklı ama Intruder’ın asıl gücü payload manipülasyonunda.
Dört farklı saldırı tipi var:
- Sniper: Tek bir payload pozisyonu, tüm payload listesi sırayla denenir
- Battering Ram: Birden fazla pozisyon ama aynı payload eş zamanlı uygulanır
- Pitchfork: Her pozisyon için ayrı liste, aynı index eş zamanlı kullanılır
- Cluster Bomb: Tüm kombinasyonlar denenir, en kapsamlı ama en yavaş
# Intruder için wordlist hazırlama örneği
# SQL injection test payload'ları
cat > sqli_payloads.txt << 'EOF'
'
''
`
')
'))
'--
'/*
' OR '1'='1
' OR '1'='1'--
' OR '1'='1'/*
admin'--
admin'/*
' OR 1=1--
' OR 1=1#
' OR 1=1/*
EOF
# XSS payload listesi oluşturma
cat > xss_payloads.txt << 'EOF'
<script>alert(1)</script>
<img src=x onerror=alert(1)>
<svg onload=alert(1)>
javascript:alert(1)
"><script>alert(1)</script>
'><script>alert(1)</script>
EOF
Scanner: Pasif ve Aktif Tarama
Professional sürümünde gelen Scanner modülü, uygulamayı otomatik olarak tarayarak bilinen zafiyetleri tespit ediyor. Community sürümünde pasif tarama mevcut ama aktif tarama yok.
Pasif tarama bile çok değerli bilgiler sunuyor: güvenli olmayan cookie flag’leri, bilgi sızdıran header’lar, mixed content uyarıları gibi düşük asılı meyveler.
Aktif tarama yaparken dikkat etmeniz gereken birkaç nokta var. Üretim ortamını taramayın ya da çok dikkatli olun. Aktif tarama, veritabanına sahte kayıtlar yazabilir, email gönderilebilir, bazı servisleri tetikleyebilir.
# Burp'ün tespit ettiği bulgular için rapor çıkarma (Pro)
# Target > Site Map > sağ tık > Issues > Report Issues
# Community'de alternatif: Burp'ü Nikto ile kombine kullan
nikto -h https://hedef-uygulama.com
-useproxy http://127.0.0.1:8080
-output nikto_rapor.txt
# OWASP ZAP ile entegrasyon için ZAP proxy'sini Burp üzerinden yönlendir
# ZAP: localhost:8090
# Burp upstream proxy: 127.0.0.1:8090
Decoder ve Comparer: Küçük Ama Kritik Araçlar
Decoder modülü, farklı encoding formatları arasında dönüşüm yapmanızı sağlıyor. Base64, URL encoding, HTML encoding, hex… Bir JWT token’ı çözümlemeniz ya da URL-encoded bir payload’ı anlamanız gerektiğinde Decoder hayat kurtarıyor.
# Komut satırından aynı işlemleri yapmak isterseniz:
# Base64 decode
echo "YWRtaW46cGFzc3dvcmQxMjM=" | base64 -d
# URL decode
python3 -c "import urllib.parse; print(urllib.parse.unquote('%27%20OR%20%271%27%3D%271'))"
# JWT token analizi (manuel)
echo "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9" | base64 -d 2>/dev/null
# Header kısmını decode eder
# Daha kapsamlı JWT analizi için
pip3 install jwt-tool
python3 jwt_tool.py eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiYWRtaW4ifQ.signature
Comparer modülü ise iki yanıtı ya da iki isteği karşılaştırmanıza yarıyor. Özellikle blind SQL injection tespitinde çok değerli. True koşulunun yanıtı ile false koşulunun yanıtı arasındaki farkı görsel olarak gösteriyor.
Gerçek Dünya Senaryosu: Bir E-Ticaret Uygulamasının Testi
Geçen yıl bir e-ticaret şirketinin sızma testi görevini aldık. İzinler alındı, kapsam belirlendi. Burp’ü devreye aldık ve şu sırayla ilerledik:
Keşif aşaması: Tüm uygulamayı manuel olarak gezdik. Burp’ün Site Map’i otomatik olarak dolmaya başladı. Spider/Crawler ile keşfedilemeyen sayfaları bulmak için JavaScript dosyalarını inceledik.
# JavaScript dosyalarından endpoint çıkarma
# Önce tüm JS URL'lerini listele
cat burp_sitemap_export.xml | grep -oP 'https?://[^s"<>]+.js' | sort -u > js_files.txt
# Her JS dosyasını indirip endpoint ara
while read url; do
curl -sk "$url" | grep -oP '["'"'"'](/[a-zA-Z0-9/_-]+)["'"'"']'
done < js_files.txt | sort -u > discovered_endpoints.txt
# Keşfedilen endpointleri Burp'e yüklemek için
# Target > Site Map > Engage Tools > Discover Content
Kimlik doğrulama testleri: Login sayfasında rate limiting var mıydı? Yoktu. Burp Intruder ile username enumeration yaptık. Var olan kullanıcılar için “Kullanıcı adı mevcut, şifre hatalı” mesajı, olmayan kullanıcılar için farklı bir mesaj dönüyordu. Bu bile başlı başına bir bilgi sızıntısı.
Oturum yönetimi: Session token’ları yeterince rastgele miydi? Burp Sequencer modülü burada devreye giriyor.
# Sequencer analizi için:
# HTTP History'den bir login yanıtını seç
# Sağ tık > Send to Sequencer
# Token'ın bulunduğu lokasyonu tanımla
# "Start live capture" ile analizi başlat
# Burp istatistiksel analiz yaparak token kalitesini raporlar
# Manuel token entropy kontrolü
python3 << 'EOF'
import math
import collections
tokens = [
"abc123def456",
"xyz789uvw012",
# Burp'ten topladığınız token örnekleri
]
for token in tokens:
freq = collections.Counter(token)
entropy = -sum((f/len(token)) * math.log2(f/len(token))
for f in freq.values())
print(f"Token: {token[:20]}... Entropy: {entropy:.2f} bits/char")
EOF
Bu testin sonunda kritik bir IDOR zafiyeti bulduk. Sipariş takip API’si, oturum doğrulamasına rağmen sipariş ID’si üzerinden başka kullanıcıların sipariş detaylarını sızdırıyordu. Bu tür bir bulgu olmadan önce “uygulamamız güvenli” diyen müşteri, raporumuzdan sonra 48 saat içinde yamaladı.
Burp Eklentileri (BApp Store)
Burp’ün eklenti sistemi, aracın asıl gücünü ortaya çıkaran özelliklerden biri. BApp Store’dan yükleyebileceğiniz bazı kritik eklentiler:
- Autorize: Yetkilendirme testlerini otomatikleştirmek için. IDOR tespitinde inanılmaz faydalı.
- Logger++: Gelişmiş trafik loglama ve filtreleme. Community sürümündeki log kısıtlamalarını aşıyor.
- Retire.js: Güvenlik açıklı JavaScript kütüphanelerini tespit ediyor.
- JSON Web Tokens: JWT token’larını analiz etmek ve manipüle etmek için.
- HTTP Request Smuggler: HTTP request smuggling saldırılarını tespit etmek için.
- Upload Scanner: Dosya yükleme endpoint’lerini test etmek için.
# Burp eklentilerini Jython ile kullanmak için (Python tabanlı eklentiler)
# Burp > Extender > Options > Python Environment
# Jython standalone JAR'ını indirip yolu göster
wget https://repo1.maven.org/maven2/org/python/jython-standalone/2.7.3/jython-standalone-2.7.3.jar
# Ruby tabanlı eklentiler için JRuby
wget https://repo1.maven.org/maven2/org/jruby/jruby-complete/9.4.5.0/jruby-complete-9.4.5.0.jar
Raporlama ve Bulgu Yönetimi
Test bitti, bulgularınız var. Şimdi ne yapacaksınız? Burp Pro’da dahili raporlama var ama Community’de bunu kendiniz yapmanız gerekiyor. Ben genellikle Burp’ten XML export alıp bunu özelleştirilmiş bir şablona işliyorum.
# Burp'ten export alma (XML formatında)
# Target > Site Map > sağ tık > Save selected items
# XML'i parse edip özet çıkarma
python3 << 'EOF'
import xml.etree.ElementTree as ET
tree = ET.parse('burp_export.xml')
root = tree.getroot()
for item in root.findall('.//item'):
url = item.find('url').text if item.find('url') is not None else 'N/A'
status = item.find('status').text if item.find('status') is not None else 'N/A'
method = item.find('method').text if item.find('method') is not None else 'N/A'
print(f"[{status}] {method} {url}")
EOF
# Bulguları severity'e göre grupla ve markdown rapor oluştur
cat > rapor_sablonu.md << 'EOF'
# Güvenlik Test Raporu
## Kritik Bulgular
## Yüksek Risk Bulguları
## Orta Risk Bulguları
## Düşük Risk ve Bilgi Amaçlı Bulgular
## Öneriler
EOF
HTTPS ve Sertifika Pinning ile Başa Çıkma
Mobil uygulama backendlerini test ederken ya da sertifika pinning uygulayan web uygulamalarında Burp’ün sertifikasını kabul ettirmek zor olabiliyor.
# Android uygulamalarında sertifika pinning bypass için
# Frida + objection kombinasyonu
pip3 install frida-tools objection
# Objection ile pinning bypass
objection -g com.hedef.uygulama explore
# Objection shell'de:
# android sslpinning disable
# Burp sertifikasını Android sistemine yükleme
# cacert.der'i cacert.cer olarak yeniden adlandır
# Android: Settings > Security > Install certificate
# iOS için mitmproxy ile Burp'ü birlikte kullanma
mitmproxy --mode upstream:http://127.0.0.1:8080 -p 8081
Sonuç
Burp Suite, öğrenme eğrisi biraz dik görünse de bir kez alıştıktan sonra web güvenlik testinin vazgeçilmez parçası haline geliyor. Community sürümüyle başlayın, PortSwigger Web Security Academy’nin ücretsiz laboratuvarlarında pratik yapın. Gerçek ortamlarda test yapmadan önce mutlaka yazılı izin alın, kapsam belgesi hazırlayın.
En önemli nokta şu: Burp sadece bir araç. Aracı iyi kullanmak önemli ama asıl kritik olan HTTP protokolünü, uygulama mimarisini ve güvenlik açıklarının nasıl çalıştığını anlamak. Burp sizi bu anlayışa götüren bir yol arkadaşı, rehber değil.
Türkiye’deki sızma testi ekosistemi hızla büyüyor. SOME (Siber Olaylara Müdahale Ekibi) zorunlulukları, ISO 27001 gereksinimleri ve artan siber saldırı farkındalığı bu büyümeyi destekliyor. Burp Suite’i etkin kullanabilen bir sysadmin ya da güvenlik mühendisi olarak kendinizi her geçen gün daha değerli kılabilirsiniz. Laboratuvar ortamları kurun, eski sürüm savunmasız uygulamalar üzerinde pratik yapın (DVWA, WebGoat, Juice Shop), ve öğrendiklerinizi belgelemeyi ihmal etmeyin.
