OverTheWire Natas wargame, web güvenliğinde sık karşılaşılan zafiyetleri pratik yaparak öğrenmeyi amaçlayan bir platformdur.
http://natas4.natas.labs.overthewire.org/index.php
username→ natas4
password→QryZXc2e0zahULdHrtHxzyYkj59kUxLQ
Görev Özeti

Natas Level 4'te, sayfaya erişim HTTP Referer header'ına göre sınırlandırılmıştır.
Sunucu, isteğin belirli bir sayfadan (natas5) gelip gelmediğini kontrol eder.
Eğer Referer header yoksa ya da beklenen değeri taşımıyorsa erişim engellenir.
Bu yaklaşım, kullanıcı tarafından kontrol edilebilen bir header'a güvenmek anlamına gelir.
Zafiyet Türü
- Broken Access Control
- Client-side trust
- HTTP header'lara güvenme
Referer header, bir HTTP isteğinin hangi sayfadan geldiğini sunucuya söyleyen bilgidir.
Tarayıcılar bunu otomatik ekler ama tamamen istemci kontrolündedir.
HTTP isteğinde şu şekilde görünür:
Referer: https://example.com/onceki-sayfa
Anlamı:
"Kullanıcı bu isteği buradan geldi."
Genellikle bir linke tıklanınca, bir form gönderilince, bir sayfadan başka bir sayfaya geçilince eklenir.
Örnek:
Google → example.com
GET / HTTP/1.1 Host: example.com Referer: https://www.google.com/
Asıl amaçları:
- Analitik
- CSRF için ek sinyal
- Basit istatistikler
- Reklam / yönlendirme takibi
Ama güvenilmezdir çünkü kullanıcı değiştirebilir, tarayıcı hiç göndermeyebilir. Ayrıca curl, Burp, Postman ile kolayca spoof edilir
Çözüm
Tarayıcı yerine manuel HTTP isteği oluşturup, sunucunun beklediği Referer header'ını kendimiz ekleyerek bu kontrolü aşabiliriz.

Gönderdiğimiz GET isteği 401 Unauthorized olarak dönüyor. Bu isteğe "Referer" ekleyip bu kontrolü aşacağız. Burp Suite Repeater ya curl komutunu kullanabiliriz.
BURP SUITE
GET isteğini repeatera gönderiyoruz. Burada Referer satırı ekleyip referansı http://natas5.natas.labs.overthewire.org/ olarak gösteriyoruz. Referer ekledikten sonra Authorization eklemek gerekir. Bu alan username:password kombinasyonun base64 ile şifrelenmiş halini tutar. Yani kimlik doğrulama yapılır. Yukarıda bahsettiğim gibi;
username=natas4
password=QryZXc2e0zahULdHrtHxzyYkj59kUxLQ
Terminalde şu komutu çalıştırarak base64 çıktısını elde ediyoruz.
echo -n "natas4:QryZXc2e0zahULdHrtHxzyYkj59kUxLQ" | base64 →bmF0YXM0OlFyeVpYYzJlMHphaFVMZEhydEh4enlZa2o1OWtVeExR
Bunu Authorization alanına yazacağız.

Bu isteği sunucuya gönderiyoruz. Dönen cevap 200 OK ile döner ve natas5 için gerekli şifre mesajın içindedir.

curl ile istek gönderme
curl -u natas4:QryZXc2e0zahULdHrtHxzyYkj59kUxLQ\\
-H "Referer: <http://natas5.natas.labs.overthewire.org/>" \\
<http://natas4.natas.labs.overthewire.org/>ŞİFRE kısmına Natas 3'ten aldığınız şifre yazılmalıdır.
Sunucu, Natas Level 5 için gerekli olan şifreyi döndürür.
Bu da erişim kontrolünün başarıyla aşıldığını gösterir.
Çıkarımlar
- HTTP Referer gibi header'lar güvenlik amacıyla kullanılmamalıdır
- Header'lar kullanıcı tarafından kolayca manipüle edilebilir
- Authentication tek başına yeterli değildir, authorization şarttır
- Referer header ile yetkilendirme yapılmamalıdır
- Tüm erişim kontrolleri server-side yapılmalıdır
- Session ve rol bazlı erişim kontrolü uygulanmalıdır
OKUDUĞUNUZ İÇİN TEŞEKKÜR EDERİM