PHP Object İnjection

Merhabalar bu makalemde object injection hakkında bişeyler bahsetmek istiyorum. Object injection nedir sorusuna cevap vermeden önce bilinmesi gereken ve bu zafiyetten neler yapılabilir gibi farklı soruları incelemeden önce php de serialize fonksiyonun ne işe yaradığını nerde ve nasıl kullanıldığını öğrenip, kavramak gerekiyor. Öncelikle  Bunun için öncelikle PHP Object yapısı hakkında ve Objeleri ifade edebildiğimiz serialize() fonksiyonunu php dökümanlarından detaylı olarak kaynağını bulup öğrenebiliriz.

Serialize fonksiyonu denilen bu fonksiyonun olayı şudur ki; PHP içerisinde bir objeyi veya bir değişkeni (artık o an nasıl bir şeyle karışaştıysanız. Bu bir dizi bile olabilir) taşınabilir hale getirmek için yazılmış bir fonksiyondur. Serialize edilmiş bir object’in anlaşılabilir ve geri döndürülebilir bir yapısı vardır. Belli bir classtan üretilmiş ve serialize edilmiş olan objenin örnek çıktısı şu şekildedir.

O:9:”CEZERİSGA”:3:{s:7:”method1”;s:6:”cezeri”;s:22:”SiberGüvenlikAkademisi”;}

Aynı şekilde string ile ifade edilen bir array ise unserialize() fonksiyonu ile tekrardan array’e dönüştürülebilmektedir.

serialize çıktısında gördüğünüz üzere çıkan textten nasıl anlam çıkarırız.

Örnek:

s:9:”CEZERİSGA”;s:5:”selam”;

s:9:; Variable’ın name’inin boyutu (byte cinsinden) “CEZERİSGA”; Variable’ın name’i s (Küçük S); Variable’ın type’ı string imiş. 5; Value boyutu (byte cinsinden). “erdem”; değer

incelediğimiz bu Object Injection zafiyetinde PHP’de kullanıcıdan/dışardan alınan datanın “unserialize()” edilerek fonksiyondan geçirilmesiden kaynaklı oluşan zafiyettir. “unserialize()” fonksiyonu ise “serialize()” fonksiyonundan geçirilmiş bir PHP değişkenini yeniden yeniden kullanılması için oluşturur. Serialized edilen değişkenimiz bir class’tan türetilen bir nesne ise zaten var olup serialize edilip saklanmış bir veriyi tekrardan oluşturduğu için otomatik olarak nesnenin ait olduğu class’ın wakeup metodu tetiklenecektir. Resmi olarak php’nin sunduğu dökümantasyonda bu konu üzerinde durulmamış ve çok bahsi geçmemiş olmasına rağmen, serialized veri unserialize fonksiyonundan geçirildiğinde wakeup() fonksiyonu ile beraber destruct() metodu da tetiklenmektedir. Böylelikle serialize edilmiş bir object’in bu değişkenlerine her türlü müdahale edilebilebilir. Değişkenlerine müdahale ettiğiniz objenin arasına kendi zararlı payloadlarınızı girebilirsiniz. Bu şekilde ne yapmak istiyorsanız artık burdan sokabilirsiniz. Örnek olarak bi xss payloadını bu objenin arasına yerleştirdiğiniz zaman sayfada kullanılacak olan bu obje içerisinden okunacak olan xss payloadı sayfa içerisinde çalışmaya başlayacaktır. Sayfalarda direk xss bulmasanız bile object injection zafiyetine sebep olacak yeri bulduktan sonra object injection zafiyetini xss e bile çevirebilirsiniz. Benim bu konu hakkında bahsedeceklerim bu kadar başka bir anlatımla görüşmek dileğiyle :-)


Yapılan Yorumlar
Erdem OFLAZ

Bir mum, diğer mumu tutuşturmakla ışığından bir şey kaybetmez.
 Kategoriler
 Popüler yazılar