
Analisador de protocolo de serialização Java baseado em Go que analisa, despeja e gera payloads de desserialização com suporte para gadgets ysoserial e uma biblioteca para manipulação de dados.
ZKar é uma ferramenta de análise de protocolo de serialização Java implementada em Go. Esta ferramenta ainda está em desenvolvimento, portanto não há documentação completa da API nem guia de contribuição.
ZKar fornece:
Usar o ZKar é fácil. Use go get para instalar o ZKar juntamente com a biblioteca e suas dependências:
go get -u github.com/phith0n/zkar
Em seguida, use github.com/phith0n/zkar/* na sua aplicação:
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())
}
Aqui está um exemplo que mostra como ler um payload existente e modificá-lo para um payload de codificação UTF-8 superlonga.
ZKar também fornece uma ferramenta de linha de comando que você pode usar diretamente:
$ 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 exemplo, você pode despejar (dump) o payload CommonsBeanutils3 do ysoserial assim:
$ go run main.go dump -f "$(pwd)/testcases/ysoserial/CommonsBeanutils3.ser"
ZKar é uma ferramenta bem testada que passou em todos os testes de análise e reconstrução de gadgets gerados pelo ysoserial. Isso significa que gadgets gerados pelo ysoserial podem ser analisados pelo ZKar, e as structs analisadas podem ser convertidas de volta para uma string de bytes que é igual à original.
Observação: Para analisar o payload JDK8u20, você deve adicionar a flag --jdk8u20 ao comando dump. Como o payload não é um fluxo de dados serializado válido, é necessário informar ao ZKar para corrigir os dados através dessa flag.
ZKar é lançado sob a licença MIT. Veja LICENSE
| Gadget | Pacote | Análise | Reconstrução | Tempo de Análise |
|---|
| 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 |