PHP Object Injection Nedir?

      Yorum yok PHP Object Injection Nedir?

Tanımı

PHP’de kullanıcıdan alınan verinin “unserialize()” fonksiyonundan geçirilmesi sonucu class’ın __wakeup()  ve __destruct() metotlarını tetiklemesiyle oluşan bir zafiyettir.

Etkileri

XSS ve RCE saldırıları tetiklenebilir.

Tespiti

Bu zafiyetin tespit edilebilmesi için yazılım genelinde __destruct ve __wakeup metodu olan sınıfların listelenmesi gerekmektedir.

  • find /yazilim -type f|grep ‘.php$’| xargs grep ‘function __destruct(‘
  • find /yazilim -type f|grep ‘.php$’| xargs grep ‘function __wakeup(‘

şeklindeki bash scriptler vasıtasıyla ilgili metodların kullanıldığı sınıflar (class) bulunabilir.

İstismarı

Zafiyetin oluşması ve başarılı bir şekilde exploit edilmesi için aşağıdaki senaryo gerçekleşmelidir:

  • Kullanıcıdan alınan input’un unserialize metoduna gönderilmesi.
  • Yazılım genelinde herhangi bir sınıfın __destruct  ve __wakeup metodunun bulunması.
  • __destruct ve __wakeup metodunun, ait olduğu class’ın sınıf değişkenlerini herhangi bir nedenle yerel diske’e kayıt ediyor olması.
  • Bu kayıt edilen dosyanın bulunduğu dizinin web üzerinden erişilebilir olması.

RCE elde etmek için kullanılabilecek örnek bir payload:

O:8:”LogClass”:2:{s:7:”logFile”;s:8:”hack.php”;s:3:”log”;s:33:”<?php echo exec($_GET[“cmd”]); ?>”;}

Önlemler

  • Input Validation
  • Veri saklamak için serialize metodu yerine json_encode kullanmak.

 

 

 

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir