WEB | OWASP TOP 10 | Host Header Injection
Başlık anlamına gelen Header bir web sitesindeki bazı bilgileri ve genel tanımlamaların bulunduğu metindir. Bu bilgi üzerinde değişiklik yaparak zaafiyet oluşturma durumuna Host Header Injection denir.
Application.security üzerinden bu zaafiyeti nasıl sömürdüğümüzü inceleyelim.
DesignDECK adlı bir tasarım sitesi üzerinde Host Header Injection zaafiyeti arayacağız. Saldırganımız Bob giriş sayfası üzerinden Forgot my password tıklayarak şifre sıfırlama bağlantısı göndermeyi dener.
mail adresini girerek devam ettikten sonra
Bir web proxy kullanarak HTTP isteklerini inceler. Email değişkeniyle verdiğimiz değerin gönderildiğini görüyoruz. İlerlemeden önce parola sıfırlama işleminin kaynak kodlarını bir inceleyelim.
Altı çizili yerlerde görüldüğü üzere alınan değerler sendEmail methoduna parametre olarak veriliyor. Header içinde gönderilen host değişkenini kendimiz manipüle etmeyi deneyelim.
Görüldüğü gibi host değerini www.abcd.com ile değiştirdik ve gönderdiğimizde
Şifre sıfırlama bağlantısının e-posta adresimize gönderildiği uyarısını aldık.Ardından e-posta adresimize girip gelen maili açtığımızda
Şifre sıfırlama bağlantısının bizim verdiğimiz host değeri alınarak oluşturulduğu gözüküyor.Zaafiyet bulduğumuza göre sömürmeyi deneyelim.
saldırganımız www.designdeck1.com adıyla fake bir web sitesi oluşturduktan sonra sunucuda tail -f /www/access.log komutunu çalıştırarak son gelen istekleri dinleyeme başlar.
Şifre sıfırlama bağlantısını gönderirken host bilgisini kendi oluşturduğumuz web sitesi ile değiştiriyoruz.
E-posta adresini kontrol ettiğimizde şifre sıfırlama bağlantısında oluşturduğumuz fake adres gözüküyor. Bağlantıya tıkladığımızda
Access.log dosyasına GET isteğiyle şifre sıfırlama tokenini düştüğü gözüküyor.Bu şekild zaafiyeti sömürmüş oluyoruz.Gelin kodları fixlemek için nasıl bir yol izlendiğine bakalım.
Bir önceki kaynak kodlar ile karşılaştırıldığında kırmızı ile işaretlediğim yerde bir array içerisine kullanıcak host(domain) adresleri sabit olarak belirtiliyor bu şekilde dışarıdan host injection saldırısı yapmanın önüne geçiliyor.