Cheatsheet

Cheatsheet de deserialización insegura

Identificar el lenguaje/librería PRIMERO — no hay payload universal. Verificar la versión exacta para elegir la gadget chain. Relacionado: writeup CTF [[2026-09-22-exa-writeup-ctf-deserializacion-insegura-java-php-python-gadget-]] y el unserialize real en change.php de un cliente (ver [[Playbook de hallazgos recurrentes del portfolio]]).

Fingerprint (cómo huele en el wire)

  • Java: base64 que empieza con rO0AB (o hex AC ED 00 05). Cookies/ViewState/parámetros/RMI/JMX.
  • PHP: formato O:8:"ClassName":N:{...} (o a:/s:); a veces por phar:// en un sink de filesystem.
  • Python pickle: base64 que empieza con gASV/gAJ/\x80\x04.
  • .NET: TypeNameHandling en JSON.NET, BinaryFormatter, ViewState (__VIEWSTATE), LosFormatter.
  • Ruby: Marshal (\x04\x08), o YAML !ruby/object.

Java

  • ysoserial: java -jar ysoserial.jar CommonsCollections6 'cmd' | base64. Elegir gadget según libs en el classpath (CommonsCollections1-7, Spring, Groovy, JRMP, etc.).
  • Si hay allowlist de clases (ObjectInputStream endurecido): buscar clases válidas que sirvan de puente.
  • ViewState .NET/Java, RMI/JMX (ysoserial JRMPListener/JRMPClient).

PHP

  • phpggc: phpggc Monolog/RCE1 system id -b (genera la cadena en base64). Frameworks: Laravel, Symfony, Monolog, Guzzle, WordPress.
  • PHAR deserialization: subir un .phar (disfrazado de imagen con metadata serializada) y disparar un sink filesystem (file_exists, fopen, getimagesize) con phar://ruta.
  • POP chains manuales leyendo el código: __wakeup/__destruct/__toString.

Python

  • pickle/__reduce__: class E: __reduce__=lambda self:(os.system,('id',)) → pickle.dumps(E()).
  • Werkzeug/Flask SECRET_KEY filtrado → forjar sesión firmada con pickle. YAML yaml.load sin SafeLoader.

.NET

  • ysoserial.net: ysoserial.exe -f Json.Net -g ObjectDataProvider -c "cmd" -o base64.
  • TypeNameHandling.All/Auto en Json.NET, BinaryFormatter.Deserialize, ViewState sin MAC (__VIEWSTATE + blacklist3r para la machineKey).

Cheatsheet de referencia

ysoserial (Java), phpggc (PHP), ysoserial.net (.NET), blacklist3r (ViewState). Repo: github.com/ljagiello/ctf-skills (server-side-deser.md) como checklist rápido.