上述结不雅并不是我们想要的信息,我们想问的问题是,这个情况若何实现反序列化功能?为了答复这个问题,我们可以应用wireshark、tcpdump或者tshark来捕获6666端口上的流量。我们可以应用如下敕令,应用tcpdump来捕获流量:
- tcpdump -i lo -n -w deserlab.pcap 'port 6666'
- //this is the first class that will be deserialized
- String classToSerialize = "sun.reflect.annotation.AnnotationInvocationHandler";
- //access the constructor of the AnnotationInvocationHandler class
- final Constructor<?> constructor = Class.forName(classToSerialize).getDeclaredConstructors()[0];
- //normally the constructor is not accessible, so we need to make it accessible
- constructor.setAccessible(true);
在持续浏览本文之前,你可以先用wireshark来浏览一下pcap文件。读完Nick的文┞仿后,你应当已经懂得今朝所处的状况,至少可以或许辨认出隐蔽在流量中的序列化Java对象。
2.1 提取序列化数据
根据这些流量,我们可以肯定的是收集中有序列化数据正在传输,如今让我们来分析哪些数据正在传输。我选择应用SerializationDumper对象来解析这些流量,这个对象属于我们要用的对象集之一,感化与jdeserialize类似,后者属于有名已久腔骋绍发患咀用的老对象。在应用这些对象之前,我们须要先预备好待处理数据,是以,我们须要将pcap转换为可待分析的数据格局。
- tshark -r deserlab.pcap -T fields -e tcp.srcport -e data -e tcp.dstport -E separator=, | grep -v ',,' | grep '^6666,' | cut -d',' -f2 | tr '\n' ':' | sed s/://g
2.3 应用DeserLab中的马脚
这条敕令固然看起来很长,但至少能正常工作。我们可以将这条敕令分化为更好懂得的子敕令,因为该敕令的功能是将pcap数据转换为经由十六进制编码的一行输出字符串。起首,该敕令将pcap转换为文本,文本中只包含传输的数据、TCP源端标语以及目标端标语:
- tshark -r deserlab.pcap -T fields -e tcp.srcport -e data -e tcp.dstport -E separator=,
结不雅如下所示:
- 50432,,6666
- 6666,,50432
- 50432,,6666
- 50432,aced0005,6666
- 6666,,50432
- 6666,aced0005,50432
如上述结不雅所示,在TCP三次握手时代并没有传输数据,是以你可以看到',,'如许一段文本。随后,客户端发送第一个字节,办事器返回ACK报文,然后再发还某些字节数据,以词攀类推。敕令的第二个功能是持续处理这些文本,根据端口以及每一行的开首部分来选择输出合适的载荷:
- | grep -v ',,' | grep '^6666,' | cut -d
推荐阅读
「多体问题」(又叫 N 体问题)是看似简单,实际上在当今数学中极难霸占的问题。多体问题是指多个互相感化的实体。在物理学中,任何三体问题都没有一个封闭的情势或解析解(见:https://e>>>详细阅读
本文标题:Java反序列化漏洞从理解到实践
地址:http://www.17bianji.com/lsqh/37657.html
1/2 1