
Analizzatore di protocollo di serializzazione Java basato su Go che analizza, scarica e genera payload di diserializzazione con supporto per i gadget di ysoserial e una libreria per la manipolazione dei dati.
ZKar è uno strumento di analisi del protocollo di serializzazione Java implementato in Go. Questo strumento è ancora work in progress, quindi non esiste una documentazione API completa né una guida ai contributi.
ZKar fornisce:
Usare ZKar è facile. Usa go get per installare ZKar insieme alla libreria e alle sue dipendenze:
go get -u github.com/phith0n/zkar
Successivamente, usa github.com/phith0n/zkar/* nella tua applicazione:
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())
}
Qui c'è un esempio che mostra come leggere un payload esistente e modificarlo in un payload con codifica UTF-8 overlong.
ZKar fornisce anche uno strumento da riga di comando che puoi usare direttamente:
$ 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)
Ad esempio, puoi dumpare il payload CommonsBeanutils3 da ysoserial in questo modo:
$ go run main.go dump -f "$(pwd)/testcases/ysoserial/CommonsBeanutils3.ser"
ZKar è uno strumento ben testato che ha superato tutti i test di parsing e ricostruzione dei gadget generati da ysoserial. Ciò significa che i gadget generati da ysoserial possono essere analizzati da ZKar, e le strutture analizzate possono essere riconvertite in stringhe di byte uguali a quelle originali.
Nota: Per analizzare il payload JDK8u20, è necessario aggiungere il flag --jdk8u20 al comando dump.
Poiché il payload non è un flusso di dati serializzato valido, è necessario informare ZKar di applicare le correzioni ai dati tramite questo flag.
ZKar è rilasciato sotto licenza MIT. Vedi LICENSE
| Gadget | Pacchetto | Analisi | Ricostruzione | Tempo di analisi |
|---|
| 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 |