HyperText Transfer Protocol (HTTP) notları
HyperText Transfer Protocol (HTTP) notları

HTTP Notları
1) /etc/hosts Notu (Sınav sever)
- Sistem / browser bazen DNS’e gitmeden önce /etc/hosts dosyasına bakar.
- Domain burada tanımlıysa DNS sormadan çözer (lab’larda hayat kurtarır).
- Format:
IP domain
# Örn:
152.153.81.14 inlanefreight.com- Kullanım amacı:
- Lab domain’ini IP’ye map’lemek
- Virtual host testlerinde hızlı yönlendirme
cURL
1) Temel istek (sadece body)
curl <http://target>- Anlamı: Sadece response body (HTML/JSON) verir. Render yok.
2) Header + body (tam response)
curl -i <http://target>- i : Response header’larını body ile birlikte gösterir.
3) Sadece header (HEAD request)
curl -I <http://target>- I : HEAD atar, sadece header döner (content indirmeden info toplarsın).
4) Debug / detaylı trafik
curl -v <http://target>
curl -vvv <http://target>- v : Request/response detaylarını basar.
- vvv : Daha fazla debug (çok konuşur ama bazen lazım).
5) Redirect takip et
curl -L <http://target>- L : 301/302 gibi redirect’leri takip eder (login sonrası şart).
6) Sessiz çıktı
curl -s <http://target>- s : Progress + gereksiz cURL çıktısını kapatır (pipe’larda temiz).
7) Dosya indir
curl -O <http://target/file.zip>
curl -o local.zip <http://target/file.zip>- O : Dosyayı orijinal adıyla kaydeder.
- o : Dosyayı senin verdiğin isimle kaydeder.
8) POST (form gönder)
curl -X POST <http://target/login> -d"user=admin&pass=123"- X POST : Metodu net POST yapar.
- d : Body data gönderir (çoğu zaman otomatik POST’a geçirir ama sınavda netlik iyidir).
9) JSON gönder (API test)
curl -X POST <http://target/api> \\
-H"Content-Type: application/json" \\
-d'{"user":"admin"}'- H : Header ekler.
- Content-Type: application/json : “Body JSON” diyor, server doğru parse eder.
10) Cookie / session
Cookie header ile gönder
curl -b"session=ABC" <http://target/dashboard>- b : Cookie gönder (session ile auth bypass değil, session’ı taşırsın).
Cookie kaydet / yeniden kullan
curl -c cookies.txt <http://target>
curl -b cookies.txt <http://target/dashboard>- c : Server’ın verdiği cookie’leri dosyaya kaydeder.
- b cookies.txt : O cookie’lerle istek atar (login akışlarında kral).
11) Basic Auth
curl -u admin:password <http://target>
curl <http://admin:password@target>- u : Basic Auth header’ını otomatik oluşturur.
- URL içine gömmek olur ama çok “temiz” sayılmaz.
12) Authorization header elle
curl -H"Authorization: Basic YWRtaW46YWRtaW4=" <http://target>- Anlamı: Basic Auth’ı manuel gönderirsin.
- YWRtaW46YWRtaW4= = admin:admin base64.
13) User-Agent değiştir
curl -A"Mozilla/5.0" <http://target>- A : User-Agent set eder (WAF/filtre/edge case testlerinde).
14) Custom header (X-Forwarded-For vb.)
curl -H"X-Forwarded-For: 127.0.0.1" <http://target/admin>- Anlamı: Reverse proxy arkasında IP bazlı kontrol varsa test edersin.
15) Burp Proxy üzerinden gönder (GOLD)
curl -x <http://127.0.0.1:8080> <http://target>- x : Proxy üzerinden gönderir.
- Anlamı: İsteği Burp’te yakalayıp oynarsın.
Sınavda en çok lazım “5’li”
- i → header + body
- v → debug
- L → redirect follow
- b / -c → cookie kullan / kaydet
- x → Burp proxy
HTTPS / SSL (Lab gerçekleri)
Normal HTTPS
curl <https://inlanefreight.com>Sertifika hatası örneği
curl: (60) SSL certificate problem: Invalid certificate chain- Anlamı: Sertifika zinciri geçersiz / self-signed / CA yok vs.
SSL doğrulamayı bypass (LAB modu)
curl -k <https://inlanefreight.com>- k : SSL sertifika doğrulamasını kapatır (prod’da kötü, lab’da pratik).
DevTools Kısayolları
- F12 / CTRL + SHIFT + I → DevTools aç
- CTRL + SHIFT + E → direkt Network tab
- Network içinde:
- 🗑️ → request geçmişini temizle
- Copy → Copy as cURL → aynı isteği terminalde birebir çalıştır
- Copy → Copy as Fetch → JS fetch olarak kopyala
- CTRL + SHIFT + K → Console
Mentalite: UI’yi tıklama → request’i yakala → aynısını terminalde/burp’te sök.
HTTP Header
General (Request + Response)
- Date → Mesajın üretildiği zaman (genelde UTC)
- Connection → keep-alive / close (bağlantı yönetimi)
Entity (Body/Content)
- Content-Type → İçerik tipi ( text/html , application/json )
- Content-Length → Body boyutu (byte)
- Content-Encoding → Sıkıştırma ( gzip vs.)
- Boundary → multipart/form-data parçalarını ayıran sınır
Request (Client → Server)
- Host → Hangi domain (virtual host enum için kritik)
- User-Agent → Client bilgisi
- Referer → İstek nereden geldi (kolay manipüle edilir)
- Accept → Client ne kabul ediyor ( /* her şey)
- Cookie → Cookie’ler
- Authorization → Basic/Bearer/JWT vs.
Response (Server → Client)
- Server → Sunucu bilgisi (fingerprinting)
- Set-Cookie → Browser’a cookie set eder (session/prefs)
- WWW-Authenticate → “Bu endpoint auth ister” bilgisini verir (401 ile gelir)
Security Headers
- Content-Security-Policy (CSP) → XSS riskini azaltır (script kaynaklarını kısıtlar)
- Strict-Transport-Security (HSTS) → HTTPS zorlar, downgrade’i engeller
- Referrer-Policy → Referer bilgisinin ne kadarını göndereceğini belirler
HTTP Methods
Method Anlamı GET Al/oku (parametre URL’de) POST Gönder/oluştur (body’de) HEAD Sadece header PUT Komple güncelle / bazen oluştur PATCH Kısmi güncelle DELETE Sil OPTIONS “Hangi method’lar izinli?”
Mini:
- GET → al
- POST → gönder
- PUT → koy/komple değiştir
- PATCH → yamala
- DELETE → sil
- OPTIONS → izin sor
Status Code Notları
Sınıflar
- 1xx → Bilgi
- 2xx → Başarılı
- 3xx → Redirect
- 4xx → Client hatası
- 5xx → Server hatası
En sık gelenler
- 200 → OK
- 302 → Redirect
- 400 → Bad Request
- 403 → Forbidden
- 404 → Not Found
- 500 → Internal Server Error
Basic Auth
Basic Auth istiyor dersin :
- Status: 401 Unauthorized (bazı yerlerde “Authorization Required” yazar)
- Header: WWW-Authenticate: Basic realm="..."
Mantık:
Authorization: Basic <base64(username:password)>Modern fark:
- Basic → Authorization: Basic ...
- JWT vb. → Authorization: Bearer <token>
CRUD API Komutları (cURL ile)

READ (GET)
curl http://<IP>:<PORT>/api.php/city/london
curl -s http://<IP>:<PORT>/api.php/city/london | jq
curl -s http://<IP>:<PORT>/api.php/city/ | jqCREATE (POST)
curl -X POST http://<IP>:<PORT>/api.php/city/ \\
-H"Content-Type: application/json" \\
-d'{"city_name":"HTB_City","country_name":"HTB"}'UPDATE (PUT)
curl -X PUT http://<IP>:<PORT>/api.php/city/london \\
-H"Content-Type: application/json" \\
-d'{"city_name":"New_HTB_City","country_name":"HTB"}'DELETE (DELETE)
curl -X DELETE http://<IP>:<PORT>/api.php/city/New_HTB_CityCRUD ↔ HTTP Method Mapping
CRUD HTTP Method Create POST Read GET Update PUT Delete DELETE
CRUD API -cURL
0) Mantık (Endpoint yapısı)
- API’de genelde yol (path) şu mantıkta olur:
- /api.php/<tablo>/<arama_veya_kayıt_anahtarı>
- Örnek:
- /api.php/city/london → city tablosunda london kaydı
1) READ (Oku) — GET
1.1 Tek bir kaydı oku
curl http://<SERVER_IP>:<PORT>/api.php/city/london- Anlamı: city tablosunda london kaydını getirir.
- Not: JSON döner (tek satır gibi görünebilir).
1.2 JSON’u düzgün formatla (jq ile)
curl -s http://<SERVER_IP>:<PORT>/api.php/city/london | jq- s (silent): cURL “progress/ekstra” çıktılarını kapatır.
- | jq : JSON’u okunabilir şekilde formatlar.
1.3 Kısmi arama (eşleşenleri getir)
curl -s http://<SERVER_IP>:<PORT>/api.php/city/le | jq- Anlamı: “le” içeren şehirleri listeleyebilir (Leeds, Leicester vs.).
1.4 Tüm kayıtları getir (boş path)
curl -s http://<SERVER_IP>:<PORT>/api.php/city/ | jq- Anlamı: city tablosundaki tüm kayıtları döndürür.
2) CREATE (Ekle/Oluştur) — POST
curl -X POST http://<SERVER_IP>:<PORT>/api.php/city/ \\
-d'{"city_name":"HTB_City", "country_name":"HTB"}' \\
-H'Content-Type: application/json'- X POST : HTTP metodunu POST yapar (ekleme).
- d '...' : Gönderilen data (JSON body).
- H 'Content-Type: application/json' : “Body JSON” diyor; server doğru parse etsin diye şart olabilir.
- Anlamı: Yeni şehir kaydı ekler.
Eklenen kaydı doğrula
curl -s http://<SERVER_IP>:<PORT>/api.php/city/HTB_City | jq- Anlamı: Eklenen HTB_City kaydını oku → başarılı mı kontrol.
3) UPDATE (Güncelle) — PUT
curl -X PUT http://<SERVER_IP>:<PORT>/api.php/city/london \\
-d'{"city_name":"New_HTB_City", "country_name":"HTB"}' \\
-H'Content-Type: application/json'- Kritik nokta: URL’de hangi kaydı güncelleyeceğin yazmalı: /city/london
- Anlamı: london kaydını yeni JSON ile değiştirir (ör: adı New_HTB_City olur).
Güncellemeyi doğrula
curl -s http://<SERVER_IP>:<PORT>/api.php/city/london | jq- Anlamı: Eski kayıt var mı? (çoğu senaryoda boş döner)
curl -s http://<SERVER_IP>:<PORT>/api.php/city/New_HTB_City | jq- Anlamı: Yeni isimli kayıt geldi mi? (başarılı güncelleme)
4) DELETE (Sil) — DELETE
curl -X DELETE http://<SERVER_IP>:<PORT>/api.php/city/New_HTB_City- Anlamı: New_HTB_City kaydını siler.
Silindi mi kontrol et
curl -s http://<SERVER_IP>:<PORT>/api.php/city/New_HTB_City | jq- Anlamı: Eğer [] dönüyorsa → kayıt yok → silinmiş.







