top of page

HyperText Transfer Protocol (HTTP) notları

Yazarın fotoğrafı: Songül ÖZÜGÜRLER
Songül ÖZÜGÜRLER
28 Nis
5 dakikada okunur

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)

HyperText Transfer Protocol (HTTP) notları

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/ | jq

CREATE (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_City

CRUD ↔ 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ş.

 
 
bottom of page