
محلل بروتوكول تسلسل Java مكتوب بلغة Go يقوم بتحليل وتفريغ وإنشاء حمولات إلغاء التسلسل مع دعم أدوات ysoserial ومكتبة لمعالجة البيانات.
ZKar هي أداة تحليل لبروتوكول تسلسل Java مطبقة بلغة Go. هذه الأداة لا تزال قيد التطوير، لذا لا توجد وثائق 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)
على سبيل المثال، يمكنك تفريغ حمولة CommonsBeanutils3 من ysoserial كما يلي:
$ go run main.go dump -f "$(pwd)/testcases/ysoserial/CommonsBeanutils3.ser"
ZKar هي أداة جيدة الاختبار تجاوزت جميع اختبارات تحليل وإعادة بناء الأدوات التي تم إنشاؤها بواسطة ysoserial. هذا يعني أنه يمكن تحليل الأدوات التي تم إنشاءها بواسطة ysoserial بواسطة ZKar، ويمكن تحويل الهياكل المحللة مرة أخرى إلى سلسلة بايت مساوية للأصلية.
ملاحظة: لتحليل حمولة JDK8u20، يجب إضافة العلامة --jdk8u20 إلى أمر dump. نظرًا لأن الحمولة ليست دفق بيانات متسلسل صالح، فمن الضروري إخبار 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 |