
Analizador de protocolo de serialización Java basado en Go que analiza, vuelca y genera cargas útiles de deserialización con soporte de gadgets ysoserial y una biblioteca para manipulación de datos.
ZKar es una herramienta de análisis del protocolo de serialización de Java implementada en Go. Esta herramienta aún está en desarrollo, por lo que no hay una guía de API completa ni de contribución.
ZKar proporciona:
Usar ZKar es fácil. Usa go get para instalar ZKar junto con la biblioteca y sus dependencias:
go get -u github.com/phith0n/zkar
Luego, usa github.com/phith0n/zkar/* en tu aplicación:
package main
import (
"fmt"
"github.com/phith0n/zkar/serz"
"log"
"os"
)
func main() {
fs, _ := os.Open("./testcases/ysoserial/CommonsCollections6.ser")
defer fs.Close()
serialization, err := serz.FromReader(fs)
if err != nil {
log.Fatal("parse error")
}
fmt.Println(serialization.ToString())
}
Aquí hay un ejemplo que muestra cómo leer una carga útil existente y modificarla a una carga útil de codificación UTF-8 sobrelarga.
ZKar también proporciona una herramienta de línea de comandos que puedes usar directamente:
$ go run main.go
NAME:
zkar - A Java serz tool
USAGE:
main [global options] command [command options] [arguments...]
COMMANDS:
generate generate Java serz attack payloads
dump parse the Java serz streams and dump the struct
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
--help, -h show help (default: false)
Por ejemplo, puedes volcar la carga útil CommonsBeanutils3 de ysoserial de la siguiente manera:
$ go run main.go dump -f "$(pwd)/testcases/ysoserial/CommonsBeanutils3.ser"
ZKar es una herramienta bien probada que ha pasado todas las pruebas de análisis y reconstrucción de gadgets generados por ysoserial. Esto significa que los gadgets generados por ysoserial pueden ser analizados por ZKar, y las estructuras analizadas pueden convertirse nuevamente en una cadena de bytes igual a la original.
Nota: Para analizar la carga útil de JDK8u20, debes agregar el flag --jdk8u20 al comando dump. Como la carga útil no es un flujo de datos serializados válido, es necesario indicarle a ZKar que parchee los datos mediante este flag.
ZKar se publica bajo la licencia MIT. Consulta LICENSE
| Gadget | Package | Analizar | Reconstruir | Tiempo de análisis |
|---|
| AspectJWeaver | ysoserial | ✅ | ✅ | 80.334µs |
| BeanShell1 | ysoserial | ✅ | ✅ | 782.613µs |
| C3P0 | ysoserial | ✅ | ✅ | 98.321µs |
| Click1 | ysoserial | ✅ | ✅ | 573.298µs |
| Clojure | ysoserial | ✅ | ✅ | 72.415µs |
| CommonsBeanutils1 | ysoserial | ✅ | ✅ | 461.15µs |
| CommonsCollections1 | ysoserial | ✅ | ✅ | 64.484µs |
| CommonsCollections2 | ysoserial | ✅ | ✅ | 508.918µs |
| CommonsCollections3 | ysoserial | ✅ | ✅ | 564.071µs |
| CommonsCollections4 | ysoserial | ✅ | ✅ | 535.449µs |
| CommonsCollections5 | ysoserial | ✅ | ✅ | 137.609µs |
| CommonsCollections6 | ysoserial | ✅ | ✅ | 68.753µs |
| CommonsCollections7 | ysoserial | ✅ | ✅ | 178.549µs |
| FileUpload1 | ysoserial | ✅ | ✅ | 35.39µs |
| Groovy1 | ysoserial | ✅ | ✅ | 150.991µs |
| Hibernate1 | ysoserial | ✅ | ✅ | 789.674µs |
| Hibernate2 | ysoserial | ✅ | ✅ | 168.624µs |
| JBossInterceptors1 | ysoserial | ✅ | ✅ | 632.581µs |
| JRMPClient | ysoserial | ✅ | ✅ | 32.967µs |
| JRMPListener | ysoserial | ✅ | ✅ | 38.263µs |
| JSON1 | ysoserial | ✅ | ✅ | 2.157225ms |
| JavassistWeld1 | ysoserial | ✅ | ✅ | 468.596µs |
| Jdk7u21 | ysoserial | ✅ | ✅ | 355.01µs |
| Jython1 | ysoserial | ✅ | ✅ | 216.862µs |
| MozillaRhino1 | ysoserial | ✅ | ✅ | 1.775193ms |
| MozillaRhino2 | ysoserial | ✅ | ✅ | 409.124µs |
| Myfaces1 | ysoserial | ✅ | ✅ | 22.997µs |
| Myfaces2 | ysoserial | ✅ | ✅ | 38.131µs |
| ROME | ysoserial | ✅ | ✅ | 485.804µs |
| Spring1 | ysoserial | ✅ | ✅ | 797.469µs |
| Spring2 | ysoserial | ✅ | ✅ | 358.041µs |
| URLDNS | ysoserial | ✅ | ✅ | 21.502µs |
| Vaadin1 | ysoserial | ✅ | ✅ | 438.729µs |
| Wicket1 | ysoserial | ✅ | ✅ | 23.509µs |
| JDK8u20* | pwntester | ✅ | ✅ | 529.3µs |