API Testing

Modern web uygulamalarının API güvenlik açıklarını keşfedin ve test etmeyi öğrenin

GET /api/test?vulnerability=found

API Test Temelleri

API'ler (Application Programming Interfaces), yazılım sistemleri arasında iletişim ve veri paylaşımını sağlar. Modern web uygulamalarının çoğu API tabanlı mimariler kullanır, bu da API güvenlik testlerini kritik kılar.

API Test Alanları:
  • Authentication & Authorization: Kimlik doğrulama ve yetkilendirme
  • Input Validation: Giriş veri doğrulama
  • Rate Limiting: İstek sınırlandırma
  • Data Exposure: Veri sızıntısı riskleri
  • Business Logic: İş mantığı açıkları
// Tipik API endpoint örneği
GET /api/users/123
Host: example.com
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

// Response
{
  "id": 123,
  "name": "John Doe",
  "email": "john@example.com",
  "role": "user"
}
🎯 Test Stratejisi: API testlerini başlamadan önce OWASP API Security Top 10 listesini inceleyin ve sistematik bir yaklaşım benimseyin.

API Keşif (Reconnaissance)

API testine başlamadan önce hedef API hakkında mümkün olduğunca fazla bilgi toplamalısınız. Bu, saldırı yüzeyini keşfetmek için kritiktir.

Keşif Adımları:
• API endpoint'lerini tespit etme
• Desteklenen HTTP metodlarını belirleme
• Giriş/çıkış veri formatlarını analiz etme
• Rate limiting ve authentication mekanizmalarını inceleme
• API dokümantasyonunu bulma
Endpoint Tanımlama
API endpoint, API'nin belirli bir kaynak için istekleri aldığı konumdur.
Örnek: /api/books - kitapları listeler

API Dokümantasyonu Keşfi

API dokümantasyonu, geliştiricilerin API'yi nasıl kullanacağını öğrenmeleri için hazırlanır. Bu dokümantasyon genellikle kamuya açıktır ve değerli bilgiler içerir.

// Yaygın dokümantasyon endpoint'leri
/api
/swagger/index.html
/openapi.json
/docs
/api-docs
/swagger-ui
/redoc
Dokümantasyon Türleri
OpenAPI/Swagger: JSON/YAML formatında makine okunabilir
Postman Collections: API test koleksiyonları
GraphQL Schema: GraphQL API şeması
Manual Docs: İnsan okunabilir dokümantasyon
Keşif Tekniği: Bir endpoint bulduğunuzda, base path'leri de kontrol edin. /api/swagger/v1/users/123 bulduysanız, /api/swagger/v1, /api/swagger ve /api yollarını da inceleyin.

Endpoint Keşfi

API endpoint'lerini keşfetmek, test sürecinin en kritik adımlarından biridir. Web uygulamasını kullanarak ve kaynak kodunu inceleyerek endpoint'leri bulabilirsiniz.

Endpoint Keşif Yöntemleri:
  • Burp Scanner: Otomatik crawling ve endpoint çıkarımı
  • JavaScript Analizi: JS dosyalarında API referansları
  • Network Traffic: Browser Developer Tools ile trafik analizi
  • Directory Bruteforce: Yaygın endpoint isimlerini deneme
  • Error Messages: Hata mesajlarında endpoint ipuçları
Burp Scanner
Otomatik endpoint keşfi ve güvenlik taraması
JS Link Finder
JavaScript dosyalarından endpoint çıkarımı
Content Discovery
Gizli içerik ve parameter keşfi
Burp Intruder
Brute force ve fuzzing testleri

HTTP Metod Testleri

API endpoint'leri farklı HTTP metodlarını destekleyebilir. Her metodu test etmek, ek saldırı yüzeylerini keşfetmenize yardımcı olur.

// Aynı endpoint, farklı metodlar
GET /api/tasks - Görev listesini getir
POST /api/tasks - Yeni görev oluştur  
PUT /api/tasks/1 - 1 numaralı görevi güncelle
DELETE /api/tasks/1 - 1 numaralı görevi sil
PATCH /api/tasks/1 - 1 numaralı görevi kısmen güncelle
OPTIONS /api/tasks - Desteklenen metodları öğren
HTTP Metod Türleri
GET Veri okuma
POST Yeni veri oluşturma
PUT Veri güncelleme (tam)
DELETE Veri silme
PATCH: Kısmi güncelleme
OPTIONS: Metod bilgisi
Dikkat: Farklı HTTP metodlarını test ederken, kritik verileri etkilememek için düşük öncelikli nesneleri hedefleyin.

İçerik Türü Manipülasyonu

API endpoint'leri belirli veri formatlarını bekler. Content-Type header'ını değiştirerek farklı davranışları tetikleyebilir ve güvenlik açıklarını keşfedebilirsiniz.

// JSON formatında istek
POST /api/users
Content-Type: application/json
{"name": "test", "email": "test@example.com"}

// XML formatına dönüştürme
POST /api/users  
Content-Type: application/xml
<user><name>test</name><email>test@example.com</email></user>

// Form data formatı
POST /api/users
Content-Type: application/x-www-form-urlencoded
name=test&email=test@example.com
İçerik Türü Saldırı Vektörleri:
• JSON → XML dönüşümünde XXE injection
• XML → JSON dönüşümünde structure injection
• Unexpected content types ile error disclosure
• Content-Type spoofing ile validation bypass
Araç Önerisi: Burp Suite'in Content Type Converter eklentisini kullanarak JSON ve XML formatları arasında otomatik dönüşüm yapabilirsiniz.

Gizli Endpoint Keşfi

Bazı API endpoint'leri dokümantasyonda yer almaz veya frontend tarafından kullanılmaz. Bu gizli endpoint'leri bulmak, önemli güvenlik açıklarını ortaya çıkarabilir.

// Bilinen endpoint: 
PUT /api/user/update

// Gizli endpoint'leri test etme:
PUT /api/user/delete
PUT /api/user/create  
PUT /api/user/admin
DELETE /api/user/123
GET /api/user/all
POST /api/user/login
Fuzzing Wordlists:
  • Common API paths: admin, test, debug, internal
  • CRUD operations: create, read, update, delete, list
  • Admin functions: manage, configure, settings
  • Backup/legacy: v1, old, backup, legacy
Intruder Payload Stratejisi
Burp Intruder ile endpoint fuzzing yaparken, sektöre özel terimleri de dahil edin. Örneğin finans uygulaması için: transaction, account, balance, transfer.

Gizli Parameter Keşfi

API'ler dokümante edilmemiş parametreleri destekleyebilir. Bu gizli parametreler, uygulamanın davranışını değiştirmek için kullanılabilir.

// Normal API isteği
GET /api/users?page=1&limit=10

// Gizli parameter testleri
GET /api/users?page=1&limit=10&debug=true
GET /api/users?page=1&limit=10&admin=1  
GET /api/users?page=1&limit=10&include_deleted=true
GET /api/users?page=1&limit=10&format=xml
Param Miner
65,536 parameter isimini otomatik test eder
Burp Intruder
Yaygın parameter isimlerini wordlist ile test eder
Yaygın Gizli Parametreler:
• debug, test, admin, internal
• format, output, include, exclude
• callback, jsonp, pretty
• version, v, api_version
• token, key, secret, auth

Mass Assignment Açıkları

Mass assignment (auto-binding), framework'lerin request parametrelerini otomatik olarak internal objelere bağlaması durumunda ortaya çıkar. Bu durum gizli parametreler yaratabilir.

// Güncellenebilen alanlar
PATCH /api/users/
{
    "username": "wiener",
    "email": "wiener@example.com"
}

// GET isteği ile dönen tam obje
GET /api/users/123
{
    "id": 123,
    "username": "wiener", 
    "email": "wiener@example.com",
    "isAdmin": false,
    "balance": 1000,
    "role": "user"
}

// Mass assignment saldırısı
PATCH /api/users/
{
    "username": "wiener",
    "email": "wiener@example.com", 
    "isAdmin": true,
    "balance": 999999,
    "role": "admin"
}
Mass Assignment Test Adımları:
1. GET endpoint'inden tam obje yapısını öğrenin
2. Update endpoint'ine ek alanlar ekleyin
3. Invalid değerlerle response farklılığını test edin
4. Privilege escalation için kritik alanları hedefleyin
Korunma
Whitelist approach: Sadece izin verilen alanların güncellenebilir olması
Blacklist approach: Hassas alanların güncelleme dışı bırakılması

Server-Side Parameter Pollution

Server-side parameter pollution, web sitesinin kullanıcı girdisini internal API'ye yeterli encoding olmadan göndermesi durumunda ortaya çıkar. Bu durum parametre manipülasyonuna olanak tanır.

// Frontend isteği
GET /userSearch?name=peter&back=/home

// Backend'e giden internal istek  
GET /users/search?name=peter&publicProfile=true

// Parameter pollution saldırısı
GET /userSearch?name=peter%26admin=true&back=/home

// Sonuç internal istek
GET /users/search?name=peter&admin=true&publicProfile=true
Test Karakterleri:
• & - Parameter separator
• # - Query truncation
• = - Key-value separator
• %26 - URL encoded &
• %23 - URL encoded #
Platform Davranışları:
  • PHP: Son parametreyi alır
  • ASP.NET: Parametreleri birleştirir
  • Node.js: İlk parametreyi alır
  • Python: Framework'e göre değişir

Query String Testleri

Query string'deki server-side parameter pollution testleri, URL parametrelerinde özel karakterler kullanarak internal API manipülasyonu yapmayı hedefler.

// Query truncation testi
GET /userSearch?name=peter%23foo&back=/home
// Internal: GET /users/search?name=peter#foo&publicProfile=true

// Parameter injection testi  
GET /userSearch?name=peter%26email=admin@test.com&back=/home
// Internal: GET /users/search?name=peter&email=admin@test.com&publicProfile=true

// Parameter override testi
GET /userSearch?name=peter%26name=admin&back=/home
// Internal: GET /users/search?name=peter&name=admin&publicProfile=true
Test Sırası:
1. Truncation (#) - Query kesme testi
2. Invalid parameter (&foo=xyz) - Injection testi
3. Valid parameter (&email=test) - Geçerli parametre ekleme
4. Override (&name=admin) - Mevcut parametreyi ezme

REST Path Manipülasyonu

RESTful API'ler parameter isimlerini ve değerlerini URL path'inde saklar. Bu durumda path traversal teknikleri kullanarak API manipülasyonu yapılabilir.

// REST API yapısı
GET /api/users/123
// /api = root endpoint
// /users = resource
// /123 = parameter (user ID)

// Frontend isteği
GET /edit_profile.php?name=peter
// Internal: GET /api/private/users/peter

// Path traversal saldırısı  
GET /edit_profile.php?name=peter%2f..%2fadmin
// Internal: GET /api/private/users/peter/../admin
// Normalized: GET /api/private/users/admin
Path Traversal Payload'ları:
• ../ - Directory traversal
• %2f..%2f - URL encoded traversal
• ....// - Double encoding bypass
• %252f - Double URL encoding

Yapısal Veri Format Testleri

Saldırganlar JSON, XML gibi yapısal veri formatlarında parameter manipülasyonu yaparak server-side işlemleri etkileyebilir. Bu testler, input validation açıklarını hedefler.

// Normal form data isteği
POST /myaccount
name=peter

// Internal JSON request
PATCH /users/7312/update
{"name":"peter"}

// JSON injection saldırısı
POST /myaccount  
name=peter","access_level":"administrator

// Sonuç internal request
PATCH /users/7312/update
{"name":"peter","access_level":"administrator"}

// Client-side JSON injection
POST /myaccount
{"name": "peter\",\"access_level\":\"administrator"}
Yapısal Injection Vektörleri:
• JSON structure breaking
• XML entity injection
• YAML deserialization
• CSV injection
• Template injection
Response Injection
Yapısal format injection sadece request'lerde değil, response'larda da oluşabilir. User input güvenli şekilde veritabanında saklanıp, sonra JSON response'a encoding olmadan eklenebilir.

Otomatik Test Araçları

Server-side parameter pollution açıklarını tespit etmek için çeşitli otomatik araçlar kullanabilirsiniz. Bu araçlar manuel testleri destekler ve tarama sürecini hızlandırır.

Burp Scanner
Suspicious input transformation'ları otomatik tespit eder
Backslash Powered Scanner
Server-side injection açıklarını kategorize eder (boring/interesting/vulnerable)
Custom Scripts
API'ye özel test scriptleri geliştirme
API Fuzzing Tools
RESTful API endpoint'leri için özelleştirilmiş fuzzer'lar
Scanner Sonuçlarını Değerlendirme:
  • Boring: Normal davranış, güvenlik riski yok
  • Interesting: Manuel test gerektirir
  • Vulnerable: Potansiyel güvenlik açığı
Hybrid Approach: Otomatik araçları başlangıç noktası olarak kullanın, sonra manuel tekniklerle derinlemesine analiz yapın.

Korunma Yöntemleri

API güvenlik açıklarından korunmak için geliştirme aşamasından itibaren güvenlik odaklı yaklaşım benimsenmelidir. İşte en etkili korunma stratejileri:

Temel Güvenlik Prensipleri:
• Input Validation & Sanitization
• Output Encoding
• Parameterized Queries
• Least Privilege Principle
• Defense in Depth
// Güvenli parameter handling
function sanitizeInput(input) {
    // Whitelist approach
    const allowedChars = /^[a-zA-Z0-9_-]+$/;
    if (!allowedChars.test(input)) {
        throw new Error('Invalid input format');
    }
    return input;
}

// Güvenli API design
app.put('/api/users/:id', authenticate, authorize, (req, res) => {
    const allowedFields = ['name', 'email'];
    const updates = {};
    
    allowedFields.forEach(field => {
        if (req.body[field]) {
            updates[field] = sanitize(req.body[field]);
        }
    });
    
    updateUser(req.params.id, updates);
});
API Güvenlik Kontrolleri:
  • Authentication: Güçlü kimlik doğrulama
  • Authorization: Seviye bazlı yetkilendirme
  • Rate Limiting: İstek sınırlandırma
  • Input Validation: Veri doğrulama
  • Error Handling: Güvenli hata yönetimi
  • Logging: Güvenlik olaylarını kaydetme
API Security Checklist
✓ Dokümantasyon güvenliği - Hassas API'lerin gizlenmesi
✓ Güncel dokümantasyon - Test sürecini destekleme
✓ HTTP metod kısıtlaması - İzin verilen metodların belirlenmesi
✓ Content-Type validation - Beklenen format kontrolü
✓ Generic error messages - Bilgi sızıntısını önleme

API Testing Özet

API Test Metodolojisi:
1. Reconnaissance - API keşif ve dokümantasyon analizi
2. Endpoint Discovery - Gizli endpoint ve parameter arama
3. Method Testing - HTTP metod ve content-type testleri
4. Parameter Pollution - Server-side parameter manipülasyonu
5. Mass Assignment - Object binding açıkları
6. Business Logic - API iş mantığı testleri
Kritik Test Alanları:
• Authentication & Authorization bypass
• Input validation & injection attacks
• Rate limiting & DoS protection
• Data exposure & information disclosure
• Business logic flaws
• API versioning issues
Test Araçları:
• Burp Suite: Comprehensive API testing platform
• Postman: API development and testing
• OWASP ZAP: Open source security scanner
• Custom Scripts: Automated API fuzzing
• Browser DevTools: Network traffic analysis
Etik Hacking Uyarıları
Yasal çerçevede kalın: Sadece yetkilendirilmiş sistemlerde test yapın
Sorumlu açıklama: Bulunan açıkları uygun kanallara bildirin
Minimal impact: Sistemlere zarar vermemeye özen gösterin
Dokümantasyon: Test süreçlerini ve bulgularını kaydedin

console.log("API security mastered!");