脏数据下的java反序列化超浅分析记录
hikeny 安全鼓励师

脏数据下的java反序列化超浅分析记录

wireshark可以直接抓取反序列化的数据包,并导出。

image

导出的数据为gzip压缩形式,使用BlueTeamTools进行gzip解码并导出为class文件——GzipDecompile.class

image

随后使用P牛写的JAVA反序列化分析工具zkar,分析并查看class文件中的反序列化结构。

zkar是使用go语言写的,相比之前的SerializationDumper.jar,非常快,不会被攻击者添加的大量脏数据卡死

1
zkar.exe dump -f GzipDecompile.class > dump.txt

这一大坨就是攻击者为了绕过waf添加的脏数据

java反序列化协议分析以后再细看,先记个大概

开头是aecd

image

在导出的反序列化分析结构中找到真正恶意的类,这一串中尝试将里面的二进制内容进行反序列化。

应该是二次反序列化,aced开头的二进制数据和deserialize函数的调用

image

BlueTeamTools解码成class文件,再使用zkar分析一下

image
1
zkar.exe dump -f outputHexStr.class

zkar默认将反编译的类以winhex的形式打开

image

使用以下命令可以查看原始数据

1
zkar.exe dump -f outputHexStr.class -golang
image

随后复制并去除所有的\x,使用BlueTeamTools转换为class,再反编译查看,写入了jsp脚本文件,这里的反序列攻击只是做了个探测

image

总结

  1. 可以反复使用zkar分析、反序列化的二进制(aecd开头),去除脏数据,直到筛选出可以反编译的class(cafe开头)

  2. 攻击者添加的脏数据一般一眼就能看出来(比如一大堆aaaa之类的),删除脏数据,然后修改长度为指定长度(二进制中有一段是长度,zkar可以分析查看),不过要麻烦一点儿,第一个方法无脑简单点儿。

Powered by Hexo & Theme Keep
Total words 1.4k Unique Visitor Page View