
Go 기반 Java 직렬화 프로토콜 분석기로, ysoserial 가젯 지원과 데이터 조작 라이브러리를 포함하며 역직렬화 페이로드를 파싱, 덤프 및 생성합니다.
ZKar는 Go로 구현된 Java 직렬화 프로토콜 분석 도구입니다. 이 도구는 아직 진행 중인 작업이므로 완전한 API 문서와 기여 가이드가 없습니다.
ZKar는 다음을 제공합니다:
ZKar 사용은 쉽습니다. go get을 사용하여 ZKar와 라이브러리 및 종속성을 설치하세요:
go get -u github.com/phith0n/zkar
그런 다음 애플리케이션에서 github.com/phith0n/zkar/*를 사용하세요:
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())
}
여기는 기존 페이로드를 읽고 UTF-8 오버롱 인코딩 페이로드로 수정하는 방법을 보여주는 예제입니다.
ZKar는 또한 직접 사용할 수 있는 명령줄 유틸리티 도구를 제공합니다:
$ 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)
예를 들어, ysoserial의 페이로드 CommonsBeanutils3를 덤프할 수 있습니다:
$ go run main.go dump -f "$(pwd)/testcases/ysoserial/CommonsBeanutils3.ser"
ZKar는 모든 ysoserial 생성 가젯의 파싱 및 재구축 테스트를 통과한 잘 테스트된 도구입니다. 즉, ysoserial에 의해 생성된 가젯은 ZKar로 파싱될 수 있으며, 파싱된 구조체는 원본과 동일한 바이트 문자열로 다시 변환될 수 있습니다.
참고: JDK8u20 페이로드를 파싱하려면 dump 명령에 --jdk8u20 플래그를 추가해야 합니다. 이 페이로드는 유효한 직렬화 데이터 스트림이 아니므로, 이 플래그를 통해 ZKar가 데이터를 패치하도록 지정해야 합니다.
ZKar는 MIT 라이선스로 배포됩니다. LICENSE를 참조하세요.
| 가젯 | 패키지 | 파싱 | 재구축 | 파싱 시간 |
|---|
| 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 |