- 30 Nis 2012
- 2,728
- 13
Object Injection Nedir ?
Object Injection, saldırganın SQL enjeksiyon, DOS, Kod enjeksiyonu gibi çeşitli saldırılar gerçekleştirmesine yol açabilecek bir uygulama güvenlik açığıdır.
PHP nesne seri hale getirilmesine izin verdiğinden, saldırganlar geçici seri hale getirilmiş dizeleri savunmasız bir unserialize() çağrısına geçirebilir ve bu da uygulama kapsamına keyfi bir PHP nesnesi (nesneleri) enjeksiyonu ile sonuçlanabilir.
Object Injection Güvenlik Açığı Nasıl Oluşur ?
Kullanıcı tarafından sağlanan bir girdi sonrasında unserialize() PHP işlevine geçilmeden önce uygun bir şekilde sterilize edilmediğinde ortaya çıkmaktadır.
Object Injection, saldırganın SQL enjeksiyon, DOS, Kod enjeksiyonu gibi çeşitli saldırılar gerçekleştirmesine yol açabilecek bir uygulama güvenlik açığıdır.
PHP nesne seri hale getirilmesine izin verdiğinden, saldırganlar geçici seri hale getirilmiş dizeleri savunmasız bir unserialize() çağrısına geçirebilir ve bu da uygulama kapsamına keyfi bir PHP nesnesi (nesneleri) enjeksiyonu ile sonuçlanabilir.
Object Injection Güvenlik Açığı Nasıl Oluşur ?
Kullanıcı tarafından sağlanan bir girdi sonrasında unserialize() PHP işlevine geçilmeden önce uygun bir şekilde sterilize edilmediğinde ortaya çıkmaktadır.
Object Injection İçin Alınacak Önlemler Nelerdir ?
Kullanıcı tarafından sağlanan bir girişde unserialize() işlevini kullanmamak.
Object Injection Örnek
Üç string tipi değişken içeren bir login, username, password ve role sınıflarımız bulunmaktadır. Ancak, flag.txt dosya içeriğini göstermeden önce bazı kontrolleri yapmak için seri hale getirilmemiş verilerin nasıl kullanıldığını görebiliriz.
Bayrak elde etmek için aşağıdaki koşul yerine getirilmelidir: 1337'nin role değişkeninden çıkarılmasından kaynaklanan $check değişkeni ADMIN metin dizisine eşittir. Daha sonra üzerinde çalışmamız gereken örnek nesneyi görebilmek için kod çalıştırılmalıdır.
Bu alıştırmanın çözümüne giden yolun role değişken baskısına değindiği bellidir. Hangi türü kullanmamız gerektiğini öğrenmek adına ilgili linki kullanabiliriz; https://php.net/manual/tr/types.comparisons.php
PHP'de bir metin dizesini 0 tamsayı değeriyle karşılaştırmanın sonucu TRUE'dur, bu nedenle role artık bir dize değilse ve 1337 (1337 - 1337 = 0) değerinde bir tamsayı olduğunda koşul yerine getirilir.
Kullanıcı tarafından sağlanan bir girişde unserialize() işlevini kullanmamak.
Object Injection Örnek
Üç string tipi değişken içeren bir login, username, password ve role sınıflarımız bulunmaktadır. Ancak, flag.txt dosya içeriğini göstermeden önce bazı kontrolleri yapmak için seri hale getirilmemiş verilerin nasıl kullanıldığını görebiliriz.
Bayrak elde etmek için aşağıdaki koşul yerine getirilmelidir: 1337'nin role değişkeninden çıkarılmasından kaynaklanan $check değişkeni ADMIN metin dizisine eşittir. Daha sonra üzerinde çalışmamız gereken örnek nesneyi görebilmek için kod çalıştırılmalıdır.
Bu alıştırmanın çözümüne giden yolun role değişken baskısına değindiği bellidir. Hangi türü kullanmamız gerektiğini öğrenmek adına ilgili linki kullanabiliriz; https://php.net/manual/tr/types.comparisons.php
PHP'de bir metin dizesini 0 tamsayı değeriyle karşılaştırmanın sonucu TRUE'dur, bu nedenle role artık bir dize değilse ve 1337 (1337 - 1337 = 0) değerinde bir tamsayı olduğunda koşul yerine getirilir.